diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/tryresources18_in/TestWithThrows3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/tryresources18_in/TestWithThrows3.java
new file mode 100644
index 0000000..e402e69
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/tryresources18_in/TestWithThrows3.java
@@ -0,0 +1,16 @@
+package trycatch18_in;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+
+class TestWithThrows3 {
+	public FileInputStream foo(int a) throws FileNotFoundException {
+		try {
+			/*[*/FileInputStream f = new FileInputStream("a.b");
+			return f;/*]*/
+		} catch (FileNotFoundException e) {
+			// do nothing
+		}
+		return null;
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/tryresources18_out/TestWithThrows3.java b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/tryresources18_out/TestWithThrows3.java
new file mode 100644
index 0000000..3c4c1d7
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/SurroundWithWorkSpace/SurroundWithTests/tryresources18_out/TestWithThrows3.java
@@ -0,0 +1,21 @@
+package trycatch18_in;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+class TestWithThrows3 {
+	public FileInputStream foo(int a) throws FileNotFoundException {
+		try {
+			try (/*[*/ FileInputStream f = new FileInputStream("a.b")) {
+				return f;/*]*/
+			} catch (FileNotFoundException e) {
+				throw e;
+			} catch (IOException e) {
+			}
+		} catch (FileNotFoundException e) {
+			// do nothing
+		}
+		return null;
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithResourcesTests1d8.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithResourcesTests1d8.java
index 0956650..915cd6a 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithResourcesTests1d8.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/SurroundWithResourcesTests1d8.java
@@ -120,6 +120,11 @@
 	}
 
 	@Test
+	public void testWithThrows3() throws Exception {
+		tryResourcesTest();
+	}
+
+	@Test
 	public void testInvalidStatement1() throws Exception {
 		tryResourcesInvalidTest();
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java
index 217150b..0e77ee1 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java
@@ -5826,6 +5826,79 @@
 		assertCorrectLabels(proposals);
 	}
 	@Test
+	public void testSurroundWithTryWithResource_04() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
+		StringBuffer bufOrg= new StringBuffer();
+		bufOrg.append("package p;\n");
+		bufOrg.append("\n");
+		bufOrg.append("import java.io.FileInputStream;\n");
+		bufOrg.append("import java.io.FileNotFoundException;\n");
+		bufOrg.append("import java.io.InputStream;\n");
+		bufOrg.append("import java.net.Socket;\n");
+		bufOrg.append("\n");
+		bufOrg.append("public class E {\n");
+		bufOrg.append("    public void foo() throws FileNotFoundException {\n");
+		bufOrg.append("        try {\n");
+		bufOrg.append("            /*1*/Socket s = new Socket(), s2 = new Socket();\n");
+		bufOrg.append("            /*2*/InputStream is = s.getInputStream();\n");
+		bufOrg.append("            /*3*/FileInputStream f = new FileInputStream(\"a.b\");\n");
+		bufOrg.append("            /*4*/int i = 0;\n");
+		bufOrg.append("            System.out.println(s.getInetAddress().toString());\n");
+		bufOrg.append("            System.out.println(is.markSupported());/*0*/\n");
+		bufOrg.append("        } catch (FileNotFoundException e) {\n");
+		bufOrg.append("        }\n");
+		bufOrg.append("    }\n");
+		bufOrg.append("}\n");
+		bufOrg.append("\n");
+
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", bufOrg.toString(), false, null);
+		String strEnd= "/*0*/";
+
+		String str1= "/*1*/";
+		AssistContext context= getCorrectionContext(cu, bufOrg.toString().indexOf(str1), bufOrg.toString().indexOf(strEnd) - bufOrg.toString().indexOf(str1));
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertCorrectLabels(proposals);
+
+		CUCorrectionProposal proposal= (CUCorrectionProposal) proposals.get(0);
+		String preview1= getPreviewContent(proposal);
+
+		StringBuffer buf= new StringBuffer();
+		buf.append("package p;\n");
+		buf.append("\n");
+		buf.append("import java.io.FileInputStream;\n");
+		buf.append("import java.io.FileNotFoundException;\n");
+		buf.append("import java.io.IOException;\n");
+		buf.append("import java.io.InputStream;\n");
+		buf.append("import java.net.Socket;\n");
+		buf.append("\n");
+		buf.append("public class E {\n");
+		buf.append("    public void foo() throws FileNotFoundException {\n");
+		buf.append("        try {\n");
+		buf.append("            try (/*1*/Socket s = new Socket();\n");
+		buf.append("                    Socket s2 = new Socket();\n");
+		buf.append("                    /*2*/InputStream is = s.getInputStream();\n");
+		buf.append("                    /*3*/FileInputStream f = new FileInputStream(\"a.b\")) {\n");
+		buf.append("                /*4*/int i = 0;\n");
+		buf.append("                System.out.println(s.getInetAddress().toString());\n");
+		buf.append("                System.out.println(is.markSupported());/*0*/\n");
+		buf.append("            } catch (FileNotFoundException e) {\n");
+		buf.append("                throw e;\n");
+		buf.append("            } catch (IOException e) {\n");
+		buf.append("                // TODO Auto-generated catch block\n");
+		buf.append("                e.printStackTrace();\n");
+		buf.append("            }\n");
+		buf.append("        } catch (FileNotFoundException e) {\n");
+		buf.append("        }\n");
+		buf.append("    }\n");
+		buf.append("}\n");
+		buf.append("\n");
+		String expected1= buf.toString();
+
+		assertEqualStringsIgnoreOrder(new String[] { preview1 }, new String[] { expected1 });
+		assertCorrectLabels(proposals);
+	}
+	@Test
 	public void testWrapInOptional_01() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
 		StringBuffer buf= new StringBuffer();
@@ -6091,5 +6164,59 @@
 		assertExpectedExistInProposals(proposals, new String[] { expected });
 	}
 
+	@Test
+	public void testAssignInTryWithResources_04() throws Exception {
+		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
+		String src=
+				"package test1;\n" +
+				"\n" +
+				"import java.io.FileInputStream;\n" +
+				"import java.io.FileNotFoundException;\n" +
+				"\n" +
+				"class E {\n" +
+				"    void f() throws FileNotFoundException {\n" +
+				"        try {\n" +
+				"            new FileInputStream(\"f\");\n" +
+				"        } catch (FileNotFoundException e) {\n" +
+				"            // some action\n" +
+				"        }\n" +
+				"    }\n" +
+				"}";
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", src, false, null);
+
+		int offset= src.indexOf("new");
+		AssistContext context= getCorrectionContext(cu, offset, 0);
+		List<IJavaCompletionProposal> proposals= collectAssists(context, false);
+
+		assertNumberOfProposals(proposals, 6);
+		assertCorrectLabels(proposals);
+
+		String expected=
+				"package test1;\n" +
+				"\n" +
+				"import java.io.FileInputStream;\n" +
+				"import java.io.FileNotFoundException;\n" +
+				"import java.io.IOException;\n" +
+				"\n" +
+				"class E {\n" +
+				"    void f() throws FileNotFoundException {\n" +
+				"        try {\n" +
+				"            try (FileInputStream fileInputStream = new FileInputStream(\"f\")) {\n" +
+				"                \n" +
+				"            } catch (FileNotFoundException e) {\n" +
+				"                throw e;\n" +
+				"            } catch (IOException e) {\n" +
+	            "                // TODO Auto-generated catch block\n" +
+				"                e.printStackTrace();\n" +
+				"            };\n" +
+				"        } catch (FileNotFoundException e) {\n" +
+				"            // some action\n" +
+				"        }\n" +
+				"    }\n" +
+				"}";
+
+		assertExpectedExistInProposals(proposals, new String[] { expected });
+	}
+
 }
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesAnalyzer.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesAnalyzer.java
index bee6a31..b5f0443 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesAnalyzer.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesAnalyzer.java
@@ -170,7 +170,8 @@
 		for (ITypeBinding binding : exceptionList) {
 			for (ITypeBinding thrownException : thrownExceptions) {
 				if (thrownException.isAssignmentCompatible(binding)) {
-					mustRethrowList.add(thrownException);
+					if (!mustRethrowList.contains(thrownException))
+						mustRethrowList.add(thrownException);
 					break;
 				}
 			}
