diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test43/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test43/in/A.java
new file mode 100644
index 0000000..6fcbd27
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test43/in/A.java
@@ -0,0 +1,23 @@
+package p;
+
+public class A {
+    B someField;
+
+    enum MyEnum {
+        FOO, BAR
+    }
+
+    void someMethod(MyEnum fooBar) {
+        switch (fooBar) {
+        case FOO:
+            System.out.println("foo");
+            break;
+        case BAR:
+            System.out.println("bar");
+        }
+    }
+}
+
+class B {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test43/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test43/out/A.java
new file mode 100644
index 0000000..347c5bf
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test43/out/A.java
@@ -0,0 +1,23 @@
+package p;
+
+public class A {
+    B someField;
+
+    enum MyEnum {
+        FOO, BAR;
+
+		void someMethod() {
+		    switch (this) {
+		    case FOO:
+		        System.out.println("foo");
+		        break;
+		    case BAR:
+		        System.out.println("bar");
+		    }
+		}
+    }
+}
+
+class B {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/in/A.java
new file mode 100644
index 0000000..e704ee1
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/in/A.java
@@ -0,0 +1,21 @@
+package p;
+
+public class A {
+    B someField;
+    static int a;
+    String b;
+
+    void someMethod(MyEnum fooBar) {
+        switch (fooBar) {
+        case FOO:
+            System.out.println(a);
+            break;
+        case BAR:
+            System.out.println(b);
+        }
+    }
+}
+
+class B {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/in/MyEnum.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/in/MyEnum.java
new file mode 100644
index 0000000..5f38e65
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/in/MyEnum.java
@@ -0,0 +1,5 @@
+package p;
+
+enum MyEnum {
+    FOO, BAR
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/out/A.java
new file mode 100644
index 0000000..06daca1
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/out/A.java
@@ -0,0 +1,11 @@
+package p;
+
+public class A {
+    B someField;
+    static int a;
+    String b;
+}
+
+class B {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/out/MyEnum.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/out/MyEnum.java
new file mode 100644
index 0000000..490d2ad
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test44/out/MyEnum.java
@@ -0,0 +1,15 @@
+package p;
+
+enum MyEnum {
+    FOO, BAR;
+
+	void someMethod(A a) {
+	    switch (this) {
+	    case FOO:
+	        System.out.println(A.a);
+	        break;
+	    case BAR:
+	        System.out.println(a.b);
+	    }
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test45/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test45/in/A.java
new file mode 100644
index 0000000..165a77b
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test45/in/A.java
@@ -0,0 +1,24 @@
+package p;
+
+public class A extends B{
+    B someField;
+    static int a;
+    String b;
+
+    void someMethod(MyEnum fooBar) {
+        switch (fooBar) {
+        case FOO:
+            System.out.println(a);
+            break;
+        case BAR:
+            System.out.println(b);
+            System.out.println(someField);
+        }
+    }
+}
+
+class B {
+	enum MyEnum {
+	    FOO, BAR
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test45/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test45/out/A.java
new file mode 100644
index 0000000..1f2f9b9
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/MoveInstanceMethod/canMove/test45/out/A.java
@@ -0,0 +1,24 @@
+package p;
+
+public class A extends B{
+    B someField;
+    static int a;
+    String b;
+}
+
+class B {
+	enum MyEnum {
+	    FOO, BAR;
+
+		void someMethod(A a) {
+		    switch (this) {
+		    case FOO:
+		        System.out.println(A.a);
+		        break;
+		    case BAR:
+		        System.out.println(a.b);
+		        System.out.println(a.someField);
+		    }
+		}
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java
index ad2d8e7..523d563 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/MoveInstanceMethodTests.java
@@ -445,6 +445,21 @@
 		helper1(new String[] { "p.A", "p.B", "p.Outer" }, "p.A", 6, 17, 6, 20, PARAMETER, "b", true, true);
 	}
 	
+	// Test problem with enum (bug 339980)
+	public void test43() throws Exception {
+		helper1(new String[] { "p.A" }, "p.A", 10, 10, 10, 20, PARAMETER, "fooBar", true, true);
+	}
+
+	// Test problem with enum (bug 339980)
+	public void test44() throws Exception {
+		helper1(new String[] { "p.A", "p.MyEnum" }, "p.A", 8, 10, 8, 20, PARAMETER, "fooBar", true, true);
+	}
+
+	// Test problem with enum (bug 339980)
+	public void test45() throws Exception {
+		helper1(new String[] { "p.A" }, "p.A", 8, 10, 8, 20, PARAMETER, "fooBar", true, true);
+	}
+
 	// Move mA1 to field fB, do not inline delegator
 	public void test3() throws Exception {
 		helper1(new String[] { "p1.A", "p2.B", "p3.C"}, "p1.A", 9, 17, 9, 20, FIELD, "fB", false, false);
