diff --git a/src/com/facebook/buck/cli/TargetsCommandOptions.java b/src/com/facebook/buck/cli/TargetsCommandOptions.java
index e46150e..7420a61 100644
--- a/src/com/facebook/buck/cli/TargetsCommandOptions.java
+++ b/src/com/facebook/buck/cli/TargetsCommandOptions.java
@@ -18,7 +18,7 @@
 
 import com.facebook.buck.model.BuildTarget;
 import com.facebook.buck.parser.NoSuchBuildTargetException;
-import com.facebook.buck.util.Paths;
+import com.facebook.buck.util.MorePaths;
 import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableSet;
 
@@ -79,8 +79,8 @@
       // Ignore files that aren't under project root.
       if (canonicalFullPath.startsWith(projectRootCanonicalFullPathWithEndSlash)) {
         builder.add(
-            Paths.normalizePathSeparator(canonicalFullPath.substring(
-                projectRootCanonicalFullPathWithEndSlash.length())));
+            MorePaths.newPathInstance(canonicalFullPath.substring(
+                projectRootCanonicalFullPathWithEndSlash.length())).toString());
       }
     }
     return builder.build();
diff --git a/src/com/facebook/buck/java/DefaultJavaLibraryRule.java b/src/com/facebook/buck/java/DefaultJavaLibraryRule.java
index 33567f5..cdd64ab 100644
--- a/src/com/facebook/buck/java/DefaultJavaLibraryRule.java
+++ b/src/com/facebook/buck/java/DefaultJavaLibraryRule.java
@@ -52,7 +52,7 @@
 import com.facebook.buck.step.fs.MakeCleanDirectoryStep;
 import com.facebook.buck.step.fs.MkdirAndSymlinkFileStep;
 import com.facebook.buck.util.BuckConstant;
-import com.facebook.buck.util.Paths;
+import com.facebook.buck.util.MorePaths;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
@@ -74,6 +74,8 @@
 import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -715,9 +717,9 @@
         //
         // Therefore, some path-wrangling is required to produce the correct string.
 
-        String resource = Paths.normalizePathSeparator(rawResource.resolve(context).toString());
-        String javaPackageAsPath = javaPackageFinder.findJavaPackageFolderForPath(resource);
-        String relativeSymlinkPath;
+        Path resource = MorePaths.separatorsToUnix(rawResource.resolve(context));
+        String javaPackageAsPath = javaPackageFinder.findJavaPackageFolderForPath(resource.toString());
+        Path relativeSymlinkPath;
 
 
         if (resource.startsWith(BuckConstant.BUCK_OUTPUT_DIRECTORY) ||
@@ -726,23 +728,23 @@
             resource.startsWith(BuckConstant.ANNOTATION_DIR)) {
           // Handle the case where we depend on the output of another BuildRule. In that case, just
           // grab the output and put in the same package as this target would be in.
-          relativeSymlinkPath = String.format(
-              "%s/%s", targetPackageDir, rawResource.resolve(context).getFileName());
+          relativeSymlinkPath = Paths.get(String.format(
+              "%s/%s", targetPackageDir, rawResource.resolve(context).getFileName()));
         } else if ("".equals(javaPackageAsPath)) {
           // In this case, the project root is acting as the default package, so the resource path
           // works fine.
           relativeSymlinkPath = resource;
         } else {
-          int lastIndex = resource.lastIndexOf(javaPackageAsPath);
+          int lastIndex = resource.toString().lastIndexOf(javaPackageAsPath);
           Preconditions.checkState(lastIndex >= 0,
               "Resource path %s must contain %s",
               resource,
               javaPackageAsPath);
 
-          relativeSymlinkPath = resource.substring(lastIndex);
+          relativeSymlinkPath = Paths.get(resource.toString().substring(lastIndex));
         }
-        String target = outputDirectory + '/' + relativeSymlinkPath;
-        MkdirAndSymlinkFileStep link = new MkdirAndSymlinkFileStep(resource, target);
+        String target = Paths.get(outputDirectory).resolve(relativeSymlinkPath).toString();
+        MkdirAndSymlinkFileStep link = new MkdirAndSymlinkFileStep(resource.toString(), target);
         commands.add(link);
       }
     }
diff --git a/src/com/facebook/buck/model/BuildTarget.java b/src/com/facebook/buck/model/BuildTarget.java
index 8096a9d..8a4632c 100644
--- a/src/com/facebook/buck/model/BuildTarget.java
+++ b/src/com/facebook/buck/model/BuildTarget.java
@@ -17,7 +17,6 @@
 package com.facebook.buck.model;
 
 import com.facebook.buck.util.BuckConstant;
-import com.facebook.buck.util.Paths;
 import com.facebook.buck.util.ProjectFilesystem;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -45,10 +44,8 @@
         "baseName must start with // but was %s",
         baseName);
 
-    // On Windows, basePath may contain backslashes, which are not permitted by BuildTarget.
-    if (Paths.containsBackslash(baseName)) {
-      baseName = Paths.normalizePathSeparator(baseName);
-    }
+    // On Windows, baseName may contain backslashes, which are not permitted by BuildTarget.
+    baseName = baseName.replace("\\", "/");
 
     this.baseName = baseName;
     this.shortName = Preconditions.checkNotNull(shortName);
diff --git a/src/com/facebook/buck/util/DirectoryTraversers.java b/src/com/facebook/buck/util/DirectoryTraversers.java
index 52cc3b4..5098dc7 100644
--- a/src/com/facebook/buck/util/DirectoryTraversers.java
+++ b/src/com/facebook/buck/util/DirectoryTraversers.java
@@ -20,6 +20,7 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Paths;
 
 public class DirectoryTraversers {
 
@@ -46,7 +47,7 @@
     traverser.traverse(new DirectoryTraversal(new File(pathToDirectory)) {
       @Override
       public void visit(File file, String relativePath) {
-        allFiles.add(java.nio.file.Paths.get(pathToDirectory, relativePath).toString());
+        allFiles.add(Paths.get(pathToDirectory, relativePath).toString());
       }
     });
 
diff --git a/src/com/facebook/buck/util/MorePaths.java b/src/com/facebook/buck/util/MorePaths.java
index 056f3e4..dff2c96 100644
--- a/src/com/facebook/buck/util/MorePaths.java
+++ b/src/com/facebook/buck/util/MorePaths.java
@@ -42,7 +42,10 @@
    * @return The path using UNIX path separators.
    */
   public static Path separatorsToUnix(String path) {
-    return Paths.get(path.replace(File.separator, "/")).normalize();
+    if (!File.separator.equals("/")) {
+      path = path.replace(File.separator, "/");
+    }
+    return Paths.get(path).normalize();
   }
 
   /**
diff --git a/src/com/facebook/buck/util/Paths.java b/src/com/facebook/buck/util/Paths.java
deleted file mode 100644
index 3a685e4..0000000
--- a/src/com/facebook/buck/util/Paths.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2012-present Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License. You may obtain
- * a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-
-package com.facebook.buck.util;
-
-public class Paths {
-
-  private Paths() {}
-
-  /**
-   * Returns normalized path. On Windows \ will be replaced with /.
-   * @return Normalized path
-   */
-  public static String normalizePathSeparator(String path) {
-    return path.replace("\\", "/");
-  }
-
-  /** @return true if the specified path contains a backslash character. */
-  public static boolean containsBackslash(String path) {
-    return path.indexOf('\\') >= 0;
-  }
-}
diff --git a/src/com/facebook/buck/util/ProjectFilesystem.java b/src/com/facebook/buck/util/ProjectFilesystem.java
index 4cb1590..7197341 100644
--- a/src/com/facebook/buck/util/ProjectFilesystem.java
+++ b/src/com/facebook/buck/util/ProjectFilesystem.java
@@ -34,6 +34,7 @@
 import java.nio.file.FileVisitor;
 import java.nio.file.LinkOption;
 import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.nio.file.StandardWatchEventKinds;
 import java.nio.file.WatchEvent;
@@ -235,7 +236,7 @@
    * returned. Otherwise, an {@link Optional} with the first line of the file will be returned.
    */
   public Optional<String> readFirstLine(String pathRelativeToProjectRoot) {
-    return readFirstLine(java.nio.file.Paths.get(pathRelativeToProjectRoot));
+    return readFirstLine(Paths.get(pathRelativeToProjectRoot));
   }
 
   /**
diff --git a/test/com/facebook/buck/command/ProjectTest.java b/test/com/facebook/buck/command/ProjectTest.java
index 5f465a7..78e1e61 100644
--- a/test/com/facebook/buck/command/ProjectTest.java
+++ b/test/com/facebook/buck/command/ProjectTest.java
@@ -47,7 +47,6 @@
 import com.facebook.buck.testutil.BuckTestConstant;
 import com.facebook.buck.testutil.RuleMap;
 import com.facebook.buck.util.HumanReadableException;
-import com.facebook.buck.util.Paths;
 import com.facebook.buck.util.ProjectFilesystem;
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
@@ -838,7 +837,7 @@
       assertEquals("You must define a project_config() in example/child/BUCK containing " +
           "//example/parent:ex1. The project_config() in //example/child:config transitively " +
           "depends on it.",
-          Paths.normalizePathSeparator(e.getHumanReadableErrorMessage()));
+          e.getHumanReadableErrorMessage().replace("\\", "/"));
     }
   }
 }
diff --git a/test/com/facebook/buck/rules/BuildContextTest.java b/test/com/facebook/buck/rules/BuildContextTest.java
index a27cdff..4c8dec5 100644
--- a/test/com/facebook/buck/rules/BuildContextTest.java
+++ b/test/com/facebook/buck/rules/BuildContextTest.java
@@ -23,6 +23,7 @@
 import com.facebook.buck.testutil.TestConsole;
 import com.facebook.buck.util.AndroidPlatformTarget;
 import com.facebook.buck.util.HumanReadableException;
+import com.facebook.buck.util.MorePaths;
 import com.facebook.buck.util.ProjectFilesystem;
 import com.facebook.buck.util.Verbosity;
 import com.google.common.base.Optional;
@@ -64,8 +65,7 @@
     BuildContext context = builder.build();
     Supplier<String> androidBootclasspathSupplier = context.getAndroidBootclasspathSupplier();
 
-    String androidBootclasspath = com.facebook.buck.util.Paths.normalizePathSeparator(
-        androidBootclasspathSupplier.get());
+    String androidBootclasspath = MorePaths.newPathInstance(androidBootclasspathSupplier.get()).toString();
     assertEquals(
         "add-ons/addon-google_apis-google-15/libs/effects.jar:" +
         "add-ons/addon-google_apis-google-15/libs/maps.jar:" +
diff --git a/test/com/facebook/buck/rules/NonCheckingBuildRuleFactoryParams.java b/test/com/facebook/buck/rules/NonCheckingBuildRuleFactoryParams.java
index ae22f29..38095f4 100644
--- a/test/com/facebook/buck/rules/NonCheckingBuildRuleFactoryParams.java
+++ b/test/com/facebook/buck/rules/NonCheckingBuildRuleFactoryParams.java
@@ -19,7 +19,7 @@
 import com.facebook.buck.model.BuildFileTree;
 import com.facebook.buck.model.BuildTarget;
 import com.facebook.buck.parser.BuildTargetParser;
-import com.facebook.buck.util.Paths;
+import com.facebook.buck.util.MorePaths;
 import com.facebook.buck.util.ProjectFilesystem;
 import com.google.common.collect.ImmutableSet;
 
@@ -60,7 +60,7 @@
     @Override
     public String getBasePathOfAncestorTarget(String filePath) {
       // Always assume the file is local to the target.
-      return Paths.normalizePathSeparator(new File(filePath).getParent());
+      return MorePaths.newPathInstance(filePath).getParent().toString();
     }
   }
 
diff --git a/test/com/facebook/buck/util/PathsTest.java b/test/com/facebook/buck/util/PathsTest.java
deleted file mode 100644
index 9b96aaa..0000000
--- a/test/com/facebook/buck/util/PathsTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright 2012-present Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License. You may obtain
- * a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-
-package com.facebook.buck.util;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-public class PathsTest {
-
-  @Test
-  public void testNormalizePathSeparator() {
-    assertEquals("C:/Windows/System32/drivers.dll",
-        Paths.normalizePathSeparator("C:\\Windows\\System32\\drivers.dll"));
-  }
-
-  @Test
-  public void testContainsBackslash() {
-    assertTrue(Paths.containsBackslash("C:\\Windows\\System32\\drivers.dll"));
-    assertFalse(Paths.containsBackslash("C:/Windows"));
-    assertFalse(Paths.containsBackslash("/usr/bin"));
-  }
-}
