diff --git a/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs
index 9a49fb5..f74b1e7 100644
--- a/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug.jdi.tests/.settings/org.eclipse.jdt.core.prefs
@@ -89,7 +89,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=error
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java
index 12ba90b..ba97d95 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/AbstractJDITest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -134,7 +134,7 @@
 	protected Vector<String> getAllMatchingTests(String match) {
 		Class<? extends AbstractJDITest> theClass = this.getClass();
 		java.lang.reflect.Method[] methods = theClass.getDeclaredMethods();
-		Vector<String> result = new Vector<String>();
+		Vector<String> result = new Vector<>();
 		for (int i = 0; i < methods.length; i++) {
 			java.lang.reflect.Method m = methods[i];
 			String name = m.getName();
@@ -707,7 +707,7 @@
 			fLaunchedProxy = Runtime.getRuntime().exec(proxyString);
 
 			// Launch target VM
-			Vector<String> commandLine = new Vector<String>();
+			Vector<String> commandLine = new Vector<>();
 			
 			String launcher = binDirectory + "j9w.exe";
 			File vm= new File(launcher);
@@ -745,7 +745,7 @@
 			binDirectory.append(System.getProperty("file.separator"));
 			binDirectory.append("bin").append(System.getProperty("file.separator"));
 
-			Vector<String> commandLine = new Vector<String>();
+			Vector<String> commandLine = new Vector<>();
 
 			String launcher = binDirectory.toString() + "javaw.exe";
 			File vm= new File(launcher);
@@ -785,7 +785,7 @@
 					+ "bin"
 					+ System.getProperty("file.separator");
 
-			Vector<String> commandLine = new Vector<String>();
+			Vector<String> commandLine = new Vector<>();
 
 			commandLine.add(binDirectory + "javaw");
 			if (fBootPath.length() > 0) {
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ClassTypeTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ClassTypeTest.java
index cd324fd..3888300 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ClassTypeTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ClassTypeTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -161,7 +161,7 @@
 			fType.concreteMethodByName(
 				"invoke1",
 				"(ILjava/lang/Object;)Ljava/lang/String;");
-		List<IntegerValue> args = new ArrayList<IntegerValue>();
+		List<IntegerValue> args = new ArrayList<>();
 		args.add(fVM.mirrorOf(41));
 		args.add(null);
 		Exception oops = null;
@@ -262,7 +262,7 @@
 			.methodsByName("<init>", "(ILjava/lang/Object;Ljava/lang/Object;)V")
 			.get(0);
 		ObjectReference result = null;
-		ArrayList<Value> arguments = new ArrayList<Value>();
+		ArrayList<Value> arguments = new ArrayList<>();
 		arguments.add(fVM.mirrorOf(0));
 		arguments.add(fVM.allThreads().get(0));
 		arguments.add(null);
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventReader.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventReader.java
index 8995c96..07bf849 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventReader.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventReader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@
 
 public class EventReader extends AbstractReader {
 	private EventQueue fEventQueue;
-	private Vector<EventListener> fEventListeners = new Vector<EventListener>(); // A Vector of EventListener
+	private Vector<EventListener> fEventListeners = new Vector<>(); // A Vector of EventListener
 
 	/**
 	 * Constructor
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventRequestTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventRequestTest.java
index 06db993..4c82654 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventRequestTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventRequestTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@
  */
 public class EventRequestTest extends AbstractJDITest {
 
-	private List<EventRequest> fRequests = new LinkedList<EventRequest>();
+	private List<EventRequest> fRequests = new LinkedList<>();
 	/**
 	 * Creates a new test.
 	 */
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventTest.java
index 1d19716..6b3812c 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@
  * Tests for JDI com.sun.jdi.event.Event.
  */
 public class EventTest extends AbstractJDITest {
-	private HashMap<EventRequest, Event> fAllEvents = new HashMap<EventRequest, Event>();
+	private HashMap<EventRequest, Event> fAllEvents = new HashMap<>();
 	/**
 	 * Creates a new test.
 	 */
@@ -81,7 +81,7 @@
 
 		// Remove the requests
 		fVM.eventRequestManager().deleteEventRequests(
-			new LinkedList<EventRequest>(fAllEvents.keySet()));
+			new LinkedList<>(fAllEvents.keySet()));
 
 		// Set the value of the "fBool" field back to its original value
 		resetField();
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/HeapWalkingTests.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/HeapWalkingTests.java
index c7d15de..70a7f06 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/HeapWalkingTests.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/HeapWalkingTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,7 +97,7 @@
 		}
 		triggerAndWait(fVM.eventRequestManager().createClassPrepareRequest(), "refclass3load", true);
 		triggerAndWait(fVM.eventRequestManager().createClassPrepareRequest(), "refclassload", true);
-		ArrayList<ReferenceType> list = new ArrayList<ReferenceType>(2);
+		ArrayList<ReferenceType> list = new ArrayList<>(2);
 		fClass = getClass("org.eclipse.debug.jdi.tests.program.RefClass1");
 		assertNotNull("RefClass should not be null", fClass);
 		list.add(fClass);
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/LocatableTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/LocatableTest.java
index 65e4cb2..c33353b 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/LocatableTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/LocatableTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,8 @@
  */
 public class LocatableTest extends AbstractJDITest {
 
-	private List<Mirror> fLocatables = new LinkedList<Mirror>();
-	private List<EventRequest> fRequests = new LinkedList<EventRequest>();
+	private List<Mirror> fLocatables = new LinkedList<>();
+	private List<EventRequest> fRequests = new LinkedList<>();
 	/**
 	 * Creates a new test.
 	 */
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MirrorTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MirrorTest.java
index 1a422f8..f4940e9 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MirrorTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MirrorTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,7 +23,7 @@
  * Tests for JDI com.sun.jdi.Mirror.
  */
 public class MirrorTest extends AbstractJDITest {
-	List<Mirror> fMirrors = new LinkedList<Mirror>();
+	List<Mirror> fMirrors = new LinkedList<>();
 	/**
 	 * Creates a new test.
 	 */
@@ -40,7 +40,7 @@
 
 		//TO DO: Add events too
 
-		fMirrors = new LinkedList<Mirror>();
+		fMirrors = new LinkedList<>();
 
 		if (fVM.canWatchFieldAccess())
 			fMirrors.add(getAccessWatchpointRequest());
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ObjectReferenceTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ObjectReferenceTest.java
index 95aa021..6a5d8ae 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ObjectReferenceTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ObjectReferenceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -142,7 +142,7 @@
 		ReferenceType type = fObject.referenceType();
 		List<?> fields = type.fields();
 		ListIterator<?> iterator = fields.listIterator();
-		List<Field> instanceFields = new LinkedList<Field>();
+		List<Field> instanceFields = new LinkedList<>();
 		while (iterator.hasNext()) {
 			Field field = (Field) iterator.next();
 			if (!field.isStatic())
@@ -213,7 +213,7 @@
 		ClassType ct = (ClassType) fObject.referenceType();
 		Method inv =
 			ct.concreteMethodByName("invoke3", "(Ljava/lang/String;Ljava/lang/Object;)I");
-		List<StringReference> args = new ArrayList<StringReference>();
+		List<StringReference> args = new ArrayList<>();
 		args.add(fVM.mirrorOf("888"));
 		args.add(null);
 		Exception oops = null;
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ReferenceTypeTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ReferenceTypeTest.java
index d9f4849..d6e8694 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ReferenceTypeTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/ReferenceTypeTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@
  */
 public class ReferenceTypeTest extends AbstractJDITest {
 
-	private List<ReferenceType> fTypes = new LinkedList<ReferenceType>();
+	private List<ReferenceType> fTypes = new LinkedList<>();
 
 	// These must match what is done in localSetUp
 	private boolean[] fSystemClassLoader = { true, true, false, false };
@@ -192,7 +192,7 @@
 		// Get field values
 		List<?> fields = type.fields();
 		ListIterator<?> iterator = fields.listIterator();
-		List<Field> staticFields = new LinkedList<Field>();
+		List<Field> staticFields = new LinkedList<>();
 		while (iterator.hasNext()) {
 			Field field = (Field) iterator.next();
 			if (field.isStatic())
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/StackFrameTest.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/StackFrameTest.java
index cf7de3e..c2ab6b5 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/StackFrameTest.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/StackFrameTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -108,7 +108,7 @@
 		assertEquals("2", thread, value);
 
 		// getValues(List)
-		List<LocalVariable> vars = new LinkedList<LocalVariable>();
+		List<LocalVariable> vars = new LinkedList<>();
 		vars.add(var);
 		Map<?, ?> values = fFrame.getValues(vars);
 		value = (ThreadReference) values.get(var);
diff --git a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestAll.java b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestAll.java
index 7ab77bb..5e1c71c 100644
--- a/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestAll.java
+++ b/org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/TestAll.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2015 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@
 	 *      it shuts the VM down.
 	 */
 	protected static Vector<Class<?>> getAllTestCases(VMInformation info) {
-		Vector<Class<?>> classes = new Vector<Class<?>>();
+		Vector<Class<?>> classes = new Vector<>();
 		classes.addElement(AccessibleTest.class);
 		classes.addElement(ArrayReferenceTest.class);
 		classes.addElement(ArrayTypeTest.class);
diff --git a/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs
index 230e559..09472a8 100644
--- a/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug.tests/.settings/org.eclipse.jdt.core.prefs
@@ -89,7 +89,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
index e564ce1..71eaf08 100644
--- a/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug.ui/.settings/org.eclipse.jdt.core.prefs
@@ -89,7 +89,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
index 60dfee6..14efd39 100644
--- a/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jdt.debug.ui; singleton:=true
-Bundle-Version: 3.7.0.qualifier
+Bundle-Version: 3.7.100.qualifier
 Bundle-Activator: org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/org.eclipse.jdt.debug.ui/pom.xml b/org.eclipse.jdt.debug.ui/pom.xml
index e8359f6..fa0083a 100644
--- a/org.eclipse.jdt.debug.ui/pom.xml
+++ b/org.eclipse.jdt.debug.ui/pom.xml
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.debug.ui</artifactId>
-  <version>3.7.0-SNAPSHOT</version>
+  <version>3.7.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <build>
     <plugins>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaApplicationLaunchShortcut.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaApplicationLaunchShortcut.java
index 1b9c60e..4b82721 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaApplicationLaunchShortcut.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaApplicationLaunchShortcut.java
@@ -18,6 +18,8 @@
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.DebugPlugin;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationType;
@@ -131,7 +133,7 @@
 			IJavaSearchScope scope = SearchEngine.createJavaSearchScope(javaElements, constraints);
 			return engine.searchMainMethods(context, scope, true);
 		} catch (InvocationTargetException e) {
-			throw (CoreException)e.getTargetException(); 
+			throw new CoreException(new Status(IStatus.ERROR, JDIDebugUIPlugin.getUniqueIdentifier(), e.getMessage(), e));
 		}
 	}
 	
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
index 3f878a1..23b4675 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
@@ -207,11 +207,7 @@
 	 * @param e the exception to be logged
 	 */	
 	public static void log(Throwable e) {
-		if (e instanceof CoreException) {
-			log(new Status(IStatus.ERROR, getUniqueIdentifier(), IStatus.ERROR, e.getMessage(), e.getCause()));
-		} else {
-			log(new Status(IStatus.ERROR, getUniqueIdentifier(), IJavaDebugUIConstants.INTERNAL_ERROR, "Internal Error", e));   //$NON-NLS-1$
-		}
+		log(new Status(IStatus.ERROR, getUniqueIdentifier(), IJavaDebugUIConstants.INTERNAL_ERROR, "Internal Error", e));   //$NON-NLS-1$
 	}
 	
 	/**
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/PopupInspectAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/PopupInspectAction.java
index a9d73d2..d297879 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/PopupInspectAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/PopupInspectAction.java
@@ -60,7 +60,7 @@
         	@Override
 			public boolean close() {
         		boolean returnValue = super.close();
-        		if (fTextEditor != null && fSelectionBeforeEvaluation != null){
+				if (fTextEditor != null && fTextEditor.getSelectionProvider() != null && fSelectionBeforeEvaluation != null) {
         			fTextEditor.getSelectionProvider().setSelection(fSelectionBeforeEvaluation);
         			fTextEditor = null;
         			fSelectionBeforeEvaluation = null;
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
index cee9aa8..7ffd03e 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/jres/JREsPreferencePage.java
@@ -211,7 +211,7 @@
 		IEclipsePreferences setting = InstanceScope.INSTANCE.getNode(JavaCore.PLUGIN_ID);
 		if(getContainer() instanceof IWorkbenchPreferenceContainer) {
 			IEclipsePreferences wcs = ((IWorkbenchPreferenceContainer)getContainer()).getWorkingCopyManager().getWorkingCopy(setting);
-			return wcs.get(JavaCore.COMPILER_COMPLIANCE, (String) JavaCore.getDefaultOptions().get(JavaCore.COMPILER_COMPLIANCE));
+			return wcs.get(JavaCore.COMPILER_COMPLIANCE, JavaCore.getDefaultOptions().get(JavaCore.COMPILER_COMPLIANCE));
 		}
 			return JavaCore.getOption(JavaCore.COMPILER_COMPLIANCE);
 		
diff --git a/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
index 1796890..e8f6e63 100644
--- a/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.debug/.settings/org.eclipse.jdt.core.prefs
@@ -89,7 +89,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=error
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
index 507f385..619a05b 100644
--- a/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.launching/.settings/org.eclipse.jdt.core.prefs
@@ -89,7 +89,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=error
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
diff --git a/org.eclipse.jdt.launching/pom.xml b/org.eclipse.jdt.launching/pom.xml
index 79f76d3..851299b 100644
--- a/org.eclipse.jdt.launching/pom.xml
+++ b/org.eclipse.jdt.launching/pom.xml
@@ -25,7 +25,6 @@
         <plugins>
           <plugin>
             <artifactId>maven-antrun-plugin</artifactId>
-            <version> 1.7 </version>
             <executions>
               <execution>
                 <id>compile-internal-jar</id>
@@ -41,28 +40,6 @@
                 </goals>
               </execution>
             </executions>
-            <dependencies>
-              <dependency>
-                <groupId>bsf</groupId>
-                <artifactId>bsf</artifactId>
-                <version>2.4.0</version>
-              </dependency>
-              <dependency>
-                <groupId>rhino</groupId>
-                <artifactId>js</artifactId>
-                <version>1.7R2</version>
-              </dependency>
-              <dependency>
-                <groupId>org.apache.ant</groupId>
-                <artifactId>ant-apache-bsf</artifactId>
-                <version>1.8.3</version>
-              </dependency>
-              <dependency>
-                <groupId>org.apache.ant</groupId>
-                <artifactId>ant-nodeps</artifactId>
-                <version>1.8.1</version>
-              </dependency>
-            </dependencies>
           </plugin>
         </plugins>
       </build>
diff --git a/org.eclipse.jdt.launching/schema/executionEnvironments.exsd b/org.eclipse.jdt.launching/schema/executionEnvironments.exsd
index e88bff5..f777cf1 100644
--- a/org.eclipse.jdt.launching/schema/executionEnvironments.exsd
+++ b/org.eclipse.jdt.launching/schema/executionEnvironments.exsd
@@ -187,7 +187,7 @@
          <meta.section type="implementation"/>
       </appInfo>
       <documentation>
-         JDT (&lt;code&gt;org.eclispe.jdt.launching&lt;/code&gt;) provides definitions and an analyzer for the following execution environments. Since 3.5, a default access rule participant provides access rules for system packages assocaited with an execution environment. System packages are specified by an OSGi profile properties file (see &lt;code&gt;profileProperties&lt;/code&gt; above) via the &lt;code&gt;org.osgi.framework.system.packages&lt;/code&gt; property.
+         JDT (&lt;code&gt;org.eclipse.jdt.launching&lt;/code&gt;) currently provides definitions and an analyzer for the following execution environments:
 &lt;ul&gt;
 &lt;li&gt;OSGi/Minimum-1.0&lt;/li&gt;
 &lt;li&gt;OSGi/Minimum-1.1&lt;/li&gt;
@@ -198,9 +198,12 @@
 &lt;li&gt;J2SE-1.4&lt;/li&gt;
 &lt;li&gt;J2SE-1.5&lt;/li&gt;
 &lt;li&gt;JavaSE-1.6&lt;/li&gt;
+&lt;li&gt;JavaSE-1.7&lt;/li&gt;
+&lt;li&gt;JavaSE-1.8&lt;/li&gt;
 &lt;li&gt;CDC-1.0/Foundation-1.0&lt;/li&gt;
 &lt;li&gt;CDC-1.1/Foundation-1.1&lt;/li&gt;
 &lt;/ul&gt;
+Since 3.5, a default access rule participant provides access rules for system packages associated with an execution environment. System packages are specified by an OSGi profile properties file (see &lt;code&gt;profileProperties&lt;/code&gt; above) via the &lt;code&gt;org.osgi.framework.system.packages&lt;/code&gt; property.
       </documentation>
    </annotation>
 
@@ -209,7 +212,7 @@
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2005, 2008 IBM Corporation and others.&lt;br&gt;
+         Copyright (c) 2005, 2015 IBM Corporation and others.&lt;br&gt;
 All rights reserved. This program and the accompanying materials are made 
 available under the terms of the Eclipse Public License v1.0 which 
 accompanies this distribution, and is available at 
diff --git a/pom.xml b/pom.xml
index 79bd354..914e16f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,31 +15,41 @@
   <parent>
     <groupId>org.eclipse</groupId>
     <artifactId>eclipse-platform-parent</artifactId>
-    <version>4.5.0-SNAPSHOT</version>
+    <version>4.6.0-SNAPSHOT</version>
     <relativePath>../eclipse-platform-parent</relativePath>
   </parent>
 
   <groupId>eclipse.jdt.debug</groupId>
   <artifactId>eclipse.jdt.debug</artifactId>
-  <version>4.5.0-SNAPSHOT</version>
+  <version>4.6.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <properties>
     <tycho.scmUrl>scm:git:git://git.eclipse.org/gitroot/jdt/eclipse.jdt.debug.git</tycho.scmUrl>
   </properties>
 
-  <repositories>
-    <repository>
-      <releases>
-        <enabled>true</enabled>
-      </releases>
-      <snapshots>
-        <enabled>true</enabled>
-      </snapshots>
-      <id>eclipse-hosted</id>
-      <url>https://repo.eclipse.org/content/repositories/eclipse/</url>
-    </repository>
-  </repositories>
+  <!-- 
+    To build individual bundles, we specify a repository where to find parent pom, 
+    in case it is not in local maven cache already
+    and that parent pom also has fuller individual-bundle profile 
+    defined that is combined with this one. --> 
+  <profiles>
+    <profile>
+      <id>build-individual-bundles</id>
+      <repositories>
+        <repository>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+          <id>eclipse-hosted</id>
+          <url>https://repo.eclipse.org/content/repositories/eclipse/</url>
+        </repository>
+      </repositories>
+    </profile>
+  </profiles>
 
   <modules>
     <module>org.eclipse.jdt.debug</module>
