diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
index 122b0a9..a228b948 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
@@ -74,6 +74,7 @@
 import org.eclipse.jdt.debug.tests.core.WatchExpressionTests;
 import org.eclipse.jdt.debug.tests.core.WorkingDirectoryTests;
 import org.eclipse.jdt.debug.tests.core.WorkspaceSourceContainerTests;
+import org.eclipse.jdt.debug.tests.eval.GenericsEvalTests;
 import org.eclipse.jdt.debug.tests.launching.ConfigurationEncodingTests;
 import org.eclipse.jdt.debug.tests.launching.ConfigurationResourceMappingTests;
 import org.eclipse.jdt.debug.tests.launching.ContributedTabTests;
@@ -184,6 +185,7 @@
 			addTest(new TestSuite(TestIntegerAccessUnboxing15.class));
 			addTest(new TestSuite(StepIntoSelectionWithGenerics.class));
 			addTest(new TestSuite(ConditionalBreakpointsWithGenerics.class));
+			addTest(new TestSuite(GenericsEvalTests.class));
 		}
 		
 	//Sourcelookup tests
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java
index 0ce22eb..0527bdc 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/ConditionalBreakpointsWithGenerics.java
@@ -12,8 +12,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.breakpoints;
 
+import org.eclipse.debug.core.model.ILineBreakpoint;
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
 import org.eclipse.jdt.debug.core.IJavaThread;
 import org.eclipse.jdt.debug.tests.AbstractDebugTest;
 
@@ -48,19 +48,13 @@
 	public void testDuplicateGenericTypes() throws Exception {
 		String typeName = "a.b.c.ConditionalsNearGenerics";
 		String innerTypeName = "a.b.c.ConditionalsNearGenerics.ItemIterator";
-		IJavaLineBreakpoint bp1 = createConditionalLineBreakpoint(33, typeName, "false", true);
-		IJavaLineBreakpoint bp2 = createConditionalLineBreakpoint(39, typeName, "false", true);
-		IJavaLineBreakpoint bp3 = createConditionalLineBreakpoint(52, innerTypeName, "false", true);
-		IJavaLineBreakpoint bp4 = createConditionalLineBreakpoint(53, innerTypeName, "true", true);
+		createConditionalLineBreakpoint(33, typeName, "false", true);
+		createConditionalLineBreakpoint(44, typeName, "false", true);
+		ILineBreakpoint bp = createConditionalLineBreakpoint(56, innerTypeName, "true", true);
 		
 		IJavaThread thread= null;
 		try {
-			thread= launchToLineBreakpoint(typeName, bp4); // If compiled correctly, this will jump over bp1-bp3 !!
-
-			bp1.delete();
-			bp2.delete();
-			bp3.delete();
-			bp4.delete();
+			thread= launchToLineBreakpoint(typeName, bp); // If compiled correctly, this will jump over bp1-bp3 !!
 		} finally {
 			terminateAndRemove(thread);
 			removeAllBreakpoints();
@@ -208,7 +202,7 @@
 		try {
 			String condition = "Iterator<Integer> i = tokenize(Arrays.asList(1, 2, 3), \"condition\");\n"+
 								"return i.hasNext();";
-			createConditionalLineBreakpoint(34, type, condition, true);
+			createConditionalLineBreakpoint(33, type, condition, true);
 			thread = launchToBreakpoint(type);
 			assertNotNull("Breakpoint not hit within timeout period", thread);
 		}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/SnippetsWithGenericsEvalTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java
similarity index 66%
rename from org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/SnippetsWithGenericsEvalTests.java
rename to org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java
index 87a2bc0..2ed3972 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/SnippetsWithGenericsEvalTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/eval/GenericsEvalTests.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.eval;
 
+import org.eclipse.debug.core.model.ILineBreakpoint;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.debug.core.IJavaThread;
 import org.eclipse.jdt.debug.tests.AbstractDebugTest;
@@ -19,12 +20,12 @@
  * 
  * @since 3.8
  */
-public class SnippetsWithGenericsEvalTests extends AbstractDebugTest {
+public class GenericsEvalTests extends AbstractDebugTest {
 
 	/**
 	 * @param name
 	 */
-	public SnippetsWithGenericsEvalTests(String name) {
+	public GenericsEvalTests(String name) {
 		super(name);
 	}
 
@@ -178,4 +179,86 @@
 			terminateAndRemove(thread);
 		}
 	}
+	
+	public void testEvalGenerics9() throws Exception {
+		IJavaThread thread = null;
+		try {
+			String type = "a.b.c.ConditionalsNearGenerics";
+			createLineBreakpoint(32, type);
+			thread = launchToBreakpoint(type);
+			assertNotNull("The program did not suspend", thread);
+			String snippet = "char[] chars = name.toCharArray();";
+			doEval(thread, snippet);
+		}
+		finally {
+			removeAllBreakpoints();
+			terminateAndRemove(thread);
+		}
+	}
+	
+	public void testEvalGeneric10() throws Exception {
+		IJavaThread thread = null;
+		try {
+			String type = "a.b.c.ConditionalsNearGenerics";
+			createLineBreakpoint(33, type);
+			thread = launchToBreakpoint(type);
+			assertNotNull("The program did not suspend", thread);
+			String snippet = "tokenize(Arrays.asList(1,2,3), name)";
+			doEval(thread, snippet);
+		}
+		finally {
+			removeAllBreakpoints();
+			terminateAndRemove(thread);
+		}
+	}
+	
+	public void testEvalGeneric11() throws Exception {
+		IJavaThread thread = null;
+		try {
+			String type = "a.b.c.ConditionalsNearGenerics";
+			createLineBreakpoint(44, type);
+			thread = launchToBreakpoint(type);
+			assertNotNull("The program did not suspend", thread);
+			String snippet = "list.iterator()";
+			doEval(thread, snippet);
+		}
+		finally {
+			removeAllBreakpoints();
+			terminateAndRemove(thread);
+		}
+	}
+	
+	public void testEvalGeneric12() throws Exception {
+		IJavaThread thread = null;
+		try {
+			String type = "a.b.c.ConditionalsNearGenerics";
+			ILineBreakpoint bp = createLineBreakpoint(56, type);
+			assertTrue("The breakpoint on line 56 must exist", bp.getMarker().exists());
+			thread = launchToBreakpoint(type);
+			assertNotNull("The program did not suspend", thread);
+			String snippet = "this.input";
+			doEval(thread, snippet);
+		}
+		finally {
+			removeAllBreakpoints();
+			terminateAndRemove(thread);
+		}
+	}
+	
+	public void testEvalGeneric13() throws Exception {
+		IJavaThread thread = null;
+		try {
+			String type = "a.b.c.ConditionalsNearGenerics";
+			ILineBreakpoint bp = createLineBreakpoint(64, type);
+			assertTrue("The breakpoint on line 64 must exist", bp.getMarker().exists());
+			thread = launchToBreakpoint(type);
+			assertNotNull("The program did not suspend", thread);
+			String snippet = "this.input";
+			doEval(thread, snippet);
+		}
+		finally {
+			removeAllBreakpoints();
+			terminateAndRemove(thread);
+		}
+	}
 }
diff --git a/org.eclipse.jdt.debug.tests/testsource-j2se-1.5/a/b/c/ConditionalsNearGenerics.java b/org.eclipse.jdt.debug.tests/testsource-j2se-1.5/a/b/c/ConditionalsNearGenerics.java
index 93565a0..68c347a 100644
--- a/org.eclipse.jdt.debug.tests/testsource-j2se-1.5/a/b/c/ConditionalsNearGenerics.java
+++ b/org.eclipse.jdt.debug.tests/testsource-j2se-1.5/a/b/c/ConditionalsNearGenerics.java
@@ -14,7 +14,7 @@
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
-
+@SuppressWarnings("unused")
 public class ConditionalsNearGenerics {
 
 	private String name;
@@ -30,13 +30,17 @@
 
 	public void bug() throws Exception {
 		char[] chars = name.toCharArray();
-		System.out.println(chars);
-		tokenize(Arrays.asList(1,2,3), name);
+		Iterator<Integer> iter = tokenize(Arrays.asList(1,2,3), name);
+		while (iter.hasNext()) {
+			Integer number = iter.next();
+		}
 	}
 
-	//FIXME delete following method, then the breakpoint shall work
 	public <T extends Number> Iterator<T> tokenize(List<T> list, String input) {
-		new ItemIterator<Item>(input);
+		ItemIterator<Item> ii = new ItemIterator<Item>(input);
+		if(ii.hasNext()) {
+			ii.next();
+		}
 		return list.iterator();
 	}
 
@@ -50,22 +54,17 @@
 
 		public ItemIterator(String input) {
 			this.input = input;
-			System.out.println("From ItemIterator!");
 		}
 
-		@Override
 		public boolean hasNext() {
-			return false;
+			return true;
 		}
 
-		@Override
 		public T next() {
 			return null;
 		}
 
-		@Override
 		public void remove() {
 		}
-
 	}
 }
\ No newline at end of file
