Bug 321757 EPS adds a part without considering its placeholder if target container is not a part stack
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/PartServiceImpl.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/PartServiceImpl.java
index ca564c0..784240d 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/PartServiceImpl.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/PartServiceImpl.java
@@ -552,15 +552,13 @@
 					addToLastContainer(category, providedPart);
 				} else {
 					Object element = elements.get(0);
-					if (element instanceof MPartStack) {
-						MPartStack stack = (MPartStack) element;
-						if (providedPart.getCurSharedRef() instanceof MPlaceholder) {
-							stack.getChildren().add(providedPart.getCurSharedRef());
+					if (element instanceof MElementContainer<?>) {
+						MPlaceholder placeholder = providedPart.getCurSharedRef();
+						if (placeholder == null) {
+							((MElementContainer) element).getChildren().add(providedPart);
 						} else {
-							stack.getChildren().add(providedPart);
+							((MElementContainer) element).getChildren().add(placeholder);
 						}
-					} else if (element instanceof MElementContainer<?>) {
-						((MElementContainer<MPart>) element).getChildren().add(providedPart);
 					} else {
 						addToLastContainer(category, providedPart);
 					}
diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java
index 54e298f..79e7582 100644
--- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java
+++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EPartServiceTest.java
@@ -2251,6 +2251,48 @@
 		assertEquals(placeholder, perspective.getChildren().get(1));
 	}
 
+	public void testShowPart_Bug321757() {
+		MApplication application = ApplicationFactoryImpl.eINSTANCE
+				.createApplication();
+
+		MPartDescriptor partDescriptor = org.eclipse.e4.ui.model.application.descriptor.basic.impl.BasicFactoryImpl.eINSTANCE
+				.createPartDescriptor();
+		partDescriptor.setCategory("containerTag");
+		partDescriptor.setElementId("partId");
+		partDescriptor.setAllowMultiple(true);
+		application.getDescriptors().add(partDescriptor);
+
+		MWindow window = BasicFactoryImpl.eINSTANCE.createWindow();
+		application.getChildren().add(window);
+		application.setSelectedElement(window);
+
+		MPerspectiveStack perspectiveStack = AdvancedFactoryImpl.eINSTANCE
+				.createPerspectiveStack();
+		window.getChildren().add(perspectiveStack);
+		window.setSelectedElement(perspectiveStack);
+
+		MPerspective perspective = AdvancedFactoryImpl.eINSTANCE
+				.createPerspective();
+		perspective.getTags().add("containerTag");
+		perspectiveStack.getChildren().add(perspective);
+		perspectiveStack.setSelectedElement(perspective);
+
+		initialize(applicationContext, application);
+
+		getEngine().createGui(window);
+
+		EPartService partService = window.getContext().get(EPartService.class);
+
+		MPlaceholder placeholder = partService.createSharedPart("partId",
+				window, true);
+		MPart sharedPart = (MPart) placeholder.getRef();
+		sharedPart.setCurSharedRef(placeholder);
+		partService.showPart(sharedPart, PartState.ACTIVATE);
+
+		assertEquals(1, perspective.getChildren().size());
+		assertEquals(placeholder, perspective.getChildren().get(0));
+	}
+
 	public void testHidePart_PartInAnotherWindow() {
 		MApplication application = createApplication(
 				new String[] { "partInWindow1" },