diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
index 6fc3211..0e435c6 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/DefaultAccess.java
@@ -161,6 +161,9 @@
 
   private String getRelativePath(String path) {
     String base = basePath.getPath();
+    if (path.equals(base)) {
+      return "";
+    }
     if (path.startsWith(base)) {
       return path.substring(base.length() + 1);
     }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
index bcc09eb..ae6219f 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -256,11 +256,16 @@
     }
     walk.setRewriteParents(false);
     String path = view.getPathPart();
-    if (isTrue(Iterables.getFirst(view.getParameters().get(FOLLOW_PARAM), null))) {
+
+    List<String> followParams = view.getParameters().get(FOLLOW_PARAM);
+    boolean follow = !followParams.isEmpty()
+        ? isTrue(followParams.get(0))
+        : access.getConfig().getBoolean("log", null, "follow", true);
+    if (follow) {
       walk.setTreeFilter(FollowFilter.create(path, access.getConfig().get(DiffConfig.KEY)));
     } else {
       walk.setTreeFilter(AndTreeFilter.create(
-          PathFilterGroup.createFromStrings(view.getPathPart()),
+          PathFilterGroup.createFromStrings(path),
           TreeFilter.ANY_DIFF));
     }
   }
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
index 7f18de2..9c5edbd 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameServlet.java
@@ -219,10 +219,17 @@
         }
         Map<String, Object> e = Maps.newHashMapWithExpectedSize(6);
         e.put("abbrevSha", abbrevSha);
+        String blameParent = "";
+        String blameText = "blame";
+        if (view.getRevision().getName().equals(r.getSourceCommit().name())) {
+          blameParent = "^";
+          blameText = "blame^";
+        }
         e.put("blameUrl", GitilesView.blame().copyFrom(view)
-            .setRevision(r.getSourceCommit().name())
+            .setRevision(r.getSourceCommit().name() + blameParent)
             .setPathPart(r.getSourcePath())
             .toUrl());
+        e.put("blameText", blameText);
         e.put("commitUrl", GitilesView.revision().copyFrom(view)
             .setRevision(r.getSourceCommit().name())
             .toUrl());
diff --git a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/BlameDetail.soy b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/BlameDetail.soy
index a35b6e2..f5110d8 100644
--- a/gitiles-servlet/src/main/resources/com/google/gitiles/templates/BlameDetail.soy
+++ b/gitiles-servlet/src/main/resources/com/google/gitiles/templates/BlameDetail.soy
@@ -55,7 +55,7 @@
           <td class="Blame-time">{$region.author.time}</span>
           <td class="Blame-regionLink">
             [<a href="{$region.diffUrl}">{msg desc="text for diff URL"}diff{/msg}</a>]
-            [<a href="{$region.blameUrl}">{msg desc="text for blame URL"}blame{/msg}</a>]
+            [<a href="{$region.blameUrl}">{msg desc="text for blame URL"}{$region.blameText}{/msg}</a>]
           </td>
         {else}
           <td colspan="4"></td>
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
index 56f1c29..2eadf54 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
@@ -83,11 +83,11 @@
     repo.getRevWalk().parseBody(c1);
     repo.getRevWalk().parseBody(c2);
 
-    Log response = buildJson(LOG, "/repo/+log/master/bar");
+    Log response = buildJson(LOG, "/repo/+log/master/bar", "follow=0");
     assertThat(response.log).hasSize(1);
     verifyJsonCommit(response.log.get(0), c2);
 
-    response = buildJson(LOG, "/repo/+log/master/bar", "follow=1");
+    response = buildJson(LOG, "/repo/+log/master/bar");
     assertThat(response.log).hasSize(2);
     verifyJsonCommit(response.log.get(0), c2);
     verifyJsonCommit(response.log.get(1), c1);
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
index 8f6224a..01de750 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/ServletTest.java
@@ -19,6 +19,7 @@
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 import static javax.servlet.http.HttpServletResponse.SC_OK;
 
+import com.google.common.base.Optional;
 import com.google.common.base.Strings;
 import com.google.common.net.HttpHeaders;
 import com.google.gson.FieldNamingPolicy;
@@ -29,10 +30,16 @@
 import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
 import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
+import org.eclipse.jgit.junit.MockSystemReader;
 import org.eclipse.jgit.junit.TestRepository;
+import org.eclipse.jgit.lib.PersonIdent;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.util.SystemReader;
+import org.junit.After;
 import org.junit.Before;
 
 import java.util.Map;
+import java.util.TimeZone;
 
 /** Base class for servlet tests. */
 public class ServletTest {
@@ -41,11 +48,18 @@
 
   @Before
   public void setUp() throws Exception {
-    repo = new TestRepository<DfsRepository>(
-        new InMemoryRepository(new DfsRepositoryDescription("repo")));
+    MockSystemReader mockSystemReader = new MockSystemReader();
+    SystemReader.setInstance(mockSystemReader);
+    DfsRepository r = new InMemoryRepository(new DfsRepositoryDescription("repo"));
+    repo = new TestRepository<>(r, new RevWalk(r), mockSystemReader);
     servlet = TestGitilesServlet.create(repo);
   }
 
+  @After
+  public void tearDown() {
+      SystemReader.setInstance(null);
+  }
+
   protected FakeHttpServletResponse buildResponse(
       String path, String queryString, int expectedStatus)
       throws Exception {
@@ -128,6 +142,11 @@
         .create();
   }
 
+  protected String currentTimeFormatted() {
+    PersonIdent p = new PersonIdent(repo.getRepository());
+    return new DateFormatter(Optional.<TimeZone>absent(), DateFormatter.Format.ISO).format(p);
+  }
+
   protected void assertNotFound(String path, String queryString) throws Exception {
     buildResponse(path, queryString, SC_NOT_FOUND);
   }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
index bc4e553..7100359 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/TimeCacheTest.java
@@ -55,7 +55,7 @@
         new InMemoryRepository(new DfsRepositoryDescription("test")));
     walk = new RevWalk(repo.getRepository());
     cache = new TimeCache();
-    start = repo.getClock().getTime() / 1000;
+    start = repo.getDate().getTime() / 1000;
   }
 
   private long getTime(ObjectId id) throws IOException {
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
index 03a962f..f4fb859 100644
--- a/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
+++ b/gitiles-servlet/src/test/java/com/google/gitiles/blame/BlameServletTest.java
@@ -31,6 +31,8 @@
 
 @RunWith(JUnit4.class)
 public class BlameServletTest extends ServletTest {
+  private static final String NAME = "J. Author";
+  private static final String EMAIL = "jauthor@example.com";
   private static class RegionJsonData {
     int start;
     int count;
@@ -44,7 +46,10 @@
     String contents1 = "foo\n";
     String contents2 = "foo\ncontents\n";
     RevCommit c1 = repo.update("master", repo.commit().add("foo", contents1));
-    RevCommit c2 = repo.update("master", repo.commit().tick(10).parent(c1).add("foo", contents2));
+    String c1Time = currentTimeFormatted();
+    RevCommit c2 = repo.update("master",
+        repo.commit().tick(10).parent(c1).add("foo", contents2));
+    String c2Time = currentTimeFormatted();
 
     Map<String, List<RegionJsonData>> result = getBlameJson("/repo/+blame/" + c2.name() + "/foo");
     assertThat(Iterables.getOnlyElement(result.keySet())).isEqualTo("regions");
@@ -56,18 +61,18 @@
     assertThat(r1.count).isEqualTo(1);
     assertThat(r1.path).isEqualTo("foo");
     assertThat(r1.commit).isEqualTo(c1.name());
-    assertThat(r1.author.name).isEqualTo("J. Author");
-    assertThat(r1.author.email).isEqualTo("jauthor@example.com");
-    assertThat(r1.author.time).isEqualTo("2009-03-13 17:29:48 -0330");
+    assertThat(r1.author.name).isEqualTo(NAME);
+    assertThat(r1.author.email).isEqualTo(EMAIL);
+    assertThat(r1.author.time).isEqualTo(c1Time);
 
     RegionJsonData r2 = regions.get(1);
     assertThat(r2.start).isEqualTo(2);
     assertThat(r2.count).isEqualTo(1);
     assertThat(r2.path).isEqualTo("foo");
     assertThat(r2.commit).isEqualTo(c2.name());
-    assertThat(r2.author.name).isEqualTo("J. Author");
-    assertThat(r2.author.email).isEqualTo("jauthor@example.com");
-    assertThat(r2.author.time).isEqualTo("2009-03-13 17:29:58 -0330");
+    assertThat(r2.author.name).isEqualTo(NAME);
+    assertThat(r2.author.email).isEqualTo(EMAIL);
+    assertThat(r2.author.time).isEqualTo(c2Time);
   }
 
   private Map<String, List<RegionJsonData>> getBlameJson(String path) throws Exception {
diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK
index bced6fb..8da5493 100644
--- a/lib/jgit/BUCK
+++ b/lib/jgit/BUCK
@@ -1,10 +1,10 @@
-REPO = MAVEN_CENTRAL
-VERS = '4.0.1.201506240215-r'
+REPO = GERRIT # Leave here even if set to MAVEN_CENTRAL.
+VERS = '4.2.0.201601211800-r.136-g8efdaaf'
 
 maven_jar(
   name = 'jgit',
   id = 'org.eclipse.jgit:org.eclipse.jgit:' + VERS,
-  sha1 = '3bdf2d666df1a5373f7ad291c075ab1329560afd',
+  sha1 = '32f50e3c0c4f53d8fdca147d3ff0b6ef0dc02eb0',
   repository = REPO,
   unsign = True,
   deps = [':ewah'],
@@ -18,7 +18,7 @@
 maven_jar(
   name = 'jgit-servlet',
   id = 'org.eclipse.jgit:org.eclipse.jgit.http.server:' + VERS,
-  sha1 = '8c73719477224802eda2a2da65bce8946d0fac6f',
+  sha1 = 'b493401b9778cdc38f7c08f111c6385a434b2ac2',
   repository = REPO,
   deps = [':jgit'],
   unsign = True,
@@ -41,7 +41,7 @@
 maven_jar(
   name = 'jgit-archive_library',
   id = 'org.eclipse.jgit:org.eclipse.jgit.archive:' + VERS,
-  sha1 = '124e353f51adbbc1af12b143012cc1ebfa2c1012',
+  sha1 = '1b3a0cb7b8c2629e33902b3daf1067accca62eaf',
   repository = REPO,
   deps = [':jgit'],
   unsign = True,
@@ -54,7 +54,7 @@
 maven_jar(
   name = 'junit',
   id = 'org.eclipse.jgit:org.eclipse.jgit.junit:' + VERS,
-  sha1 = 'bddb62b8f532b6d46ac832d909fa46b73c40a126',
+  sha1 = 'c68ddb3e2aaca05b1d2f8250dd107b5f484ed603',
   repository = REPO,
   unsign = True,
   deps = [':jgit'],
