diff --git a/Android.mk b/Android.mk
index 395aacc..0917793 100644
--- a/Android.mk
+++ b/Android.mk
@@ -4,8 +4,6 @@
 include $(CLEAR_VARS)
 
 LOCAL_JAVA_LIBRARIES := telephony-common
-LOCAL_STATIC_JAVA_LIBRARIES := \
-        guava \
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
diff --git a/src/com/android/server/telecom/CallIdMapper.java b/src/com/android/server/telecom/CallIdMapper.java
index 40a50a5..729db0a 100644
--- a/src/com/android/server/telecom/CallIdMapper.java
+++ b/src/com/android/server/telecom/CallIdMapper.java
@@ -16,11 +16,65 @@
 
 package com.android.server.telecom;
 
-import com.google.common.collect.HashBiMap;
+import android.util.ArrayMap;
+
+import java.util.Map;
 
 /** Utility to map {@link Call} objects to unique IDs. IDs are generated when a call is added. */
 class CallIdMapper {
-    private final HashBiMap<String, Call> mCalls = HashBiMap.create();
+    /**
+     * A very basic bidirectional map.
+     */
+    static class BiMap<K, V> {
+        private Map<K, V> mPrimaryMap = new ArrayMap<>();
+        private Map<V, K> mSecondaryMap = new ArrayMap<>();
+
+        public boolean put(K key, V value) {
+            if (key == null || value == null || mPrimaryMap.containsKey(key) ||
+                    mSecondaryMap.containsKey(value)) {
+                return false;
+            }
+
+            mPrimaryMap.put(key, value);
+            mSecondaryMap.put(value, key);
+            return true;
+        }
+
+        public boolean remove(K key) {
+            if (key == null) {
+                return false;
+            }
+            if (mPrimaryMap.containsKey(key)) {
+                V value = getValue(key);
+                mPrimaryMap.remove(key);
+                mSecondaryMap.remove(value);
+                return true;
+            }
+            return false;
+        }
+
+        public boolean removeValue(V value) {
+            if (value == null) {
+                return false;
+            }
+            return remove(getKey(value));
+        }
+
+        public V getValue(K key) {
+            return mPrimaryMap.get(key);
+        }
+
+        public K getKey(V value) {
+            return mSecondaryMap.get(value);
+        }
+
+        public void clear() {
+            mPrimaryMap.clear();
+            mSecondaryMap.clear();
+        }
+    }
+
+    private final BiMap<String, Call> mCalls = new BiMap<>();
     private final String mCallIdPrefix;
     private static int sIdCount;
 
@@ -55,7 +109,7 @@
             return;
         }
         ThreadUtil.checkOnMainThread();
-        mCalls.inverse().remove(call);
+        mCalls.removeValue(call);
     }
 
     void removeCall(String callId) {
@@ -68,7 +122,7 @@
             return null;
         }
         ThreadUtil.checkOnMainThread();
-        return mCalls.inverse().get(call);
+        return mCalls.getKey(call);
     }
 
     Call getCall(Object objId) {
@@ -82,7 +136,7 @@
             return null;
         }
 
-        return mCalls.get(callId);
+        return mCalls.getValue(callId);
     }
 
     void clear() {
diff --git a/src/com/android/server/telecom/CallsManager.java b/src/com/android/server/telecom/CallsManager.java
index 5c8f24f..eb5b7ab 100644
--- a/src/com/android/server/telecom/CallsManager.java
+++ b/src/com/android/server/telecom/CallsManager.java
@@ -40,9 +40,7 @@
 
 import com.android.internal.util.IndentingPrintWriter;
 
-import com.google.common.collect.ImmutableCollection;
-import com.google.common.collect.ImmutableList;
-
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
@@ -314,8 +312,8 @@
         return true;
     }
 
-    ImmutableCollection<Call> getCalls() {
-        return ImmutableList.copyOf(mCalls);
+    Collection<Call> getCalls() {
+        return Collections.unmodifiableCollection(mCalls);
     }
 
     Call getForegroundCall() {
diff --git a/src/com/android/server/telecom/DtmfLocalTonePlayer.java b/src/com/android/server/telecom/DtmfLocalTonePlayer.java
index 6b4b74d..562f8d3 100644
--- a/src/com/android/server/telecom/DtmfLocalTonePlayer.java
+++ b/src/com/android/server/telecom/DtmfLocalTonePlayer.java
@@ -22,9 +22,6 @@
 import android.provider.Settings;
 
 // TODO: Needed for move to system service: import com.android.internal.R;
-import com.google.common.collect.ImmutableMap;
-
-import java.util.Map;
 
 /**
  * Plays DTMF tones locally for the caller to hear. In order to reduce (1) the amount of times we
@@ -33,22 +30,6 @@
  * changes.
  */
 class DtmfLocalTonePlayer extends CallsManagerListenerBase {
-    private static final Map<Character, Integer> TONE_MAP =
-            ImmutableMap.<Character, Integer>builder()
-                    .put('1', ToneGenerator.TONE_DTMF_1)
-                    .put('2', ToneGenerator.TONE_DTMF_2)
-                    .put('3', ToneGenerator.TONE_DTMF_3)
-                    .put('4', ToneGenerator.TONE_DTMF_4)
-                    .put('5', ToneGenerator.TONE_DTMF_5)
-                    .put('6', ToneGenerator.TONE_DTMF_6)
-                    .put('7', ToneGenerator.TONE_DTMF_7)
-                    .put('8', ToneGenerator.TONE_DTMF_8)
-                    .put('9', ToneGenerator.TONE_DTMF_9)
-                    .put('0', ToneGenerator.TONE_DTMF_0)
-                    .put('#', ToneGenerator.TONE_DTMF_P)
-                    .put('*', ToneGenerator.TONE_DTMF_S)
-                    .build();
-
     /** Generator used to actually play the tone. */
     private ToneGenerator mToneGenerator;
 
@@ -85,8 +66,9 @@
             Log.d(this, "playTone: mToneGenerator == null, %c.", c);
         } else {
             Log.d(this, "starting local tone: %c.", c);
-            if (TONE_MAP.containsKey(c)) {
-                mToneGenerator.startTone(TONE_MAP.get(c), -1 /* toneDuration */);
+            int tone = getMappedTone(c);
+            if (tone != ToneGenerator.TONE_UNKNOWN) {
+                mToneGenerator.startTone(tone, -1 /* toneDuration */);
             }
         }
     }
@@ -160,4 +142,15 @@
             }
         }
     }
+
+    private static final int getMappedTone(char digit) {
+        if (digit >= '0' && digit <= '9') {
+            return ToneGenerator.TONE_DTMF_0 + digit - '0';
+        } else if (digit == '#') {
+            return ToneGenerator.TONE_DTMF_P;
+        } else if (digit == '*') {
+            return ToneGenerator.TONE_DTMF_S;
+        }
+        return ToneGenerator.TONE_UNKNOWN;
+    }
 }
diff --git a/src/com/android/server/telecom/InCallController.java b/src/com/android/server/telecom/InCallController.java
index 9498d4c..9bb2826 100644
--- a/src/com/android/server/telecom/InCallController.java
+++ b/src/com/android/server/telecom/InCallController.java
@@ -40,13 +40,13 @@
 import android.util.ArrayMap;
 
 
+
 // TODO: Needed for move to system service: import com.android.internal.R;
 import com.android.internal.telecom.IInCallService;
 import com.android.internal.util.IndentingPrintWriter;
 
-import com.google.common.collect.ImmutableCollection;
-
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -355,7 +355,7 @@
         }
 
         // Upon successful connection, send the state of the world to the service.
-        ImmutableCollection<Call> calls = CallsManager.getInstance().getCalls();
+        Collection<Call> calls = CallsManager.getInstance().getCalls();
         if (!calls.isEmpty()) {
             Log.i(this, "Adding %s calls to InCallService after onConnected: %s", calls.size(),
                     componentName);
diff --git a/src/com/android/server/telecom/ServiceBinder.java b/src/com/android/server/telecom/ServiceBinder.java
index fb747f2..4b30990 100644
--- a/src/com/android/server/telecom/ServiceBinder.java
+++ b/src/com/android/server/telecom/ServiceBinder.java
@@ -22,11 +22,10 @@
 import android.content.ServiceConnection;
 import android.os.IBinder;
 import android.os.IInterface;
+import android.text.TextUtils;
+import android.util.ArraySet;
 
 import com.android.internal.util.Preconditions;
-import com.google.common.base.Strings;
-
-import com.google.common.collect.Sets;
 
 import java.util.Collections;
 import java.util.Set;
@@ -136,7 +135,7 @@
     private final ComponentName mComponentName;
 
     /** The set of callbacks waiting for notification of the binding's success or failure. */
-    private final Set<BindCallback> mCallbacks = Sets.newHashSet();
+    private final Set<BindCallback> mCallbacks = new ArraySet<>();
 
     /** Used to bind and unbind from the service. */
     private ServiceConnection mServiceConnection;
@@ -169,7 +168,7 @@
      * @param context The context.
      */
     protected ServiceBinder(String serviceAction, ComponentName componentName, Context context) {
-        Preconditions.checkState(!Strings.isNullOrEmpty(serviceAction));
+        Preconditions.checkState(!TextUtils.isEmpty(serviceAction));
         Preconditions.checkNotNull(componentName);
 
         mContext = context;
