diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTSemanticMatcher.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTSemanticMatcher.java
index eb1e408..8d75724 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTSemanticMatcher.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTSemanticMatcher.java
@@ -36,6 +36,7 @@
 import org.eclipse.jdt.core.dom.IfStatement;
 import org.eclipse.jdt.core.dom.InfixExpression;
 import org.eclipse.jdt.core.dom.LabeledStatement;
+import org.eclipse.jdt.core.dom.NumberLiteral;
 import org.eclipse.jdt.core.dom.ParenthesizedExpression;
 import org.eclipse.jdt.core.dom.PostfixExpression;
 import org.eclipse.jdt.core.dom.PrefixExpression;
@@ -185,14 +186,41 @@
 	};
 
 	@Override
+	public boolean match(final NumberLiteral node, final Object otherObject) {
+		Object other= unbracket(otherObject);
+
+		if (super.match(node, other)) {
+			return true;
+		}
+
+		if (!(other instanceof Expression)) {
+			return false;
+		}
+
+
+		Expression expression= (Expression) other;
+
+		return node.resolveTypeBinding() != null
+				&& node.resolveTypeBinding().equals(expression.resolveTypeBinding())
+				&& node.resolveConstantExpressionValue() != null
+				&& node.resolveConstantExpressionValue().equals(expression.resolveConstantExpressionValue());
+	}
+
+	@Override
 	public boolean match(final InfixExpression node, final Object otherObject) {
 		Object other= unbracket(otherObject);
 
-		if (other instanceof PrefixExpression) {
-			PrefixExpression pe= (PrefixExpression) other;
+		if (other instanceof NumberLiteral) {
+			NumberLiteral numberLiteral= (NumberLiteral) other;
 
-			if (ASTNodes.hasOperator(pe, PrefixExpression.Operator.NOT)) {
-				return matchNegative(node, pe.getOperand());
+			return match(numberLiteral, node);
+		}
+
+		if (other instanceof PrefixExpression) {
+			PrefixExpression prefixExpression= (PrefixExpression) other;
+
+			if (ASTNodes.hasOperator(prefixExpression, PrefixExpression.Operator.NOT)) {
+				return matchNegative(node, prefixExpression.getOperand());
 			}
 		}
 
@@ -244,6 +272,12 @@
 	public boolean match(final PrefixExpression node, final Object otherObject) {
 		Object other= unbracket(otherObject);
 
+		if (other instanceof NumberLiteral) {
+			NumberLiteral numberLiteral= (NumberLiteral) other;
+
+			return match(numberLiteral, node);
+		}
+
 		if (!(other instanceof PrefixExpression) && ASTNodes.hasOperator(node, PrefixExpression.Operator.NOT)) {
 			return matchNegative(node.getOperand(), other);
 		}
@@ -264,6 +298,12 @@
 	public boolean match(final PostfixExpression node, final Object otherObject) {
 		Object other= unbracket(otherObject);
 
+		if (other instanceof NumberLiteral) {
+			NumberLiteral numberLiteral= (NumberLiteral) other;
+
+			return match(numberLiteral, node);
+		}
+
 		if (node.getParent() instanceof Statement) {
 			if (other instanceof Assignment) {
 				return match0(node, (Assignment) other);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index f90399a..9d07ecb 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -12692,18 +12692,18 @@
 				+ "        // Keep this!\n" //
 				+ "        if (isValid)\n" //
 				+ "            // Keep this comment\n" //
-				+ "            i++;\n" //
+				+ "            i = 1;\n" //
 				+ "        else\n" //
-				+ "            i = i + 1;\n" //
+				+ "            i = (2 - 1) * 1;\n" //
 				+ "    }\n" //
 				+ "\n" //
 				+ "    /** Common code: i++, Remove if statement */\n" //
 				+ "    public void ifElseRemoveIf(boolean b, int number) {\n" //
 				+ "        if (b) {\n" //
 				+ "            // Keep this comment\n" //
-				+ "            number = number + 1;\n" //
+				+ "            number = 1;\n" //
 				+ "        } else {\n" //
-				+ "            number++;\n" //
+				+ "            number = 001;\n" //
 				+ "        }\n" //
 				+ "    }\n" //
 				+ "\n" //
@@ -12867,13 +12867,13 @@
 				+ "    public void ifElseRemoveIfNoBrackets(boolean isValid, int i) {\n" //
 				+ "        // Keep this!\n" //
 				+ "        // Keep this comment\n" //
-				+ "        i++;\n" //
+				+ "        i = 1;\n" //
 				+ "    }\n" //
 				+ "\n" //
 				+ "    /** Common code: i++, Remove if statement */\n" //
 				+ "    public void ifElseRemoveIf(boolean b, int number) {\n" //
 				+ "        // Keep this comment\n" //
-				+ "        number = number + 1;\n" //
+				+ "        number = 1;\n" //
 				+ "    }\n" //
 				+ "\n" //
 				+ "    /** Common code: i++, Remove then case */\n" //
