diff -r 08e8e218b9a1 javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TabPaneSkin.java
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TabPaneSkin.java	Tue Aug 14 11:08:54 2012 -0700
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TabPaneSkin.java	Thu Aug 16 13:45:51 2012 -0700
@@ -78,6 +78,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import javafx.application.Platform;
 import javafx.scene.control.SkinBase;
 import javafx.scene.input.*;
 
@@ -169,7 +170,8 @@
             // getSelectedItem and getSelectedIndex failed select the first.
             getSkinnable().getSelectionModel().selectFirst();
         } 
-        selectedTab = getSkinnable().getSelectionModel().getSelectedItem();        
+        selectedTab = getSkinnable().getSelectionModel().getSelectedItem();
+        ((TabContentRegion)getSelectedTabContentRegion()).updateContent();
         isSelectingTab = false;
         
         initializeSwipeHandlers();
@@ -204,7 +206,7 @@
 
     private void initializeTabListener() {
         getSkinnable().getTabs().addListener(new ListChangeListener<Tab>() {
-            @Override public void onChanged(final Change<? extends Tab> c) {      
+            @Override public void onChanged(final Change<? extends Tab> c) {                      
                 while (c.next()) {
                     for (final Tab tab : c.getRemoved()) {
                         // Animate the tab removal
@@ -463,7 +465,7 @@
 
         double contentWidth = w - (isHorizontal() ? 0 : headerHeight);
         double contentHeight = h - (isHorizontal() ? headerHeight: 0);
-        for (TabContentRegion tabContent : tabContentRegions) {
+        for (final TabContentRegion tabContent : tabContentRegions) {
             if (tabContent.getTab().equals(selectedTab)) {
                 tabContent.setAlignment(Pos.TOP_LEFT);
                 if (tabContent.getClip() != null) {
@@ -476,11 +478,22 @@
                 if (content != null) content.setVisible(true);
             } else {
                 Node content = tabContent.getTab().getContent();
+                if (firstLayout) {
+                    Platform.runLater(new Runnable() {
+                        @Override
+                        public void run() {
+                            tabContent.getChildren().add(tabContent.getTab().getContent());
+                        }                        
+                    });                    
+                }
                 if (content != null) content.setVisible(false);
             }
         }
+        firstLayout = false;
     }
 
+    private boolean firstLayout = true;
+    
     /**************************************************************************
      *
      * TabHeaderArea: Area responsible for painting all tabs
@@ -1090,7 +1103,7 @@
                         getBehavior().selectTab(getTab());
                     }
                 }
-            });            
+            });                               
         }
 
         private void updateGraphicRotation() {
@@ -1278,29 +1291,17 @@
             getStyleClass().setAll("tab-content-area");
             setManaged(false);
             this.tab = tab;
-            updateContent();
 
             tabListener = new InvalidationListener() {
                 @Override public void invalidated(Observable valueModel) {
                     if (valueModel == getTab().selectedProperty()) {
-                        setVisible(getTab().isSelected());
+                        setVisible(getTab().isSelected());                        
                     } else if (valueModel == getTab().contentProperty()) {
                         getChildren().clear();
                         updateContent();
-                    }
+                    }                    
                 }
             };
-            tab.selectedProperty().addListener(new InvalidationListener() {
-                @Override public void invalidated(Observable valueModel) {
-                    setVisible(getTab().isSelected());
-                }
-            });
-            tab.contentProperty().addListener(new InvalidationListener() {
-                @Override public void invalidated(Observable valueModel) {
-                    getChildren().clear();
-                    updateContent();
-                }
-            });
 
             tab.selectedProperty().addListener(tabListener);
             tab.contentProperty().addListener(tabListener);
@@ -1316,7 +1317,7 @@
             setVisible(tab.isSelected());
         }
 
-        private void updateContent() {
+        private void updateContent() {            
             if (getTab().getContent() != null) {
                 getChildren().add(getTab().getContent());
             }
@@ -1354,7 +1355,7 @@
         private boolean showControlButtons;
         private ContextMenu popup;
 
-        public TabControlButtons() {            
+        public TabControlButtons() {                        
             getStyleClass().setAll("control-buttons-tab");
 
             TabPane tabPane = getSkinnable();
