diff --git a/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/DirTransformerTests.java b/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/DirTransformerTests.java
index e82254c..c580959 100644
--- a/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/DirTransformerTests.java
+++ b/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/DirTransformerTests.java
@@ -181,13 +181,17 @@
     }
 
     private void checkManifest(File manifestFile) throws IOException {
-        InputStream is = new FileInputStream(manifestFile);
-        Manifest manifest = new Manifest(is);
-        Attributes attr = manifest.getMainAttributes();
-        String value = attr.getValue("Custom-Header");
-        assertEquals("test", value);
-        assertEquals(1, attr.size());
-        IOUtils.closeQuietly(is);
+        InputStream is = null;
+        try {
+            is = new FileInputStream(manifestFile);
+            Manifest manifest = new Manifest(is);
+            Attributes attr = manifest.getMainAttributes();
+            String value = attr.getValue("Custom-Header");
+            assertEquals("test", value);
+            assertEquals(1, attr.size());
+        } finally {
+            IOUtils.closeQuietly(is);
+        }
     }
 
     private void createManifest(File manifest, String... headers) throws IOException {
diff --git a/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/WebBundleUrlStreamHandlerServiceTests.java b/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/WebBundleUrlStreamHandlerServiceTests.java
index 520ac6d..ed8cd69 100644
--- a/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/WebBundleUrlStreamHandlerServiceTests.java
+++ b/org.eclipse.gemini.web.core/src/test/java/org/eclipse/gemini/web/internal/url/WebBundleUrlStreamHandlerServiceTests.java
@@ -122,22 +122,25 @@
 
         File webAppDir = new File(connection.getURL().getPath());
         // Check Manifest
-        InputStream is = new FileInputStream(new File(webAppDir, JarFile.MANIFEST_NAME));
-        Manifest manifest = new Manifest(is);
+        InputStream is = null;
+        try {
+            is = new FileInputStream(new File(webAppDir, JarFile.MANIFEST_NAME));
+            Manifest manifest = new Manifest(is);
 
-        if (manifest != null) {
-            Attributes mainAttributes = manifest.getMainAttributes();
-            Set<Entry<Object, Object>> entrySet = mainAttributes.entrySet();
-            for (Entry<Object, Object> entry : entrySet) {
-                System.out.println(entry.getKey() + ": " + entry.getValue());
-                if ("Web-ContextPath".equals(entry.getKey().toString())) {
-                    assertTrue(contextPath.equals(entry.getValue().toString()));
+            if (manifest != null) {
+                Attributes mainAttributes = manifest.getMainAttributes();
+                Set<Entry<Object, Object>> entrySet = mainAttributes.entrySet();
+                for (Entry<Object, Object> entry : entrySet) {
+                    System.out.println(entry.getKey() + ": " + entry.getValue());
+                    if ("Web-ContextPath".equals(entry.getKey().toString())) {
+                        assertTrue(contextPath.equals(entry.getValue().toString()));
+                    }
                 }
             }
+        } finally {
+            IOUtils.closeQuietly(is);
         }
 
-        IOUtils.closeQuietly(is);
-
         // Check web.xml
         assertEquals(webXml.length(), new File(webAppDir, "WEB-INF" + File.separator + "web.xml").length());
 
diff --git a/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java b/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
index 445c721..3a299f8 100644
--- a/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
+++ b/org.eclipse.gemini.web.test/src/test/java/org/eclipse/gemini/web/test/tomcat/TomcatServletContainerTests.java
@@ -116,12 +116,15 @@
     @Test
     public void testServletContainerAvailable() {
         assertNotNull(this.container);
+        Socket socket = null;
         try {
-            new Socket("localhost", 8080);
+            socket = new Socket("localhost", 8080);
         } catch (UnknownHostException e) {
             fail("Unable to connect");
         } catch (IOException e) {
             fail("Unable to connect");
+        } finally {
+            IOUtils.closeQuietly(socket);
         }
     }
 
diff --git a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/TomcatConfigLocatorTests.java b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/TomcatConfigLocatorTests.java
index 6db195a..1ebe03a 100644
--- a/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/TomcatConfigLocatorTests.java
+++ b/org.eclipse.gemini.web.tomcat/src/test/java/org/eclipse/gemini/web/tomcat/internal/TomcatConfigLocatorTests.java
@@ -25,9 +25,11 @@
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
+import java.io.InputStream;
 import java.net.URL;
 import java.util.Vector;
 
+import org.eclipse.virgo.util.io.IOUtils;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -44,7 +46,12 @@
 
         replay(mockBundle, mockContext);
 
-        TomcatConfigLocator.resolveConfigFile(mockContext);
+        InputStream is = null;
+        try {
+            is = TomcatConfigLocator.resolveConfigFile(mockContext);
+        } finally {
+            IOUtils.closeQuietly(is);
+        }
 
         verify(mockBundle, mockContext);
     }
@@ -61,7 +68,12 @@
         BundleContext mockContext = createMockBundleContext(mockBundle);
         replay(mockBundle, mockContext);
 
-        TomcatConfigLocator.resolveConfigFile(mockContext);
+        InputStream is = null;
+        try {
+            is = TomcatConfigLocator.resolveConfigFile(mockContext);
+        } finally {
+            IOUtils.closeQuietly(is);
+        }
 
         verify(mockBundle, mockContext);
     }
@@ -77,7 +89,12 @@
 
         replay(mockBundle, mockContext);
 
-        TomcatConfigLocator.resolveConfigFile(mockContext);
+        InputStream is = null;
+        try {
+            is = TomcatConfigLocator.resolveConfigFile(mockContext);
+        } finally {
+            IOUtils.closeQuietly(is);
+        }
     }
 
     @Test
