diff --git a/core/src/com/google/inject/internal/CycleDetectingLock.java b/core/src/com/google/inject/internal/CycleDetectingLock.java
index 9c46c44..690b151 100644
--- a/core/src/com/google/inject/internal/CycleDetectingLock.java
+++ b/core/src/com/google/inject/internal/CycleDetectingLock.java
@@ -1,14 +1,18 @@
 package com.google.inject.internal;
 
 import com.google.common.base.Preconditions;
+import com.google.common.base.Supplier;
+import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableListMultimap;
+import com.google.common.collect.LinkedHashMultimap;
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimap;
-import com.google.common.collect.MultimapBuilder;
+import com.google.common.collect.Multimaps;
 
 import java.util.Collection;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.locks.Lock;
@@ -103,7 +107,7 @@
      * Guarded by {@code this}.
      */
     private final Multimap<Long, ReentrantCycleDetectingLock> locksOwnedByThread =
-        MultimapBuilder.linkedHashKeys().linkedHashSetValues().build();
+        LinkedHashMultimap.create();
 
     /**
      * Creates new lock within this factory context. We can guarantee that locks created by
@@ -234,8 +238,14 @@
           return ImmutableListMultimap.of();
         }
 
-        ListMultimap<Long, ID> potentialLocksCycle =
-            MultimapBuilder.linkedHashKeys().arrayListValues().build();
+        ListMultimap<Long, ID> potentialLocksCycle = Multimaps.newListMultimap(
+            new LinkedHashMap<Long, Collection<ID>>(),
+            new Supplier<List<ID>>() {
+              @Override
+              public List<ID> get() {
+                return Lists.newArrayList();
+              }
+            });
         // lock that is a part of a potential locks cycle, starts with current lock
         ReentrantCycleDetectingLock lockOwnerWaitingOn = this;
         // try to find a dependency path between lock's owner thread and a current thread
diff --git a/extensions/service/src/com/google/inject/service/AsyncService.java b/extensions/service/src/com/google/inject/service/AsyncService.java
index 8efef12..fe0c3a5 100644
--- a/extensions/service/src/com/google/inject/service/AsyncService.java
+++ b/extensions/service/src/com/google/inject/service/AsyncService.java
@@ -17,7 +17,6 @@
 package com.google.inject.service;
 
 import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.Runnables;
 
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
@@ -31,6 +30,10 @@
  * @author dhanji@gmail.com (Dhanji R. Prasanna)
  */
 public abstract class AsyncService implements Service {
+  private static final Runnable DO_NOTHING = new Runnable() {
+    @Override public void run() {}
+  };
+
   private final ExecutorService executor;
 
   private volatile State state;
@@ -45,7 +48,7 @@
 
     // Starts are idempotent.
     if (state == State.STARTED) {
-      return new FutureTask<State>(Runnables.doNothing(), State.STARTED);
+      return new FutureTask<State>(DO_NOTHING, State.STARTED);
     }
 
     return executor.submit(new Callable<State>() {
@@ -70,7 +73,7 @@
 
     // Likewise, stops are idempotent.
     if (state == State.STOPPED) {
-      return new FutureTask<State>(Runnables.doNothing(), State.STOPPED);
+      return new FutureTask<State>(DO_NOTHING, State.STOPPED);
     }
 
     return executor.submit(new Callable<State>() {
diff --git a/pom.xml b/pom.xml
index 70d9fa4..a34a9d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -443,7 +443,7 @@
       </modules>
       <!-- Disable doclint under JDK 8 -->
       <reporting>
-        <plugins>
+      <plugins>
           <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-javadoc-plugin</artifactId>
@@ -466,16 +466,5 @@
       </build>
     </profile>
   </profiles>
-
   <!-- TODO(cgruber): Update the google parent pom or migrate to sonatype's -->
-  <!-- TODO(cgruber): Comment out dagger-adapter from extensions/pom.xml if v2 is not released. -->
-  <repositories>
-    <repository>
-      <id>sonatype-nexus-snapshots</id>
-      <name>Sonatype Nexus Snapshots</name>
-      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
-      <releases><enabled>false</enabled></releases>
-      <snapshots><enabled>true</enabled></snapshots>
-    </repository>
-  </repositories>
 </project>
