diff --git a/.gitignore b/.gitignore
index cd7c29f..8b1fe53 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,5 +2,6 @@
 /.project
 /.settings
 /buck-out
+/eclipse-out
 /gitiles.config
 /.buckd
diff --git a/bucklets b/bucklets
index 661e6c8..dd43fb6 160000
--- a/bucklets
+++ b/bucklets
@@ -1 +1 @@
-Subproject commit 661e6c8a61ea0e817382b71762a22706788d6c9d
+Subproject commit dd43fb659389754ed86baadf3a47c7cd2ff76e83
diff --git a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
index ed9d203..4cc1e22 100644
--- a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
+++ b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
@@ -51,12 +51,15 @@
 import org.slf4j.LoggerFactory;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.UnknownHostException;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
@@ -86,17 +89,17 @@
     return cfg;
   }
 
-  private static FileNotFoundException badSourceRoot(URI u) {
-    return new FileNotFoundException("Cannot find source root from " + u);
+  private static NoSuchFileException badSourceRoot(URI u) {
+    return new NoSuchFileException("Cannot find source root from " + u);
   }
 
-  private static FileNotFoundException badSourceRoot(URI u, Throwable cause) {
-    FileNotFoundException notFound = badSourceRoot(u);
+  private static NoSuchFileException badSourceRoot(URI u, Throwable cause) {
+    NoSuchFileException notFound = badSourceRoot(u);
     notFound.initCause(cause);
     return notFound;
   }
 
-  private static File findSourceRoot() throws IOException {
+  private static Path findSourceRoot() throws IOException {
     URI u;
     try {
       u = DevServer.class.getResource(DevServer.class.getSimpleName() + ".class").toURI();
@@ -104,7 +107,7 @@
       u = null;
     }
     if (u == null) {
-      throw new FileNotFoundException("Cannot find Gitiles source directory");
+      throw new NoSuchFileException("Cannot find Gitiles source directory");
     }
     if ("jar".equals(u.getScheme())) {
       String path = u.getSchemeSpecificPart();
@@ -122,29 +125,20 @@
     }
   }
 
-  private static File findSourceRoot(URI targetUri) throws IOException {
+  private static Path findSourceRoot(URI targetUri) throws IOException {
     if (!"file".equals(targetUri.getScheme())) {
       throw badSourceRoot(targetUri);
     }
-    String targetPath = targetUri.getPath();
-    // targetPath is an arbitrary path under buck-out/ in our Buck package
-    // layout.
-    int targetIndex = targetPath.lastIndexOf("buck-out/");
-    if (targetIndex < 0) {
-      throw badSourceRoot(targetUri);
+
+    Path dir = Paths.get(targetUri.getPath());
+    while (!Files.isRegularFile(dir.resolve(".buckconfig"))) {
+      Path parent = dir.getParent();
+      if (parent == null) {
+        throw badSourceRoot(targetUri);
+      }
+      dir = parent;
     }
-    String path = targetPath.substring(0, targetIndex);
-    URI u;
-    try {
-      u = new URI("file", path, null).normalize();
-    } catch (URISyntaxException e) {
-      throw new IOException(e);
-    }
-    File root = new File(u);
-    if (!root.exists() || !root.isDirectory()) {
-      throw badSourceRoot(targetUri);
-    }
-    return root;
+    return dir;
   }
 
   private final File sourceRoot;
@@ -152,7 +146,7 @@
   private final Server httpd;
 
   DevServer(File cfgFile) throws IOException, ConfigInvalidException {
-    sourceRoot = findSourceRoot();
+    sourceRoot = findSourceRoot().toFile();
 
     Config cfg = defaultConfig();
     if (cfgFile.exists() && cfgFile.isFile()) {
