diff -r 3f6b61852f7a javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TitledPaneSkin.java
--- a/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TitledPaneSkin.java	Thu Mar 08 16:13:35 2012 -0800
+++ b/javafx-ui-controls/src/com/sun/javafx/scene/control/skin/TitledPaneSkin.java	Fri Mar 09 19:21:29 2012 -0800
@@ -63,6 +63,7 @@
     public static final Duration TRANSITION_DURATION = new Duration(350.0);
 
     private final TitleRegion titleRegion;
+    private final ContentContainer contentContainer;
     private final Content contentRegion;
     private Timeline timeline;
     private double transitionStartValue;
@@ -78,18 +79,24 @@
         setClip(clipRect);
 
         transitionStartValue = 0;
-        titleRegion = new TitleRegion();       
+        titleRegion = new TitleRegion();
 
         contentRegion = new Content(getSkinnable().getContent());
+        contentContainer = new ContentContainer();
+        
+        // We want to position the content container so the bottom of the content
+        // is at the bottom of the title region.
+        contentContainer.setAlignment(Pos.BOTTOM_CENTER);
+        contentContainer.getChildren().setAll(contentRegion);
 
         if (titledPane.isExpanded()) {
             setExpanded(titledPane.isExpanded());
         } else {
             setTransition(0.0f);
         }
-                
-        getChildren().setAll(contentRegion, titleRegion);
-               
+
+        getChildren().setAll(contentContainer, titleRegion);
+
         registerChangeListener(titledPane.contentProperty(), "CONTENT");
         registerChangeListener(titledPane.expandedProperty(), "EXPANDED");
         registerChangeListener(titledPane.collapsibleProperty(), "COLLAPSIBLE");
@@ -116,7 +123,7 @@
     }
 
     @Override
-    protected void handleControlPropertyChanged(String property) {        
+    protected void handleControlPropertyChanged(String property) {
         super.handleControlPropertyChanged(property);
         if (property == "CONTENT") {
             contentRegion.setContent(getSkinnable().getContent());
@@ -209,10 +216,13 @@
             }
         }
 
-        double y = snapSpace(getInsets().getTop()) + snapSpace(headerHeight);
-        contentRegion.resize(contentWidth, contentHeight);
-        positionInArea(contentRegion, snapSpace(getInsets().getLeft()), y,
-            w, contentHeight, /*baseline ignored*/0, HPos.CENTER, VPos.CENTER);
+        double y = snapSpace(getInsets().getTop()) + snapSpace(headerHeight) - (contentHeight * (1 - getTransition()));
+        double clipY = contentHeight * (1 - getTransition());                
+        ((Rectangle)contentContainer.getClip()).setY(clipY);
+
+        contentContainer.resize(contentWidth, contentHeight);
+        positionInArea(contentContainer, snapSpace(getInsets().getLeft()), y,
+            w, contentHeight, /*baseline ignored*/0, HPos.CENTER, VPos.CENTER);              
     }
 
     @Override protected double computeMinWidth(double height) {
@@ -223,9 +233,9 @@
         return Math.max(MIN_HEADER_HEIGHT, snapSize(titleRegion.prefHeight(-1)));
     }
 
-    @Override protected double computePrefWidth(double height) {
+    @Override protected double computePrefWidth(double height) {        
         double titleWidth = snapSize(titleRegion.prefWidth(height));
-        double contentWidth = snapSize(contentRegion.prefWidth(height));
+        double contentWidth = snapSize(contentContainer.prefWidth(height));
 
         return Math.max(titleWidth, contentWidth) + snapSpace(getInsets().getLeft()) + snapSpace(getInsets().getRight());
     }
@@ -234,9 +244,9 @@
         double headerHeight = Math.max(MIN_HEADER_HEIGHT, snapSize(titleRegion.prefHeight(-1)));
         double contentHeight = 0;
         if (getSkinnable().getParent() != null && getSkinnable().getParent() instanceof AccordionSkin) {
-            contentHeight = contentRegion.prefHeight(-1);
+            contentHeight = contentContainer.prefHeight(-1);
         } else {
-            contentHeight = contentRegion.prefHeight(-1) * getTransition();
+            contentHeight = contentContainer.prefHeight(-1) * getTransition();
         }
         return headerHeight + snapSize(contentHeight) + snapSpace(getInsets().getTop()) + snapSpace(getInsets().getBottom());
     }
@@ -390,10 +400,10 @@
             double right = snapSpace(getInsets().getRight());
             double arrowWidth = 0;
             double labelPrefWidth = labelPrefWidth(height);
-
+            
             if (arrowRegion != null) {
                 arrowWidth = snapSize(arrowRegion.prefWidth(height));
-            }
+            }            
 
             return left + arrowWidth + labelPrefWidth + right;
         }
@@ -403,11 +413,11 @@
             double bottom = snapSpace(getInsets().getBottom());
             double arrowHeight = 0;
             double labelPrefHeight = labelPrefHeight(width);
-
+            
             if (arrowRegion != null) {
                 arrowHeight = snapSize(arrowRegion.prefHeight(width));
             }
-
+            
             return top + Math.max(arrowHeight, labelPrefHeight) + bottom;
         }
 
@@ -428,12 +438,12 @@
                 // We want to center the region based on the entire width of the TitledPane.
                 x = left + Utils.computeXOffset(width, labelWidth, hpos);
             }
-            double y = top + Utils.computeYOffset(height, Math.max(arrowHeight, labelHeight), vpos);
-
+            double y = top + Utils.computeYOffset(height, Math.max(arrowHeight, labelHeight), vpos);            
+            
             arrowRegion.resize(arrowWidth, arrowHeight);
             positionInArea(arrowRegion, left, top, arrowWidth, height,
                     /*baseline ignored*/0, HPos.CENTER, VPos.CENTER);
-                       
+            
             layoutLabelInArea(x, y, labelWidth, height, pos);
         }
 
@@ -460,7 +470,7 @@
                 return textWidth + labeled.getGraphicTextGap() + graphic.prefWidth(-1) + widthPadding;
             } else {
                 return Math.max(textWidth, graphic.prefWidth(-1)) + widthPadding;
-            }
+    }
         }
 
         // Copied from LabeledSkinBase because the padding from TitledPane was being
@@ -508,16 +518,12 @@
 
     class Content extends StackPane implements TraverseListener {
         private Node content;
-        private Rectangle clipRect;
         private TraversalEngine engine;
         private Direction direction;
 
         public Content(Node n) {
-            getStyleClass().setAll("content");
-            this.clipRect = new Rectangle();
-            setClip(clipRect);
             setContent(n);
-
+            
             engine = new TraversalEngine(this, false) {
                 @Override public void trav(Node owner, Direction dir) {
                     direction = dir;
@@ -530,9 +536,9 @@
 
         public final void setContent(Node n) {
             this.content = n;
-            getChildren().clear();
+            getChildren().clear();            
             if (n != null) {
-                getChildren().setAll(n);
+                getChildren().setAll(n);                
             }
         }
 
@@ -540,16 +546,6 @@
             return content;
         }
 
-        @Override protected void setWidth(double value) {
-            super.setWidth(value);
-            clipRect.setWidth(value);
-        }
-
-        @Override protected void setHeight(double value) {
-            super.setHeight(value);
-            clipRect.setHeight(value);
-        }
-
         @Override
         public void onTraverse(Node node, Bounds bounds) {
             int index = engine.registeredNodes.indexOf(node);
@@ -566,4 +562,24 @@
             }
         }
     }
+    
+    class ContentContainer extends StackPane {
+        private Rectangle clipRect;
+        
+        public ContentContainer() {
+            getStyleClass().setAll("content");
+            clipRect = new Rectangle();
+            setClip(clipRect);
+        }
+        
+        @Override protected void setWidth(double value) {
+            super.setWidth(value);
+            clipRect.setWidth(value);
+        }
+
+        @Override protected void setHeight(double value) {
+            super.setHeight(value);
+            clipRect.setHeight(value);
+        }
+    }
 }
