diff --git a/src/com/android/dialer/compat/telecom/TelecomManagerCompat.java b/src/com/android/dialer/compat/telecom/TelecomManagerCompat.java
new file mode 100644
index 0000000..05055a4
--- /dev/null
+++ b/src/com/android/dialer/compat/telecom/TelecomManagerCompat.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.dialer.compat.telecom;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.TelephonyManager;
+
+import com.android.contacts.common.compat.CompatUtils;
+
+/**
+ * Compatibility class for {@link android.telecom.TelecomManager}
+ */
+public class TelecomManagerCompat {
+
+    /**
+     * Places a new outgoing call to the provided address using the system telecom service with
+     * the specified intent.
+     *
+     * @param activity {@link Activity} used to start another activity for the given intent
+     * @param telecomManager the {@link TelecomManager} used to place a call, if possible
+     * @param intent the intent for the call
+     * @throws NullPointerException if activity, telecomManager, or intent are null
+     */
+    public static void placeCall(Activity activity, TelecomManager telecomManager, Intent intent) {
+        if (CompatUtils.isMarshmallowCompatible()) {
+            telecomManager.placeCall(intent.getData(), intent.getExtras());
+            return;
+        }
+        activity.startActivityForResult(intent, 0);
+    }
+
+    /**
+     * Return the line 1 phone number for given phone account.
+     *
+     * @param telecomManager the {@link TelecomManager} to use in the event that
+     *    {@link TelecomManager#getLine1Number(PhoneAccountHandle)} is available
+     * @param telephonyManager the {@link TelephonyManager} to use if TelecomManager#getLine1Number
+     *    is unavailable
+     * @param phoneAccountHandle the phoneAccountHandle upon which to check the line one number
+     * @return the line one number
+     * @throws NullPointerException if telecomManager or telephonyManager are null
+     */
+    public static String getLine1Number(TelecomManager telecomManager,
+            TelephonyManager telephonyManager, @Nullable PhoneAccountHandle phoneAccountHandle) {
+        if (CompatUtils.isMarshmallowCompatible()) {
+            return telecomManager.getLine1Number(phoneAccountHandle);
+        }
+        return telephonyManager.getLine1Number();
+    }
+
+    /**
+     * Return whether a given phone number is the configured voicemail number for a
+     * particular phone account.
+     *
+     * @param telecomManager the {@link TelecomManager} to use
+     * @param accountHandle The handle for the account to check the voicemail number against
+     * @param number The number to look up.
+     * @throws NullPointerException if telecomManager is null
+     */
+    public static boolean isVoiceMailNumber(TelecomManager telecomManager,
+            @Nullable PhoneAccountHandle accountHandle, @Nullable String number) {
+        if (CompatUtils.isMarshmallowCompatible()) {
+            return telecomManager.isVoiceMailNumber(accountHandle, number);
+        }
+        return PhoneNumberUtils.isVoiceMailNumber(number);
+    }
+}
diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java
index 3d5c257..95d6a81 100644
--- a/src/com/android/dialer/util/DialerUtils.java
+++ b/src/com/android/dialer/util/DialerUtils.java
@@ -87,8 +87,7 @@
                     intent.putExtra(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras);
                 }
 
-                final boolean hasCallPermission = TelecomUtil.placeCall(context, intent.getData(),
-                        intent.getExtras());
+                final boolean hasCallPermission = TelecomUtil.placeCall((Activity) context, intent);
                 if (!hasCallPermission) {
                     // TODO: Make calling activity show request permission dialog and handle
                     // callback results appropriately.
diff --git a/src/com/android/dialer/util/TelecomUtil.java b/src/com/android/dialer/util/TelecomUtil.java
index a617af6..bc6b32d 100644
--- a/src/com/android/dialer/util/TelecomUtil.java
+++ b/src/com/android/dialer/util/TelecomUtil.java
@@ -17,10 +17,11 @@
 package com.android.dialer.util;
 
 import android.Manifest;
+import android.app.Activity;
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.net.Uri;
-import android.os.Bundle;
 import android.provider.CallLog.Calls;
 import android.support.v4.content.ContextCompat;
 import android.telecom.PhoneAccountHandle;
@@ -32,6 +33,7 @@
 
 import com.android.contacts.common.compat.CompatUtils;
 import com.android.dialer.compat.DialerCompatUtils;
+import com.android.dialer.compat.telecom.TelecomManagerCompat;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -153,16 +155,16 @@
     /**
      * Tries to place a call using the {@link TelecomManager}.
      *
-     * @param context a valid context.
+     * @param activity a valid activity.
      * @param address Handle to call.
      * @param extras Bundle of extras to attach to the call intent.
      *
      * @return {@code true} if we successfully attempted to place the call, {@code false} if it
      *         failed due to a permission check.
      */
-    public static boolean placeCall(Context context, Uri address, Bundle extras) {
-        if (hasCallPhonePermission(context)) {
-            getTelecomManager(context).placeCall(address, extras);
+    public static boolean placeCall(Activity activity, Intent intent) {
+        if (hasCallPhonePermission(activity)) {
+            TelecomManagerCompat.placeCall(activity, getTelecomManager(activity), intent);
             return true;
         }
         return false;
