diff --git a/apps/scenebuilder/SceneBuilderApp/src/com/oracle/javafx/scenebuilder/app/menubar/DebugMenuController.java b/apps/scenebuilder/SceneBuilderApp/src/com/oracle/javafx/scenebuilder/app/menubar/DebugMenuController.java
--- a/apps/scenebuilder/SceneBuilderApp/src/com/oracle/javafx/scenebuilder/app/menubar/DebugMenuController.java
+++ b/apps/scenebuilder/SceneBuilderApp/src/com/oracle/javafx/scenebuilder/app/menubar/DebugMenuController.java
@@ -51,6 +51,7 @@
 import javafx.geometry.Point2D;
 import javafx.scene.Node;
 import javafx.scene.Parent;
+import javafx.scene.SubScene;
 import javafx.scene.control.Menu;
 import javafx.scene.control.MenuItem;
 import javafx.scene.control.SeparatorMenuItem;
@@ -150,8 +151,11 @@
     
     private void checkLocalToSceneTransform(Node node) {
         
-        final Point2D p1 = node.localToScene(0, 0);
-        final Point2D p2 = node.getLocalToSceneTransform().transform(0, 0);
+        final ContentPanelController cpc = documentWindowController.getContentPanelController();
+        
+        final Point2D p1 = node.localToScene(0, 0, true);
+        final Point2D pt = node.getLocalToSceneTransform().transform(0, 0);
+        final Point2D p2 = cpc.getContentSubScene().getLocalToSceneTransform().transform(pt);
         
         final boolean okX = MathUtils.equals(p1.getX(), p2.getX(), 0.0000001);
         final boolean okY = MathUtils.equals(p1.getY(), p2.getY(), 0.0000001);
@@ -164,6 +168,9 @@
             for (Node child : parent.getChildrenUnmodifiable()) {
                 checkLocalToSceneTransform(child);
             }
+        } else if (node instanceof SubScene) {
+            final SubScene subScene = (SubScene) node;
+            checkLocalToSceneTransform(subScene.getRoot());
         }
     }
     
diff --git a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/AbstractDecoration.java b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/AbstractDecoration.java
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/AbstractDecoration.java
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/AbstractDecoration.java
@@ -40,6 +40,7 @@
 import javafx.scene.Group;
 import javafx.scene.Node;
 import javafx.scene.Scene;
+import javafx.scene.SubScene;
 import javafx.scene.transform.NonInvertibleTransformException;
 import javafx.scene.transform.Transform;
 
@@ -138,13 +139,15 @@
     
     public Transform getSceneGraphObjectToDecorationTransform() {
         final Node proxy = getSceneGraphObjectProxy();
-        final Transform t1 = proxy.getLocalToSceneTransform();
+        final SubScene contentSubScene = contentPanelController.getContentSubScene();
+        final Transform t0 = proxy.getLocalToSceneTransform();
+        final Transform t1 = contentSubScene.getLocalToSceneTransform();
         final Transform t2 = getRootNode().getLocalToSceneTransform();
         final Transform result;
         
         try {
             final Transform i2 = t2.createInverse();
-            result = i2.createConcatenation(t1);
+            result = i2.createConcatenation(t1).createConcatenation(t0);
         } catch(NonInvertibleTransformException x) {
             throw new RuntimeException(x);
         }
@@ -171,31 +174,37 @@
     protected void startListeningToLayoutBounds(Node node) {
         assert node != null;
         node.layoutBoundsProperty().addListener(layoutBoundsListener);
+        startListeningToContentSubSceneTransform();
     }
     
     protected void stopListeningToLayoutBounds(Node node) {
         assert node != null;
         node.layoutBoundsProperty().removeListener(layoutBoundsListener);
+        stopListeningToContentSubSceneTransform();
     }
 
     protected void startListeningToBoundsInParent(Node node) {
         assert node != null;
         node.boundsInParentProperty().addListener(boundsInParentListener);
+        startListeningToContentSubSceneTransform();
     }
     
     protected void stopListeningToBoundsInParent(Node node) {
         assert node != null;
         node.boundsInParentProperty().removeListener(boundsInParentListener);
+        stopListeningToContentSubSceneTransform();
     }
 
     protected void startListeningToLocalToSceneTransform(Node node) {
         assert node != null;
         node.localToSceneTransformProperty().addListener(localToSceneTransformListener);
+        startListeningToContentSubSceneTransform();
     }
     
     protected void stopListeningToLocalToSceneTransform(Node node) {
         assert node != null;
         node.localToSceneTransformProperty().removeListener(localToSceneTransformListener);
+        stopListeningToContentSubSceneTransform();
     }
     
     /*
@@ -227,4 +236,23 @@
     
     private final ChangeListener<Transform> localToSceneTransformListener
         = (ov, v1, v2) -> layoutDecoration();
+    
+    
+    private int contentSubSceneCounter = 0;
+    private void startListeningToContentSubSceneTransform() {
+        if (contentSubSceneCounter == 0) {
+            final SubScene contentSubScene = contentPanelController.getContentSubScene();
+            contentSubScene.localToSceneTransformProperty().addListener(localToSceneTransformListener);
+        }
+        contentSubSceneCounter++;
+    }
+    
+    private void stopListeningToContentSubSceneTransform() {
+        assert contentSubSceneCounter >= 1;
+        contentSubSceneCounter--;
+        if (contentSubSceneCounter == 0) {
+            final SubScene contentSubScene = contentPanelController.getContentSubScene();
+            contentSubScene.localToSceneTransformProperty().removeListener(localToSceneTransformListener);
+        }
+    }
 }
diff --git a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanel.fxml b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanel.fxml
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanel.fxml
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanel.fxml
@@ -47,15 +47,19 @@
       <children>
         <Group id="Group">
           <children>
-            <Group fx:id="scalingGroup" layoutX="-30.0" layoutY="-50.0">
+            <Group fx:id="scalingGroup">
               <children>
                 <Rectangle fx:id="extensionRect" arcHeight="5.0" arcWidth="5.0" fill="#ffc0cb00" height="200.0" layoutX="0.0" layoutY="0.0" mouseTransparent="false" stroke="TRANSPARENT" strokeType="INSIDE" width="200.0" />
                 <Label fx:id="backgroundPane" alignment="CENTER" layoutX="0.0" layoutY="0.0" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="-1.0" prefWidth="-1.0" style="" styleClass="stage-prompt" text="Label" textAlignment="CENTER" textFill="#9f9f9f" wrapText="true" />
-                <Group fx:id="contentGroup" layoutX="0.0" layoutY="0.0">
-                  <children>
-                    <Ellipse fill="DODGERBLUE" layoutX="0.0" layoutY="0.0" radiusX="140.0" radiusY="100.0" stroke="BLACK" strokeType="INSIDE" />
-                  </children>
-                </Group>
+                <SubScene fx:id="contentSubScene">
+                    <root>
+                        <Group fx:id="contentGroup" layoutX="0.0" layoutY="0.0">
+                          <children>
+                            <Ellipse fill="DODGERBLUE" layoutX="0.0" layoutY="0.0" radiusX="140.0" radiusY="100.0" stroke="BLACK" strokeType="INSIDE" />
+                          </children>
+                        </Group>
+                    </root>
+                </SubScene>
               </children>
             </Group>
           </children>
diff --git a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/ContentPanelController.java
@@ -122,9 +122,7 @@
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMInstance;
 import com.oracle.javafx.scenebuilder.kit.fxom.FXOMObject;
 import com.oracle.javafx.scenebuilder.kit.metadata.util.DesignHierarchyMask;
-import com.oracle.javafx.scenebuilder.kit.util.Deprecation;
-import javafx.geometry.BoundingBox;
-import javafx.geometry.Point2D;
+import javafx.scene.SubScene;
 
 /**
  * This class creates and controls the <b>Content Panel</b> of Scene Builder Kit.
@@ -138,6 +136,7 @@
     @FXML private Rectangle extensionRect;
     @FXML private Label backgroundPane;
     @FXML private Group scalingGroup;
+    @FXML private SubScene contentSubScene;
     @FXML private Group contentGroup;
     @FXML private Pane glassLayer;
     @FXML private Group outlineLayer;
@@ -615,6 +614,15 @@
 
     
     /**
+     * @treatAsPrivate Returns the sub scene holding the user scene graph.
+     * @return the sub scene holding the user scene graph.
+     */
+    public SubScene getContentSubScene() {
+        return contentSubScene;
+    }
+
+    
+    /**
      * Computes the transform that projects from local coordinates of a 
      * scene graph object to the rudder layer local coordinates.
      * @param sceneGraphObject a scene graph object
@@ -625,12 +633,13 @@
         assert sceneGraphObject.getScene() == rudderLayer.getScene();
         
         final Transform t1 = sceneGraphObject.getLocalToSceneTransform();
-        final Transform t2 = rudderLayer.getLocalToSceneTransform();
+        final Transform t2 = contentSubScene.getLocalToSceneTransform();
+        final Transform t3 = rudderLayer.getLocalToSceneTransform();
         final Transform result;
         
         try {
-            final Transform i2 = t2.createInverse();
-            result = i2.createConcatenation(t1);
+            final Transform i3 = t3.createInverse();
+            result = i3.createConcatenation(t2).createConcatenation(t1);
         } catch(NonInvertibleTransformException x) {
             throw new RuntimeException(x);
         }
@@ -805,10 +814,13 @@
         assert backgroundPane.getMinWidth() == Region.USE_PREF_SIZE;
         assert backgroundPane.getMinHeight() == Region.USE_PREF_SIZE;
         assert scalingGroup != null;
-        assert contentGroup != null;
+        assert contentSubScene != null;
+        assert contentSubScene.getLayoutX() == 0.0;
+        assert contentSubScene.getLayoutY() == 0.0;
+        assert contentSubScene.getParent() == scalingGroup;
+        assert contentGroup == contentSubScene.getRoot();
         assert contentGroup.getLayoutX() == 0.0;
         assert contentGroup.getLayoutY() == 0.0;
-        assert contentGroup.getParent() == scalingGroup;
         assert glassLayer != null;
         assert glassLayer.isMouseTransparent() == false;
         assert glassLayer.isFocusTraversable();
@@ -832,7 +844,7 @@
         
         // Replace plain group in "contentGroup" by a custom one
         // which isolates the user scene graph from SB owned styling.
-        installStylingIsolationGroup();
+//        installStylingIsolationGroup();
         
         // Remove fake content used to help design
         backgroundPane.setText(""); //NOI18N
@@ -840,7 +852,8 @@
         // Setup our workspace controller
         workspaceController.panelControllerDidLoadFxml(
                 scrollPane,
-                scalingGroup, 
+                scalingGroup,
+                contentSubScene,
                 contentGroup, 
                 backgroundPane, 
                 extensionRect);
@@ -1036,43 +1049,43 @@
         changeModeController(newModeController);
     }
     
-    private void installStylingIsolationGroup() {
-        assert contentGroup.getParent() == scalingGroup;
-        
-        /*
-         * To isolate user content styling from SB's own styling we 
-         * insert two custom groups between scalingGroup and contentGroup:
-         * 
-         * 1) original layout loaded from FXML:
-         * 
-         *      ...
-         *          scalingGroup
-         *              contentGroup
-         *                  ... (user content)
-         * 
-         * 2) layout with isolation groups:
-         * 
-         *      ... 
-         *          scalingGroup
-         *              isolationGroupA     # impl_getAllParentStylesheets() overriden
-         *                  isolationGroupB     # getStyleableParent() overriden 
-         *                      contentGroup
-         *                          ... (user content)
-         *
-         * isolationGroupA prevents styling from SB to apply to user content
-         * isolationGroupB enables user content to have its own theme (modena, caspian...)
-         */
-        
-        final Group isolationGroupA = Deprecation.makeStylingIsolationGroupA();
-        final Group isolationGroupB = Deprecation.makeStylingIsolationGroupB();
-
-        final int contentGroupIndex = scalingGroup.getChildren().indexOf(contentGroup);
-        assert contentGroupIndex != -1;
-        scalingGroup.getChildren().remove(contentGroup);
-        scalingGroup.getChildren().add(contentGroupIndex, isolationGroupA);
-        isolationGroupA.getChildren().add(isolationGroupB);
-        isolationGroupB.getChildren().add(contentGroup);
-    }
+//    private void installStylingIsolationGroup() {
+//        assert contentGroup.getParent() == scalingGroup;
+//        
+//        /*
+//         * To isolate user content styling from SB's own styling we 
+//         * insert two custom groups between scalingGroup and contentGroup:
+//         * 
+//         * 1) original layout loaded from FXML:
+//         * 
+//         *      ...
+//         *          scalingGroup
+//         *              contentGroup
+//         *                  ... (user content)
+//         * 
+//         * 2) layout with isolation groups:
+//         * 
+//         *      ... 
+//         *          scalingGroup
+//         *              isolationGroupA     # impl_getAllParentStylesheets() overriden
+//         *                  isolationGroupB     # getStyleableParent() overriden 
+//         *                      contentGroup
+//         *                          ... (user content)
+//         *
+//         * isolationGroupA prevents styling from SB to apply to user content
+//         * isolationGroupB enables user content to have its own theme (modena, caspian...)
+//         */
+//        
+//        final Group isolationGroupA = Deprecation.makeStylingIsolationGroupA();
+//        final Group isolationGroupB = Deprecation.makeStylingIsolationGroupB();
+//
+//        final int contentGroupIndex = scalingGroup.getChildren().indexOf(contentGroup);
+//        assert contentGroupIndex != -1;
+//        scalingGroup.getChildren().remove(contentGroup);
+//        scalingGroup.getChildren().add(contentGroupIndex, isolationGroupA);
+//        isolationGroupA.getChildren().add(isolationGroupB);
+//        isolationGroupB.getChildren().add(contentGroup);
+//    }
     
     
     /*
diff --git a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/WorkspaceController.java b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/WorkspaceController.java
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/WorkspaceController.java
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/WorkspaceController.java
@@ -46,6 +46,7 @@
 import javafx.scene.Node;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
+import javafx.scene.SubScene;
 import javafx.scene.control.Label;
 import javafx.scene.control.ScrollPane;
 import javafx.scene.layout.Region;
@@ -62,6 +63,7 @@
     
     private ScrollPane scrollPane;
     private Group scalingGroup;
+    private SubScene contentSubScene;
     private Group contentGroup;
     private Label backgroundPane;
     private Rectangle extensionRect;
@@ -72,16 +74,18 @@
     private FXOMDocument fxomDocument;
 
     public void panelControllerDidLoadFxml(ScrollPane scrollPane, 
-            Group scalingGroup, Group contentGroup, Label backgroundPane, 
+            Group scalingGroup, SubScene contentSubScene, Group contentGroup, Label backgroundPane, 
             Rectangle extensionRect) {
         assert scrollPane != null;
         assert backgroundPane != null;
         assert scalingGroup != null;
+        assert contentSubScene != null;
         assert contentGroup != null;
         assert extensionRect != null;
         
         this.scrollPane = scrollPane;
         this.scalingGroup = scalingGroup;
+        this.contentSubScene = contentSubScene;
         this.contentGroup = contentGroup;
         this.backgroundPane = backgroundPane;
         this.extensionRect = extensionRect;
@@ -146,14 +150,8 @@
     }
     
     public void setThemeStyleSheet(String themeStyleSheet) {
-        assert contentGroup.getParent() instanceof Group;
-        final Group isolationGroup = (Group) contentGroup.getParent();
-        assert isolationGroup.getStyleClass().contains("root");
-        
-        isolationGroup.getStylesheets().clear();
-        assert themeStyleSheet != null;
-        isolationGroup.getStylesheets().add(themeStyleSheet);
-        isolationGroup.applyCss();
+	assert themeStyleSheet != null;
+        contentSubScene.setUserAgentStylesheet(themeStyleSheet);
     }
     
     public void setPreviewStyleSheets(List<String> previewStyleSheets) {
@@ -163,11 +161,12 @@
     }
     
     public void layoutContent(boolean applyCSS) {
-        if (scrollPane != null) {
+        if (contentSubScene != null) {
             try {
                 if (applyCSS) {
-                    scrollPane.getContent().applyCss();
+                    contentSubScene.getRoot().applyCss();
                 }
+                contentSubScene.getRoot().layout();
                 scrollPane.layout();
                 layoutException = null;
             } catch(RuntimeException x) {
@@ -387,6 +386,10 @@
         extensionRect.setY(extensionBounds.getMinY());
         extensionRect.setWidth(extensionBounds.getWidth());
         extensionRect.setHeight(extensionBounds.getHeight());
+        
+        contentSubScene.setWidth(contentGroup.getLayoutBounds().getWidth());
+        contentSubScene.setHeight(contentGroup.getLayoutBounds().getHeight());
+        
     }
     
     private static Bounds computeUnclippedBounds(Node node) {
diff --git a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/driver/pring/AbstractGenericPring.java b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/driver/pring/AbstractGenericPring.java
--- a/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/driver/pring/AbstractGenericPring.java
+++ b/apps/scenebuilder/SceneBuilderKit/src/com/oracle/javafx/scenebuilder/kit/editor/panel/content/driver/pring/AbstractGenericPring.java
@@ -87,6 +87,23 @@
         final Point2D p1 = sceneGraphObjectToDecoration(b.getMaxX(), b.getMinY(), snapToPixel);
         final Point2D p2 = sceneGraphObjectToDecoration(b.getMaxX(), b.getMaxY(), snapToPixel);
         final Point2D p3 = sceneGraphObjectToDecoration(b.getMinX(), b.getMaxY(), snapToPixel);
+//        System.out.println("Laying out " + getFxomObject());
+//        System.out.println("p0=" + p0 + ", p1=" + p1);
+//        System.out.flush();
+//        System.err.flush();
+//        Thread.dumpStack();
+//        System.out.flush();
+//        System.err.flush();
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.println("*");
+//        System.out.flush();
+//        System.err.flush();
         
         moveTo0.setX(p0.getX());
         moveTo0.setY(p0.getY());
