diff --git a/src/com/android/telecomm/CallsManager.java b/src/com/android/telecomm/CallsManager.java
index 7aeaed5..888f076 100644
--- a/src/com/android/telecomm/CallsManager.java
+++ b/src/com/android/telecomm/CallsManager.java
@@ -28,8 +28,9 @@
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableCollection;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Sets;
 
+import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.Set;
 
 /**
@@ -67,13 +68,20 @@
      * The main call repository. Keeps an instance of all live calls. New incoming and outgoing
      * calls are added to the map and removed when the calls move to the disconnected state.
      */
-    private final Set<Call> mCalls = Sets.newLinkedHashSet();
+    private final Set<Call> mCalls = new LinkedHashSet<>();
 
     /**
      * Set of new calls created to perform a handoff. The calls are added when handoff is initiated
      * and removed when hadnoff is complete.
      */
-    private final Set<Call> mPendingHandoffCalls = Sets.newLinkedHashSet();
+    private final Set<Call> mPendingHandoffCalls = new LinkedHashSet<>();
+
+
+    private final DtmfLocalTonePlayer mDtmfLocalTonePlayer = new DtmfLocalTonePlayer();
+    private final InCallController mInCallController = new InCallController();
+    private final CallAudioManager mCallAudioManager;
+    private final Ringer mRinger;
+    private final Set<CallsManagerListener> mListeners = new HashSet<>();
 
     /**
      * The call the user is currently interacting with. This is the call that should have audio
@@ -81,14 +89,6 @@
      */
     private Call mForegroundCall;
 
-    private final DtmfLocalTonePlayer mDtmfLocalTonePlayer = new DtmfLocalTonePlayer();
-
-    private final CallAudioManager mCallAudioManager;
-
-    private final Ringer mRinger;
-
-    private final Set<CallsManagerListener> mListeners = Sets.newHashSet();
-
     /** Singleton accessor. */
     static CallsManager getInstance() {
         return INSTANCE;
@@ -106,7 +106,7 @@
 
         mListeners.add(new CallLogManager(app));
         mListeners.add(new PhoneStateBroadcaster());
-        mListeners.add(new InCallController());
+        mListeners.add(mInCallController);
         mListeners.add(mRinger);
         mListeners.add(new RingbackPlayer(this, playerFactory));
         mListeners.add(new InCallToneMonitor(playerFactory, this));
@@ -170,6 +170,10 @@
         return mRinger;
     }
 
+    InCallController getInCallController() {
+        return mInCallController;
+    }
+
     boolean hasEmergencyCall() {
         for (Call call : mCalls) {
             if (call.isEmergencyCall()) {
