diff --git a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DragHost.java b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DragHost.java
index 871d08a..01877d5 100644
--- a/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DragHost.java
+++ b/bundles/org.eclipse.e4.ui.workbench.addons.swt/src/org/eclipse/e4/ui/workbench/addons/dndaddon/DragHost.java
@@ -72,7 +72,7 @@
 	private MWindow getWindow() {
 		MUIElement pe = originalParent;
 		while (pe != null && !(pe instanceof MApplication)) {
-			if (((Object) pe) instanceof MWindow) {
+			if (pe instanceof MWindow) {
 				return (MWindow) pe;
 			}
 			pe = pe.getParent();
@@ -86,7 +86,6 @@
 		((Shell) baseWindow.getWidget()).getDisplay().update();
 		dragWindow = MBasicFactory.INSTANCE.createWindow();
 		dragWindow.getTags().add(DragHostId);
-		formatModel(dragWindow);
 
 		// define the initial location and size for the window
 		Point cp = ((Shell) baseWindow.getWidget()).getDisplay()
@@ -113,9 +112,6 @@
 		getShell().setVisible(true);
 	}
 
-	private void formatModel(MWindow dragWindow) {
-	}
-
 	public void drop(MElementContainer<MUIElement> newContainer, int itemIndex) {
 		if (dragElement.getParent() != null) {
 			dragElement.getParent().getChildren().remove(dragElement);
@@ -135,7 +131,7 @@
 					.layout(new Control[] { tb }, SWT.CHANGED | SWT.DEFER);
 		}
 
-		baseWindow.getChildren().remove(dragWindow);
+		baseWindow.getWindows().remove(dragWindow);
 
 		newContainer.setSelectedElement(dragElement);
 
diff --git a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java
index a1c628e..cb243e5 100644
--- a/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java
+++ b/tests/org.eclipse.jface.tests.databinding/src/org/eclipse/core/tests/databinding/SetBindingTest.java
@@ -77,7 +77,7 @@
 
 		model.add("first");
 		new SetBinding(target, model, new UpdateSetStrategy(), new UpdateSetStrategy());
-		model.remove(0);
+		model.remove("first");
 	}
 
 	/**
diff --git a/tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/CallHistory.java b/tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/CallHistory.java
index 921d13f..c4d0f88 100644
--- a/tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/CallHistory.java
+++ b/tests/org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util/CallHistory.java
@@ -47,7 +47,7 @@
      * @param target the call history target.
      */
     public CallHistory(Object target) {
-        methodList = new ArrayList<String>();
+        methodList = new ArrayList<>();
         classType = target.getClass();
     }
 
@@ -126,7 +126,7 @@
     public boolean contains(String[] methodNames) {
 		for (String methodName : methodNames) {
 			testMethodName(methodName);
-			if (!methodList.contains(methodNames))
+			if (!methodList.contains(methodName))
                 return false;
         }
         return true;
