diff --git a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java
index 4d6febe..345373b 100644
--- a/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java
+++ b/containers/org.eclipse.linuxtools.docker.core/src/org/eclipse/linuxtools/internal/docker/core/DockerConnection.java
@@ -604,6 +604,7 @@
 
 		@Override
 		public void execute() throws InterruptedException, IOException {
+			LogStream stream = null;
 			try {
 				// Add timestamps to log based on user preference
 				IEclipsePreferences preferences = InstanceScope.INSTANCE
@@ -612,7 +613,6 @@
 				boolean timestamps = preferences.getBoolean(
 						"logTimestamp", true); //$NON-NLS-1$
 
-				LogStream stream = null;
 
 				if (timestamps)
 					stream = copyClient.logs(id, LogsParam.follow(),
@@ -626,7 +626,6 @@
 				int delayTime = 100;
 
 				do {
-					outputStream.write("Sleeping".getBytes());
 					Thread.sleep(delayTime);
 					// Second time in loop and following, pause a second to
 					// allow other threads to do meaningful work
@@ -657,6 +656,8 @@
 			} finally {
 				follow = false;
 				copyClient.close(); // we are done with copyClient..dispose
+				if (stream != null)
+					stream.close();
 				if (outputStream != null)
 					outputStream.close();
 			}
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java
index ae97049..192ff97 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/docker/ui/launch/ContainerLauncher.java
@@ -196,7 +196,10 @@
 			try {
 				IDockerImage dockerImage = ((DockerConnection) connection)
 						.getImageByTag(image);
-				IPath imageFilePath = target.append(".IMAGE_ID");
+				// if there is a .image_id file, check the image id to ensure
+				// the user hasn't loaded a new version which may have
+				// different header files installed.
+				IPath imageFilePath = target.append(".image_id"); //$NON-NLS-1$
 				File imageFile = imageFilePath.toFile();
 				boolean needImageIdFile = !imageFile.exists();
 				if (!needImageIdFile) {
@@ -240,9 +243,16 @@
 						monitor.worked(1);
 						continue;
 					}
-					if (dirList.contains(volume)) {
-						monitor.worked(1);
-						continue;
+					// if we have already copied the directory either directly
+					// or as part of a parent directory copy, then skip to next
+					// volume.
+					for (String path : dirList) {
+						if (volume.equals(path)
+								|| (volume.startsWith(path) && volume.charAt(
+										path.length()) == File.separatorChar)) {
+							monitor.worked(1);
+							continue;
+						}
 					}
 					try {
 						monitor.setTaskName(Messages.getFormattedString(
@@ -300,18 +310,7 @@
 						}
 						k.close();
 					} catch (final DockerException e) {
-						// Display.getDefault()
-						// .syncExec(() -> MessageDialog.openError(
-						// PlatformUI.getWorkbench()
-						// .getActiveWorkbenchWindow()
-						// .getShell(),
-						// Messages.getFormattedString(
-						// ERROR_COPYING_VOLUME,
-						// new String[] { volume, target
-						// .toPortableString() }),
-						// e.getCause() != null
-						// ? e.getCause().getMessage()
-						// : e.getMessage()));
+						// ignore
 					}
 				}
 			} catch (InterruptedException e) {
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java
index 7c5e06a..f3e018f 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/launch/ContainerCommandProcess.java
@@ -54,7 +54,9 @@
 		try {
 			try {
 				// TODO: see if there is a better way of draining the
-				// container output before closing the streams
+				// container output before closing the streams. Note
+				// that trying to join the attachLog thread does not
+				// work.
 				Thread.sleep(1000);
 			} catch (InterruptedException e1) {
 				// ignore
@@ -106,6 +108,9 @@
 			IDockerContainerExit exit = connection
 					.waitForContainer(containerId);
 			connection.stopLoggingThread(containerId);
+			if (!keepContainer) {
+				connection.removeContainer(containerId);
+			}
 			return exit.statusCode();
 		} catch (DockerException e) {
 			return -1;
