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 5b0f5e8..6d49d4e 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
@@ -14,9 +14,9 @@
 
 package com.google.gitiles.dev;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
 import static com.google.gitiles.GitilesServlet.STATIC_PREFIX;
 
-import com.google.common.base.Objects;
 import com.google.gitiles.DebugRenderer;
 import com.google.gitiles.GitilesServlet;
 import com.google.gitiles.PathServlet;
@@ -191,7 +191,7 @@
             Arrays.asList(cfg.getStringList("gitiles", null, "customTemplates")),
             new File(sourceRoot, "gitiles-servlet/src/main/resources/com/google/gitiles/templates")
                 .getPath(),
-            Objects.firstNonNull(cfg.getString("gitiles", null, "siteTitle"), "Gitiles")),
+            firstNonNull(cfg.getString("gitiles", null, "siteTitle"), "Gitiles")),
         null, null, null, null, null, null, null);
 
     ServletContextHandler handler = new ServletContextHandler();
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
index 39f0adb..6cc6e11 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BaseServlet.java
@@ -14,6 +14,7 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
 import static com.google.gitiles.FormatType.DEFAULT;
 import static com.google.gitiles.FormatType.HTML;
 import static com.google.gitiles.FormatType.JSON;
@@ -23,7 +24,6 @@
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 import static javax.servlet.http.HttpServletResponse.SC_OK;
 
-import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Maps;
@@ -78,7 +78,7 @@
   }
 
   public static boolean isStreamingResponse(HttpServletRequest req) {
-    return Objects.firstNonNull((Boolean) req.getAttribute(STREAMING_ATTRIBUTE), false);
+    return firstNonNull((Boolean) req.getAttribute(STREAMING_ATTRIBUTE), false);
   }
 
   protected static ArchiveFormat getArchiveFormat(GitilesAccess access) throws IOException {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
index 74d0422..b968d89 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitData.java
@@ -14,11 +14,11 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 import com.google.common.base.Function;
-import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableSet;
@@ -191,7 +191,7 @@
       if (refsById == null) {
         refsById = repo.getAllRefsByPeeledObjectId();
       }
-      return FluentIterable.from(Objects.firstNonNull(refsById.get(id), ImmutableSet.<Ref> of()))
+      return FluentIterable.from(firstNonNull(refsById.get(id), ImmutableSet.<Ref> of()))
         .filter(new Predicate<Ref>() {
           @Override
           public boolean apply(Ref ref) {
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
index c02d55b..3d548b0 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesFilter.java
@@ -14,13 +14,13 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static com.google.gitiles.GitilesServlet.STATIC_PREFIX;
 import static com.google.gitiles.ViewFilter.getRegexGroup;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.LinkedListMultimap;
@@ -331,7 +331,7 @@
           FluentIterable.from(Arrays.asList(
                 config.getStringList("gitiles", null, "customTemplates")))
               .transform(new FileUrlMapper()),
-          Objects.firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles"));
+          firstNonNull(config.getString("gitiles", null, "siteTitle"), "Gitiles"));
     }
   }
 
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
index 6165979..eb0e4dc 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitilesView.java
@@ -14,6 +14,8 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
@@ -21,8 +23,7 @@
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.base.MoreObjects.ToStringHelper;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -199,7 +200,7 @@
         case LOG:
           break;
         default:
-          revision = Objects.firstNonNull(revision, Revision.NULL);
+          revision = firstNonNull(revision, Revision.NULL);
           checkState(revision == Revision.NULL, "cannot set old revision on %s view", type);
           break;
       }
@@ -455,8 +456,8 @@
     this.hostName = hostName;
     this.servletPath = servletPath;
     this.repositoryName = repositoryName;
-    this.revision = Objects.firstNonNull(revision, Revision.NULL);
-    this.oldRevision = Objects.firstNonNull(oldRevision, Revision.NULL);
+    this.revision = firstNonNull(revision, Revision.NULL);
+    this.oldRevision = firstNonNull(oldRevision, Revision.NULL);
     this.path = path;
     this.extension = extension;
     this.params = Multimaps.unmodifiableListMultimap(params);
@@ -533,7 +534,7 @@
 
   @Override
   public String toString() {
-    ToStringHelper b = Objects.toStringHelper(type.toString())
+    ToStringHelper b = toStringHelper(type.toString())
         .omitNullValues()
         .add("host", hostName)
         .add("servlet", servletPath)
@@ -578,7 +579,7 @@
         if (path != null) {
           url.append('/').append(path);
         }
-        url.append(Objects.firstNonNull(extension, DEFAULT_ARCHIVE_EXTENSION));
+        url.append(firstNonNull(extension, DEFAULT_ARCHIVE_EXTENSION));
         break;
       case PATH:
         url.append(repositoryName).append("/+/").append(revision.getName()).append('/')
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
index 4eafffa..99f4c5d 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/GitwebRedirectFilter.java
@@ -14,13 +14,13 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.net.HttpHeaders.LOCATION;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static javax.servlet.http.HttpServletResponse.SC_GONE;
 import static javax.servlet.http.HttpServletResponse.SC_MOVED_PERMANENTLY;
 
-import com.google.common.base.Objects;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
@@ -96,11 +96,10 @@
     } else if (("commit".equals(action) || "tag".equals(action)) && hash != null) {
       view = GitilesView.revision().setRevision(hash);
     } else if ("log".equals(action) || "shortlog".equals(action)) {
-      view = GitilesView.log()
-          .setRevision(Objects.firstNonNull(hash, Revision.HEAD));
+      view = GitilesView.log().setRevision(firstNonNull(hash, Revision.HEAD));
     } else if ("tree".equals(action)) {
       view = GitilesView.path()
-          .setRevision(Objects.firstNonNull(hashBase, Revision.HEAD))
+          .setRevision(firstNonNull(hashBase, Revision.HEAD))
           .setPathPart(path);
     } else if (("blob".equals(action) || "blob_plain".equals(action))
         && hashBase != null && !path.isEmpty()) {
@@ -109,7 +108,7 @@
           .setPathPart(path);
     } else if ("commitdiff".equals(action) && hash != null) {
       view = GitilesView.diff()
-          .setOldRevision(Objects.firstNonNull(hashParent, Revision.NULL))
+          .setOldRevision(firstNonNull(hashParent, Revision.NULL))
           .setRevision(hash)
           .setPathPart("");
     } else if ("blobdiff".equals(action) && !path.isEmpty()
@@ -120,7 +119,7 @@
           .setPathPart(path);
     } else if ("history".equals(action) && !path.isEmpty()) {
       view = GitilesView.log()
-          .setRevision(Objects.firstNonNull(hashBase, Revision.HEAD))
+          .setRevision(firstNonNull(hashBase, Revision.HEAD))
           .setPathPart(path);
     } else {
       // Gitiles does not provide an RSS feed (a=rss,atom,opml)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
index 6bb64b4..244bbc8 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogSoyData.java
@@ -14,9 +14,9 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.firstNonNull;
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
@@ -55,7 +55,7 @@
     this.pretty = checkNotNull(pretty);
     Config config = access.getConfig();
     fields = config.getBoolean("logFormat", pretty, "verbose", false) ? VERBOSE_FIELDS : FIELDS;
-    variant = Objects.firstNonNull(config.getString("logFormat", pretty, "variant"), pretty);
+    variant = firstNonNull(config.getString("logFormat", pretty, "variant"), pretty);
   }
 
   public void renderStreaming(Paginator paginator, @Nullable String revision, Renderer renderer,
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
index 54c72fa..b388e36 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/Revision.java
@@ -14,12 +14,13 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkArgument;
+import static java.util.Objects.hash;
 import static org.eclipse.jgit.lib.Constants.OBJ_BAD;
 import static org.eclipse.jgit.lib.Constants.OBJ_TAG;
 
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
 
 import org.eclipse.jgit.errors.MissingObjectException;
 import org.eclipse.jgit.lib.AbbreviatedObjectId;
@@ -29,6 +30,7 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 
 import java.io.IOException;
+import java.util.Objects;
 
 /**
  * Object encapsulating a single revision as seen by Gitiles.
@@ -121,23 +123,23 @@
   public boolean equals(Object o) {
     if (o instanceof Revision) {
       Revision r = (Revision) o;
-      return Objects.equal(name, r.name)
-          && Objects.equal(id, r.id)
-          && Objects.equal(type, r.type)
-          && Objects.equal(peeledId, r.peeledId)
-          && Objects.equal(peeledType, r.peeledType);
+      return Objects.equals(name, r.name)
+          && Objects.equals(id, r.id)
+          && Objects.equals(type, r.type)
+          && Objects.equals(peeledId, r.peeledId)
+          && Objects.equals(peeledType, r.peeledType);
     }
     return false;
   }
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(name, id, type, peeledId, peeledType);
+    return hash(name, id, type, peeledId, peeledType);
   }
 
   @Override
   public String toString() {
-    return Objects.toStringHelper(this)
+    return toStringHelper(this)
         .omitNullValues()
         .add("name", name)
         .add("id", id != null ? id.getName() : null)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
index a1cdafc..fb876b0 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/RevisionParser.java
@@ -14,11 +14,12 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.Objects.hash;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.CharMatcher;
-import com.google.common.base.Objects;
 import com.google.common.base.Splitter;
 
 import org.eclipse.jgit.errors.AmbiguousObjectException;
@@ -32,6 +33,7 @@
 import org.eclipse.jgit.revwalk.RevWalk;
 
 import java.io.IOException;
+import java.util.Objects;
 
 /** Object to parse revisions out of Gitiles paths. */
 class RevisionParser {
@@ -70,21 +72,21 @@
     public boolean equals(Object o) {
       if (o instanceof Result) {
         Result r = (Result) o;
-        return Objects.equal(revision, r.revision)
-            && Objects.equal(oldRevision, r.oldRevision)
-            && Objects.equal(path, r.path);
+        return Objects.equals(revision, r.revision)
+            && Objects.equals(oldRevision, r.oldRevision)
+            && Objects.equals(path, r.path);
       }
       return false;
     }
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(revision, oldRevision, path);
+      return hash(revision, oldRevision, path);
     }
 
     @Override
     public String toString() {
-      return Objects.toStringHelper(this)
+      return toStringHelper(this)
           .omitNullValues()
           .add("revision", revision.getName())
           .add("oldRevision", oldRevision != null ? oldRevision.getName() : null)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
index 3886f29..a11d7b2 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/VisibilityCache.java
@@ -14,14 +14,15 @@
 
 package com.google.gitiles;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Predicates.not;
 import static com.google.common.collect.Collections2.filter;
+import static java.util.Objects.hash;
 import static org.eclipse.jgit.lib.Constants.R_HEADS;
 import static org.eclipse.jgit.lib.Constants.R_TAGS;
 
 import com.google.common.base.Function;
-import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
 import com.google.common.base.Predicates;
 import com.google.common.base.Throwables;
@@ -43,6 +44,7 @@
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Objects;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
@@ -64,21 +66,21 @@
     public boolean equals(Object o) {
       if (o instanceof Key) {
         Key k = (Key) o;
-        return Objects.equal(user, k.user)
-            && Objects.equal(repositoryName, k.repositoryName)
-            && Objects.equal(objectId, k.objectId);
+        return Objects.equals(user, k.user)
+            && Objects.equals(repositoryName, k.repositoryName)
+            && Objects.equals(objectId, k.objectId);
       }
       return false;
     }
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(user, repositoryName, objectId);
+      return hash(user, repositoryName, objectId);
     }
 
     @Override
     public String toString() {
-      return Objects.toStringHelper(this)
+      return toStringHelper(this)
         .add("user", user)
         .add("repositoryName", repositoryName)
         .add("objectId", objectId)
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
index 50b2d8f..b41e000 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/blame/BlameCacheImpl.java
@@ -15,8 +15,8 @@
 package com.google.gitiles.blame;
 
 import static com.google.common.base.Preconditions.checkState;
+import static java.util.Objects.hash;
 
-import com.google.common.base.Objects;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
@@ -41,6 +41,7 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.ExecutionException;
 
 /** Guava implementation of BlameCache, weighted by number of blame regions. */
@@ -82,15 +83,15 @@
     public boolean equals(Object o) {
       if (o instanceof Key) {
         Key k = (Key) o;
-        return Objects.equal(commitId, k.commitId)
-            && Objects.equal(path, k.path);
+        return Objects.equals(commitId, k.commitId)
+            && Objects.equals(path, k.path);
       }
       return false;
     }
 
     @Override
     public int hashCode() {
-      return Objects.hashCode(commitId, path);
+      return hash(commitId, path);
     }
 
     @Override
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 f59ba04..10867e7 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
@@ -17,7 +17,6 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 
-import com.google.common.base.Objects;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -52,6 +51,7 @@
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -157,7 +157,7 @@
     ObjectId lastCommit = cache.findLastCommit(repo, currCommit, view.getPathPart());
     ObjectId lastCommitBlobId = resolveBlob(view, rw, lastCommit);
 
-    if (!Objects.equal(currCommitBlobId, lastCommitBlobId)) {
+    if (!Objects.equals(currCommitBlobId, lastCommitBlobId)) {
       log.warn(String.format("Blob %s in last modified commit %s for repo %s starting from %s"
           + " does not match original blob %s",
           ObjectId.toString(lastCommitBlobId),
diff --git a/lib/BUCK b/lib/BUCK
index 449901d..2b66a3f 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,7 +1,7 @@
 maven_jar(
   name = 'guava',
-  id = 'com.google.guava:guava:16.0',
-  sha1 = 'aca09d2e5e8416bf91550e72281958e35460be52',
+  id = 'com.google.guava:guava:18.0',
+  sha1 = 'cce0823396aa693798f8882e64213b1772032b09',
 )
 
 maven_jar(
