diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
index 5f3e904..aaf1185 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExceptionAnalyzer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2011 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,29 +39,29 @@
 		if (exception == null)		// Safety net for null bindings when compiling fails.
 			return true;
 
-		addException(exception);
+		addException(exception, node.getAST());
 		return true;
 	}
 
 	@Override
 	public boolean visit(MethodInvocation node) {
-		return handleExceptions((IMethodBinding)node.getName().resolveBinding());
+		return handleExceptions((IMethodBinding)node.getName().resolveBinding(), node);
 	}
 
 	@Override
 	public boolean visit(SuperMethodInvocation node) {
-		return handleExceptions((IMethodBinding)node.getName().resolveBinding());
+		return handleExceptions((IMethodBinding)node.getName().resolveBinding(), node);
 	}
 
 	@Override
 	public boolean visit(ClassInstanceCreation node) {
-		return handleExceptions(node.resolveConstructorBinding());
+		return handleExceptions(node.resolveConstructorBinding(), node);
 	}
 
-	private boolean handleExceptions(IMethodBinding binding) {
+	private boolean handleExceptions(IMethodBinding binding, ASTNode node) {
 		if (binding == null)
 			return true;
-		addExceptions(binding.getExceptionTypes());
+		addExceptions(binding.getExceptionTypes(), node.getAST());
 		return true;
 	}
 }
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
index b9c05df..a023c57 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/ExceptionAnalyzer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -95,7 +95,7 @@
 		if (!isSelected(node) || exception == null || Bindings.isRuntimeException(exception)) // Safety net for null bindings when compiling fails.
 			return true;
 
-		addException(exception);
+		addException(exception, node.getAST());
 		return true;
 	}
 
@@ -103,35 +103,35 @@
 	public boolean visit(MethodInvocation node) {
 		if (!isSelected(node))
 			return false;
-		return handleExceptions(node.resolveMethodBinding());
+		return handleExceptions(node.resolveMethodBinding(), node);
 	}
 
 	@Override
 	public boolean visit(SuperMethodInvocation node) {
 		if (!isSelected(node))
 			return false;
-		return handleExceptions(node.resolveMethodBinding());
+		return handleExceptions(node.resolveMethodBinding(), node);
 	}
 
 	@Override
 	public boolean visit(ClassInstanceCreation node) {
 		if (!isSelected(node))
 			return false;
-		return handleExceptions(node.resolveConstructorBinding());
+		return handleExceptions(node.resolveConstructorBinding(), node);
 	}
 
 	@Override
 	public boolean visit(ConstructorInvocation node) {
 		if (!isSelected(node))
 			return false;
-		return handleExceptions(node.resolveConstructorBinding());
+		return handleExceptions(node.resolveConstructorBinding(), node);
 	}
 
 	@Override
 	public boolean visit(SuperConstructorInvocation node) {
 		if (!isSelected(node))
 			return false;
-		return handleExceptions(node.resolveConstructorBinding());
+		return handleExceptions(node.resolveConstructorBinding(), node);
 	}
 
 	@Override
@@ -141,12 +141,12 @@
 		return super.visit(node);
 	}
 
-	private boolean handleExceptions(IMethodBinding binding) {
+	private boolean handleExceptions(IMethodBinding binding, ASTNode node) {
 		if (binding == null)
 			return true;
 		ITypeBinding[] exceptions= binding.getExceptionTypes();
 		for (int i= 0; i < exceptions.length; i++) {
-			addException(exceptions[i]);
+			addException(exceptions[i], node.getAST());
 		}
 		return true;
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
index 322b1c3..82cb09c 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/util/AbstractExceptionAnalyzer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,6 +15,7 @@
 import java.util.List;
 import java.util.Stack;
 
+import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
 import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
@@ -103,7 +104,7 @@
 		List<ITypeBinding> current= fTryStack.pop();
 		fCurrentExceptions= fTryStack.peek();
 		for (Iterator<ITypeBinding> iter= current.iterator(); iter.hasNext();) {
-			addException(iter.next());
+			addException(iter.next(), node.getAST());
 		}
 
 		// visit catch and finally
@@ -125,7 +126,7 @@
 			if (resourceTypeBinding != null) {
 				IMethodBinding methodBinding= Bindings.findMethodInHierarchy(resourceTypeBinding, "close", new ITypeBinding[0]); //$NON-NLS-1$
 				if (methodBinding != null) {
-					addExceptions(methodBinding.getExceptionTypes());
+					addExceptions(methodBinding.getExceptionTypes(), node.getAST());
 				}
 			}
 		}
@@ -133,15 +134,16 @@
 	}
 
 
-	protected void addExceptions(ITypeBinding[] exceptions) {
+	protected void addExceptions(ITypeBinding[] exceptions, AST ast) {
 		if(exceptions == null)
 			return;
 		for (int i= 0; i < exceptions.length;i++) {
-			addException(exceptions[i]);
+			addException(exceptions[i], ast);
 		}
 	}
 
-	protected void addException(ITypeBinding exception) {
+	protected void addException(ITypeBinding exception, AST ast) {
+		exception= Bindings.normalizeForDeclarationUse(exception, ast);
 		if (!fCurrentExceptions.contains(exception))
 			fCurrentExceptions.add(exception);
 	}
