diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index 876f685..4806485 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -184,11 +184,12 @@
           .write(outputSink, executor);
       CompilationResult output = new CompilationResult(outputSink, app, appInfo);
       options.printWarnings();
-      outputSink.close();
       return output;
     } catch (ExecutionException e) {
       R8.unwrapExecutionException(e);
       throw new AssertionError(e); // unwrapping method should have thrown
+    } finally {
+      outputSink.close();
     }
   }
 
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 0ed71b8..3d5f7d7 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -350,11 +350,11 @@
           options);
 
       options.printWarnings();
-      outputSink.close();
     } catch (ExecutionException e) {
       unwrapExecutionException(e);
       throw new AssertionError(e); // unwrapping method should have thrown
     } finally {
+      outputSink.close();
       // Dump timings.
       if (options.printTimes) {
         timing.report();
diff --git a/src/main/java/com/android/tools/r8/utils/DirectoryOutputSink.java b/src/main/java/com/android/tools/r8/utils/DirectoryOutputSink.java
index adedfde..56e0ea1 100644
--- a/src/main/java/com/android/tools/r8/utils/DirectoryOutputSink.java
+++ b/src/main/java/com/android/tools/r8/utils/DirectoryOutputSink.java
@@ -35,7 +35,7 @@
   @Override
   public void writeDexFile(byte[] contents, Set<String> classDescriptors, int fileId)
       throws IOException {
-    Path target = outputDirectory.resolve(getOutputPath(fileId));
+    Path target = outputDirectory.resolve(getOutputFileName(fileId));
     Files.createDirectories(target.getParent());
     writeToFile(target, null, contents);
   }
@@ -43,7 +43,7 @@
   @Override
   public void writeDexFile(byte[] contents, Set<String> classDescriptors, String primaryClassName)
       throws IOException {
-    Path target = outputDirectory.resolve(getOutputPath(primaryClassName));
+    Path target = outputDirectory.resolve(getOutputFileName(primaryClassName));
     Files.createDirectories(target.getParent());
     writeToFile(target, null, contents);
   }
@@ -52,17 +52,4 @@
   public void close() throws IOException {
     // Intentionally left empty.
   }
-
-  private Path getOutputPath(int index) {
-    String file = index == 0 ? "classes.dex" : ("classes" + (index + 1) + ".dex");
-    return outputDirectory.resolve(file);
-  }
-
-  private Path getOutputPath(String classDescriptor) throws IOException {
-    assert classDescriptor != null && DescriptorUtils.isClassDescriptor(classDescriptor);
-    Path result = outputDirectory
-        .resolve(classDescriptor.substring(1, classDescriptor.length() - 1) + ".dex");
-    Files.createDirectories(result.getParent());
-    return result;
-  }
 }
diff --git a/src/main/java/com/android/tools/r8/utils/FileSystemOutputSink.java b/src/main/java/com/android/tools/r8/utils/FileSystemOutputSink.java
index e7cfc28..e007147 100644
--- a/src/main/java/com/android/tools/r8/utils/FileSystemOutputSink.java
+++ b/src/main/java/com/android/tools/r8/utils/FileSystemOutputSink.java
@@ -8,7 +8,6 @@
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.nio.file.StandardOpenOption;
 
 public abstract class FileSystemOutputSink implements OutputSink {
@@ -28,17 +27,17 @@
     }
   }
 
-  protected Path getOutputFileName(int index) {
-    String file = index == 0 ? "classes.dex" : ("classes" + (index + 1) + ".dex");
-    return Paths.get(file);
+  String getOutputFileName(int index) {
+    return index == 0 ? "classes.dex" : ("classes" + (index + 1) + FileUtils.DEX_EXTENSION);
   }
 
-  protected Path getOutputFileName(String classDescriptor) throws IOException {
+  String getOutputFileName(String classDescriptor) throws IOException {
     assert classDescriptor != null && DescriptorUtils.isClassDescriptor(classDescriptor);
-    Path result = Paths.get(classDescriptor.substring(1, classDescriptor.length() - 1) + ".dex");
-    return result;
+    return DescriptorUtils.getClassBinaryNameFromDescriptor(classDescriptor)
+        + FileUtils.DEX_EXTENSION;
   }
 
+
   @Override
   public void writePrintUsedInformation(byte[] contents) throws IOException {
     writeToFile(options.proguardConfiguration.getPrintUsageFile(), System.out, contents);
@@ -67,7 +66,9 @@
               closer,
               output,
               defValue,
-              StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);
+              StandardOpenOption.CREATE,
+              StandardOpenOption.TRUNCATE_EXISTING,
+              StandardOpenOption.WRITE);
       outputStream.write(contents);
     }
   }
diff --git a/src/main/java/com/android/tools/r8/utils/FileUtils.java b/src/main/java/com/android/tools/r8/utils/FileUtils.java
index a292423..809a6d4 100644
--- a/src/main/java/com/android/tools/r8/utils/FileUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/FileUtils.java
@@ -118,10 +118,10 @@
 
   static boolean isClassesDexFile(Path file) {
     String name = file.getFileName().toString().toLowerCase();
-    if (!name.startsWith("classes") || !name.endsWith(".dex")) {
+    if (!name.startsWith("classes") || !name.endsWith(DEX_EXTENSION)) {
       return false;
     }
-    String numeral = name.substring("classes".length(), name.length() - ".dex".length());
+    String numeral = name.substring("classes".length(), name.length() - DEX_EXTENSION.length());
     if (numeral.isEmpty()) {
       return true;
     }
diff --git a/src/main/java/com/android/tools/r8/utils/ZipFileOutputSink.java b/src/main/java/com/android/tools/r8/utils/ZipFileOutputSink.java
index 0feb485..d290b56 100644
--- a/src/main/java/com/android/tools/r8/utils/ZipFileOutputSink.java
+++ b/src/main/java/com/android/tools/r8/utils/ZipFileOutputSink.java
@@ -39,8 +39,8 @@
     outputStream.close();
   }
 
-  private synchronized void writeToZipFile(Path outputPath, byte[] content) throws IOException {
-    ZipEntry zipEntry = new ZipEntry(outputPath.toString());
+  private synchronized void writeToZipFile(String outputPath, byte[] content) throws IOException {
+    ZipEntry zipEntry = new ZipEntry(outputPath);
     zipEntry.setSize(content.length);
     outputStream.putNextEntry(zipEntry);
     outputStream.write(content);
diff --git a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
index 546d9eb..c8ca57e 100644
--- a/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8IncrementalRunExamplesAndroidOTest.java
@@ -274,7 +274,6 @@
     D8IncrementalTestRunner test = test(testName, testPackage, mainClass);
     test.compileClassesTogether(inputJarFile, out);
 
-
     String[] topLevelDir = out.toFile().list();
     assert topLevelDir != null;
     assertEquals(1, topLevelDir.length);
diff --git a/src/test/java/com/android/tools/r8/R8EntryPointTests.java b/src/test/java/com/android/tools/r8/R8EntryPointTests.java
index e2cb5d6..5ad82de 100644
--- a/src/test/java/com/android/tools/r8/R8EntryPointTests.java
+++ b/src/test/java/com/android/tools/r8/R8EntryPointTests.java
@@ -98,6 +98,25 @@
   }
 
   @Test
+  public void testMainRelativeDir() throws IOException, InterruptedException {
+    temp.newFolder("outdex");
+    Path out = Paths.get("outdex");
+    Path workingDir = temp.getRoot().toPath();
+    ProcessResult r8 = ToolHelper.forkR8(workingDir,
+        "--lib", Paths.get(ToolHelper.getDefaultAndroidJar()).toAbsolutePath().toString(),
+        "--output", out.toString(),
+        "--pg-conf", PROGUARD_FLAGS.toAbsolutePath().toString(),
+        "--pg-conf", testFlags.toAbsolutePath().toString(),
+        INPUT_JAR.toAbsolutePath().toString());
+    Assert.assertEquals(0, r8.exitCode);
+    Assert.assertTrue(
+        Files.isRegularFile(workingDir.resolve(out).resolve(ToolHelper.DEFAULT_DEX_FILENAME)));
+    Assert.assertTrue(Files.isRegularFile(testFlags.getParent().resolve(MAPPING)));
+    Assert.assertTrue(Files.isRegularFile(testFlags.getParent().resolve(SEEDS)));
+  }
+
+
+  @Test
   public void testMainZip() throws IOException, InterruptedException {
     Path out = temp.newFolder("outdex").toPath().resolve("dex.zip");
     ProcessResult r8 = ToolHelper.forkR8(Paths.get("."),
