diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField1/in/A.java
new file mode 100644
index 0000000..995f832
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField1/in/A.java
@@ -0,0 +1,12 @@
+package p;
+
+class A {
+}
+
+class B extends A {
+	int x;
+}
+class C extends B {
+	boolean x;
+}
+
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField1/out/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField1/out/A.java
new file mode 100644
index 0000000..f644eac
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testField1/out/A.java
@@ -0,0 +1,13 @@
+package p;
+
+class A {
+
+	boolean x;
+}
+
+class B extends A {
+	int x;
+}
+class C extends B {
+}
+
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail1/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail1/in/A.java
deleted file mode 100644
index f3a8c65..0000000
--- a/org.eclipse.jdt.ui.tests.refactoring/resources/PullUp/testFieldFail1/in/A.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package p;
-
-class A {
-}
-
-class B extends A{
-	int x;
-}
-class C extends A{
-	boolean x;
-}
-
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
index 0b059f5..31b0fb3 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/PullUpTests.java
@@ -216,6 +216,26 @@
 		assertEqualLines(expected, actual);
 	}
 
+	private void fieldHelper1b(String[] fieldNames, int targetClassIndex) throws Exception{
+		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
+		IType typeC= getType(cu, "C");
+		IField[] fields= getFields(typeC, fieldNames);
+
+		PullUpRefactoringProcessor processor= createRefactoringProcessor(fields);
+		Refactoring ref= processor.getRefactoring();
+
+		assertTrue("activation", ref.checkInitialConditions(new NullProgressMonitor()).isOK());
+		setTargetClass(processor, targetClassIndex);
+
+		RefactoringStatus checkInputResult= ref.checkFinalConditions(new NullProgressMonitor());
+		assertTrue("precondition was supposed to pass", !checkInputResult.hasError());
+		performChange(ref, false);
+
+		String expected= getFileContents(getOutputTestFileName("A"));
+		String actual= cu.getSource();
+		assertEqualLines(expected, actual);
+	}
+
 	private void fieldHelper2(String[] fieldNames, int targetClassIndex) throws Exception{
 		ICompilationUnit cu= createCUfromTestFile(getPackageP(), "A");
 		IType type= getType(cu, "B");
@@ -1447,11 +1467,11 @@
 		fieldHelper1(new String[]{"i"}, 0);
 	}
 
-	public void testFieldFail0() throws Exception{
-		fieldHelper2(new String[]{"x"}, 0);
+	public void testField1() throws Exception{
+		fieldHelper1b(new String[]{"x"}, 1);
 	}
 
-	public void testFieldFail1() throws Exception{
+	public void testFieldFail0() throws Exception{
 		fieldHelper2(new String[]{"x"}, 0);
 	}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
index b7e7133..1f76cba 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
@@ -882,10 +882,11 @@
 		return null;
 	}
 
-	private RefactoringStatus checkIfFieldDeclaredIn(final IField iField, final IType type) {
+	private RefactoringStatus checkIfFieldDeclaredIn(final IField iField, final IType type) throws JavaModelException {
 		final IField fieldInType= type.getField(iField.getElementName());
-		if (!fieldInType.exists())
+		if (!fieldInType.exists() || !iField.getTypeSignature().equals(fieldInType.getTypeSignature())) {
 			return null;
+		}
 		final String[] keys= { JavaElementLabels.getTextLabel(fieldInType, JavaElementLabels.ALL_FULLY_QUALIFIED), JavaElementLabels.getTextLabel(type, JavaElementLabels.ALL_FULLY_QUALIFIED)};
 		final String msg= Messages.format(RefactoringCoreMessages.PullUpRefactoring_Field_declared_in_class, keys);
 		final RefactoringStatusContext context= JavaStatusContext.create(fieldInType);
@@ -1660,8 +1661,9 @@
 			} else if (member instanceof IField) {
 				final IField field= (IField) member;
 				final IField found= initial.getField(field.getElementName());
-				if (found.exists())
+				if (found.exists() && field.getTypeSignature().equals(found.getTypeSignature())) {
 					addMatchingMember(result, field, found);
+				}
 			} else if (member instanceof IType) {
 				final IType type= (IType) member;
 				final IType found= initial.getType(type.getElementName());
