diff --git a/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/sourceprovider/TestSuiteSource.java b/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/sourceprovider/TestSuiteSource.java
index 309e744..a558679 100644
--- a/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/sourceprovider/TestSuiteSource.java
+++ b/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/sourceprovider/TestSuiteSource.java
@@ -56,7 +56,7 @@
 	@SuppressWarnings("rawtypes")
 	@Override
 	public Map getCurrentState() {
-		final Map<String, Object> result = new HashMap<String, Object>();
+		final Map<String, Object> result = new HashMap<>();
 
 		result.put(VARIABLE_TESTSUITE, fCurrentSuite);
 
@@ -64,7 +64,7 @@
 	}
 
 	public void setActiveSuite(final TestSuite suite) {
-		if ((suite != null) && (suite.equals(fCurrentSuite)))
+		if (fCurrentSuite.equals(suite))
 			// nothing changed
 			return;
 
@@ -75,7 +75,7 @@
 		if (fCurrentSuite instanceof TestSuite)
 			((TestSuite) fCurrentSuite).addTestListener(this);
 
-		fireSourceChanged(ISources.ACTIVE_PART, VARIABLE_TESTSUITE, suite);
+		fireSourceChanged(ISources.ACTIVE_PART, VARIABLE_TESTSUITE, fCurrentSuite);
 
 		final IEvaluationService evaluationService = (IEvaluationService) PlatformUI.getWorkbench().getService(IEvaluationService.class);
 		evaluationService.requestEvaluation(VARIABLE_TESTSUITE);
@@ -95,5 +95,4 @@
 			evaluationService.requestEvaluation(VARIABLE_TESTSUITE);
 		}
 	}
-
 }
diff --git a/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/TestSuiteContentProvider.java b/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/TestSuiteContentProvider.java
index 54e34de..83d5d63 100644
--- a/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/TestSuiteContentProvider.java
+++ b/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/TestSuiteContentProvider.java
@@ -19,15 +19,17 @@
 
 	@Override
 	protected void populateElements(final Object inputElement) {
-		final TestSuite suite = (TestSuite) ((Object[]) inputElement)[0];
+		if (inputElement != null) {
+			final TestSuite suite = (TestSuite) ((Object[]) inputElement)[0];
 
-		for (final TestFile testfile : suite.getChildren()) {
-			final Object file = testfile.getFile();
-			if (file instanceof IFile)
-				registerElement(((IFile) file).getParent().getProjectRelativePath(), testfile);
+			for (final TestFile testfile : suite.getChildren()) {
+				final Object file = testfile.getFile();
+				if (file instanceof IFile)
+					registerElement(((IFile) file).getParent().getProjectRelativePath(), testfile);
+			}
+
+			registerNodeReplacement(ROOT, suite);
+			setShowRoot(true);
 		}
-
-		registerNodeReplacement(ROOT, suite);
-		setShowRoot(true);
 	}
 }
diff --git a/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/UnitTestView.java b/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/UnitTestView.java
index 7c1455a..9093718 100644
--- a/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/UnitTestView.java
+++ b/plugins/org.eclipse.ease.modules.unittest.ui/src/org/eclipse/ease/modules/unittest/ui/views/UnitTestView.java
@@ -90,7 +90,7 @@
 	public static final String TEST_STATUS_PROPERTY = "test status";
 
 	private static class Statistics {
-		private final Map<Object, Integer> mCounters = new HashMap<Object, Integer>();
+		private final Map<Object, Integer> mCounters = new HashMap<>();
 
 		public synchronized void updateCounter(final Object identifier, final int value) {
 			if (mCounters.containsKey(identifier))
@@ -508,7 +508,7 @@
 
 	private class UpdateUI extends UIJob {
 
-		private final List<Object> fElements = new ArrayList<Object>();
+		private final List<Object> fElements = new ArrayList<>();
 
 		public UpdateUI() {
 			super("Update Script Unit View");
@@ -530,7 +530,7 @@
 			// create a local copy of elements so we can continue tests without waiting for the UI updater
 			ArrayList<Object> localElements;
 			synchronized (fElements) {
-				localElements = new ArrayList<Object>(fElements);
+				localElements = new ArrayList<>(fElements);
 				fElements.clear();
 			}
 
@@ -754,6 +754,9 @@
 				// save timing information
 				if (fRuntimeInformation != null)
 					fRuntimeInformation.save();
+
+				// clear data to minimize memory footprint in eclipse caches
+				currentSuite.reset();
 			}
 
 			fFileTreeViewer.setInput(new Object[] { suite });
@@ -795,6 +798,18 @@
 		if (fRuntimeInformation != null)
 			fRuntimeInformation.save();
 
+		// allow for garbage collection as eclipse does not clean up views correctly on clode
+		fRuntimeInformation = null;
+		final TestSuiteSource instance = TestSuiteSource.getActiveInstance();
+		if (instance != null)
+			instance.setActiveSuite(null);
+
+		fFileTreeViewer.setInput(new Object[0]);
+
+		// clear data to minimize memory footprint in eclipse caches
+		if (currentSuite != null)
+			currentSuite.reset();
+
 		super.dispose();
 	}
 
diff --git a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/components/TestSuite.java b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/components/TestSuite.java
index ffdc934..33e8125 100644
--- a/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/components/TestSuite.java
+++ b/plugins/org.eclipse.ease.modules.unittest/src/org/eclipse/ease/modules/unittest/components/TestSuite.java
@@ -69,7 +69,7 @@
 
 	private final TestSuiteModel fTestModel;
 	private boolean fTerminated = false;
-	private final Map<String, TestFile> fTestFiles = new HashMap<String, TestFile>();
+	private final Map<String, TestFile> fTestFiles = new HashMap<>();
 
 	private int fCurrentTestCount;
 	private List<TestFile> fActiveTestFiles = Collections.emptyList();
@@ -129,10 +129,10 @@
 
 				// setup done; extract variables
 				fSetupVariables = getScriptEngine().getVariables();
-				final ArrayList<TestFile> launchedTestFiles = new ArrayList<TestFile>();
+				final ArrayList<TestFile> launchedTestFiles = new ArrayList<>();
 
 				// main test execution loop
-				final List<TestFile> filesUnderTest = new ArrayList<TestFile>(fActiveTestFiles);
+				final List<TestFile> filesUnderTest = new ArrayList<>(fActiveTestFiles);
 				synchronized (TestSuite.this) {
 					while ((!fTerminated) && ((fCurrentTestCount > 0) || (!filesUnderTest.isEmpty()))) {
 
@@ -189,6 +189,7 @@
 
 				getScriptEngine().terminate();
 				setScriptEngine(null);
+				fSetupVariables = null;
 
 				setStatus(TestStatus.PASS);
 			}
@@ -208,7 +209,7 @@
 
 				if (result.hasException()) {
 					// testFile setup failed
-					final ArrayList<IScriptDebugFrame> trace = new ArrayList<IScriptDebugFrame>();
+					final ArrayList<IScriptDebugFrame> trace = new ArrayList<>();
 					// TODO eventually get the trace from the engine. Needs engine to keep traces on failures
 					trace.add(new ScriptDebugFrame(new Script("[" + identifier + "]", ""), 0, IScriptDebugFrame.TYPE_FILE));
 
@@ -280,7 +281,7 @@
 	public void run(final ITestSetFilter filter) {
 
 		// filter tests
-		fActiveTestFiles = new LinkedList<TestFile>();
+		fActiveTestFiles = new LinkedList<>();
 		for (final TestFile testFile : fTestFiles.values()) {
 			if (filter.matches(testFile))
 				fActiveTestFiles.add(testFile);
@@ -337,7 +338,7 @@
 	}
 
 	public List<TestFile> getActiveTestFiles() {
-		return new ArrayList<TestFile>(fActiveTestFiles);
+		return new ArrayList<>(fActiveTestFiles);
 	}
 
 	public void setErrorStream(final OutputStream errorStream) {
