diff --git a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
index 129dd98..e3ef320 100644
--- a/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
+++ b/bundles/org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt/PartRenderingEngine.java
@@ -543,6 +543,31 @@
 				}
 			}
 
+			// Reparent the context (or the kid's context)
+			if (element instanceof MContext) {
+				IEclipseContext ctxt = ((MContext) element).getContext();
+				if (ctxt != null)
+					ctxt.setParent(parentContext);
+			} else {
+				List<MContext> childContexts = modelService.findElements(
+						element, null, MContext.class, null);
+				for (MContext c : childContexts) {
+					// Ensure that we only reset the context of our direct
+					// children
+					MUIElement kid = (MUIElement) c;
+					MUIElement parent = kid.getParent();
+					if (parent == null && kid.getCurSharedRef() != null)
+						parent = kid.getCurSharedRef().getParent();
+					if (parent != element)
+						continue;
+
+					if (c.getContext() != null
+							&& c.getContext().getParent() != parentContext) {
+						c.getContext().setParent(parentContext);
+					}
+				}
+			}
+
 			// Now that we have a widget let the parent (if any) know
 			if (element.getParent() instanceof MUIElement) {
 				MElementContainer<MUIElement> parentElement = element
diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java
index 9273849..247d866 100644
--- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java
+++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/PartRenderingEngineTests.java
@@ -2752,6 +2752,114 @@
 		assertTrue(window.getWindows().contains(detachedWindow));
 	}
 
+	public void testBug348215_PartOnlyContextReparent() {
+		MApplication application = ApplicationFactoryImpl.eINSTANCE
+				.createApplication();
+
+		MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
+		application.getChildren().add(window);
+		application.setSelectedElement(window);
+
+		MWindow detachedWindow = BasicFactoryImpl.eINSTANCE.createWindow();
+		window.getWindows().add(detachedWindow);
+
+		MPart part = BasicFactoryImpl.eINSTANCE.createPart();
+		part.setContributionURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.workbench.SampleView");
+		detachedWindow.getChildren().add(part);
+		detachedWindow.setSelectedElement(part);
+
+		application.setContext(appContext);
+		appContext.set(MApplication.class.getName(), application);
+
+		wb = new E4Workbench(application, appContext);
+		wb.createAndRunUI(window);
+
+		assertTrue(part.getContext() != null);
+		assertTrue(part.getContext().getParent() == detachedWindow.getContext());
+
+		detachedWindow.getChildren().remove(part);
+		window.getChildren().add(part);
+
+		assertTrue(part.getContext() != null);
+		assertTrue(part.getContext().getParent() == window.getContext());
+	}
+
+	public void testBug348215_PartContextReparent() {
+		MApplication application = ApplicationFactoryImpl.eINSTANCE
+				.createApplication();
+
+		MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
+		application.getChildren().add(window);
+		application.setSelectedElement(window);
+
+		MWindow detachedWindow = BasicFactoryImpl.eINSTANCE.createWindow();
+		window.getWindows().add(detachedWindow);
+
+		MPartStack stack = BasicFactoryImpl.eINSTANCE.createPartStack();
+		detachedWindow.getChildren().add(stack);
+		detachedWindow.setSelectedElement(stack);
+
+		MPart part = BasicFactoryImpl.eINSTANCE.createPart();
+		part.setContributionURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.workbench.SampleView");
+		stack.getChildren().add(part);
+		stack.setSelectedElement(part);
+
+		application.setContext(appContext);
+		appContext.set(MApplication.class.getName(), application);
+
+		wb = new E4Workbench(application, appContext);
+		wb.createAndRunUI(window);
+
+		assertTrue(part.getContext() != null);
+		assertTrue(part.getContext().getParent() == detachedWindow.getContext());
+
+		detachedWindow.getChildren().remove(stack);
+		window.getChildren().add(stack);
+
+		assertTrue(part.getContext() != null);
+		assertTrue(part.getContext().getParent() == window.getContext());
+	}
+
+	public void testBug348215_PartPlaceholderContextReparent() {
+		MApplication application = ApplicationFactoryImpl.eINSTANCE
+				.createApplication();
+
+		MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
+		application.getChildren().add(window);
+		application.setSelectedElement(window);
+
+		MPart part = BasicFactoryImpl.eINSTANCE.createPart();
+		part.setContributionURI("platform:/plugin/org.eclipse.e4.ui.tests/org.eclipse.e4.ui.tests.workbench.SampleView");
+		window.getSharedElements().add(part);
+
+		MWindow detachedWindow = BasicFactoryImpl.eINSTANCE.createWindow();
+		window.getWindows().add(detachedWindow);
+
+		MPartStack stack = BasicFactoryImpl.eINSTANCE.createPartStack();
+		detachedWindow.getChildren().add(stack);
+		detachedWindow.setSelectedElement(stack);
+
+		MPlaceholder ph = AdvancedFactoryImpl.eINSTANCE.createPlaceholder();
+		ph.setRef(part);
+		stack.getChildren().add(ph);
+		stack.setSelectedElement(ph);
+
+		application.setContext(appContext);
+		appContext.set(MApplication.class.getName(), application);
+
+		wb = new E4Workbench(application, appContext);
+		wb.createAndRunUI(window);
+
+		assertTrue(part.getContext() != null);
+		assertTrue(part.getContext().getParent() == detachedWindow.getContext());
+
+		detachedWindow.getChildren().remove(stack);
+		window.getChildren().add(stack);
+
+		assertTrue(part.getContext() != null);
+		assertTrue(part.getContext().getParent() == window.getContext());
+	}
+
 	public void testBug348069_DetachedPerspectiveWindow() {
 		MApplication application = ApplicationFactoryImpl.eINSTANCE
 				.createApplication();
