diff --git a/assets/quantum/res/drawable/quantum_ic_people_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_people_vd_theme_24.xml
new file mode 100644
index 0000000..c31e20d
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_people_vd_theme_24.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0"
+    android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zM8,11c1.66,0 2.99,-1.34 2.99,-3S9.66,5 8,5C6.34,5 5,6.34 5,8s1.34,3 3,3zM8,13c-2.33,0 -7,1.17 -7,3.5L1,19h14v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5zM16,13c-0.29,0 -0.62,0.02 -0.97,0.05 1.16,0.84 1.97,1.97 1.97,3.45L17,19h6v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5z"/>
+</vector>
\ No newline at end of file
diff --git a/assets/quantum/res/drawable/quantum_ic_star_vd_theme_24.xml b/assets/quantum/res/drawable/quantum_ic_star_vd_theme_24.xml
new file mode 100644
index 0000000..d937d29
--- /dev/null
+++ b/assets/quantum/res/drawable/quantum_ic_star_vd_theme_24.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0"
+    android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
+</vector>
diff --git a/java/com/android/dialer/main/impl/BottomNavBar.java b/java/com/android/dialer/main/impl/BottomNavBar.java
new file mode 100644
index 0000000..9aaa988
--- /dev/null
+++ b/java/com/android/dialer/main/impl/BottomNavBar.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2018 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.main.impl;
+
+import android.content.Context;
+import android.support.annotation.IntDef;
+import android.support.annotation.Nullable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/** Dialer Bottom Nav Bar for {@link MainActivity}. */
+final class BottomNavBar extends LinearLayout {
+
+  /** Index for each tab in the bottom nav. */
+  @Retention(RetentionPolicy.SOURCE)
+  @IntDef({
+    TabIndex.SPEED_DIAL,
+    TabIndex.HISTORY,
+    TabIndex.CONTACTS,
+    TabIndex.VOICEMAIL,
+  })
+  public @interface TabIndex {
+    int SPEED_DIAL = 0;
+    int HISTORY = 1;
+    int CONTACTS = 2;
+    int VOICEMAIL = 3;
+  }
+
+  private BottomNavItem speedDial;
+  private BottomNavItem callLog;
+  private BottomNavItem contacts;
+  private BottomNavItem voicemail;
+  private OnBottomNavTabSelectedListener listener;
+
+  public BottomNavBar(Context context, @Nullable AttributeSet attrs) {
+    super(context, attrs);
+  }
+
+  @Override
+  protected void onFinishInflate() {
+    super.onFinishInflate();
+    speedDial = findViewById(R.id.speed_dial_tab);
+    callLog = findViewById(R.id.call_log_tab);
+    contacts = findViewById(R.id.contacts_tab);
+    voicemail = findViewById(R.id.voicemail_tab);
+
+    speedDial.setup(R.string.tab_title_speed_dial, R.drawable.quantum_ic_star_vd_theme_24);
+    callLog.setup(R.string.tab_title_call_history, R.drawable.quantum_ic_history_vd_theme_24);
+    contacts.setup(R.string.tab_title_contacts, R.drawable.quantum_ic_people_vd_theme_24);
+    voicemail.setup(R.string.tab_title_voicemail, R.drawable.quantum_ic_voicemail_vd_theme_24);
+
+    speedDial.setOnClickListener(
+        v -> {
+          setSelected(speedDial);
+          listener.onSpeedDialSelected();
+        });
+    callLog.setOnClickListener(
+        v -> {
+          setSelected(callLog);
+          listener.onCallLogSelected();
+        });
+    contacts.setOnClickListener(
+        v -> {
+          setSelected(contacts);
+          listener.onContactsSelected();
+        });
+    voicemail.setOnClickListener(
+        v -> {
+          setSelected(voicemail);
+          listener.onVoicemailSelected();
+        });
+  }
+
+  private void setSelected(View view) {
+    speedDial.setSelected(view == speedDial);
+    callLog.setSelected(view == callLog);
+    contacts.setSelected(view == contacts);
+    voicemail.setSelected(view == voicemail);
+  }
+
+  /**
+   * Calls {@link View#performClick()} on the desired tab.
+   *
+   * @param tab {@link TabIndex}
+   */
+  void selectTab(@TabIndex int tab) {
+    if (tab == TabIndex.SPEED_DIAL) {
+      speedDial.performClick();
+    } else if (tab == TabIndex.HISTORY) {
+      callLog.performClick();
+    } else if (tab == TabIndex.CONTACTS) {
+      contacts.performClick();
+    } else if (tab == TabIndex.VOICEMAIL) {
+      voicemail.performClick();
+    } else {
+      throw new IllegalStateException("Invalid tab: " + tab);
+    }
+  }
+
+  void setOnTabSelectedListener(OnBottomNavTabSelectedListener listener) {
+    this.listener = listener;
+  }
+
+  /** Listener for bottom nav tab's on click events. */
+  public interface OnBottomNavTabSelectedListener {
+
+    /** Speed dial tab was clicked. */
+    void onSpeedDialSelected();
+
+    /** Call Log tab was clicked. */
+    void onCallLogSelected();
+
+    /** Contacts tab was clicked. */
+    void onContactsSelected();
+
+    /** Voicemail tab was clicked. */
+    void onVoicemailSelected();
+  }
+}
diff --git a/java/com/android/dialer/main/impl/BottomNavItem.java b/java/com/android/dialer/main/impl/BottomNavItem.java
new file mode 100644
index 0000000..14706ab
--- /dev/null
+++ b/java/com/android/dialer/main/impl/BottomNavItem.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2018 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.main.impl;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.Nullable;
+import android.support.annotation.StringRes;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+/** Navigation item in a bottom nav. */
+final class BottomNavItem extends LinearLayout {
+
+  private ImageView image;
+  private TextView text;
+
+  public BottomNavItem(Context context, @Nullable AttributeSet attrs) {
+    super(context, attrs);
+  }
+
+  @Override
+  protected void onFinishInflate() {
+    super.onFinishInflate();
+    image = findViewById(R.id.bottom_nav_item_image);
+    text = findViewById(R.id.bottom_nav_item_text);
+  }
+
+  @Override
+  public void setSelected(boolean selected) {
+    super.setSelected(selected);
+    int colorId = selected ? R.color.bottom_nav_icon_selected : R.color.bottom_nav_icon_deselected;
+    int color = getContext().getColor(colorId);
+    image.setImageTintList(ColorStateList.valueOf(color));
+    text.setTextColor(color);
+  }
+
+  void setup(@StringRes int stringRes, @DrawableRes int drawableRes) {
+    text.setText(stringRes);
+    image.setImageResource(drawableRes);
+  }
+}
diff --git a/java/com/android/dialer/main/impl/MainActivity.java b/java/com/android/dialer/main/impl/MainActivity.java
index 52b39f0..87bd8dd 100644
--- a/java/com/android/dialer/main/impl/MainActivity.java
+++ b/java/com/android/dialer/main/impl/MainActivity.java
@@ -18,19 +18,29 @@
 
 import android.content.Context;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
-import android.support.design.widget.TabLayout;
-import android.support.v4.view.ViewPager;
+import android.provider.ContactsContract.QuickContact;
+import android.support.v4.app.FragmentTransaction;
 import android.support.v7.app.AppCompatActivity;
 import android.support.v7.widget.Toolbar;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.widget.ImageView;
 import android.widget.Toast;
+import com.android.dialer.calllog.ui.NewCallLogFragment;
 import com.android.dialer.common.LogUtil;
+import com.android.dialer.contactsfragment.ContactsFragment;
+import com.android.dialer.contactsfragment.ContactsFragment.Header;
+import com.android.dialer.contactsfragment.ContactsFragment.OnContactSelectedListener;
+import com.android.dialer.main.impl.BottomNavBar.OnBottomNavTabSelectedListener;
+import com.android.dialer.speeddial.SpeedDialFragment;
+import com.android.dialer.voicemail.listui.NewVoicemailFragment;
 
 /** This is the main activity for dialer. It hosts favorites, call log, search, dialpad, etc... */
-public final class MainActivity extends AppCompatActivity implements View.OnClickListener {
+public final class MainActivity extends AppCompatActivity
+    implements View.OnClickListener, OnContactSelectedListener {
 
   /**
    * @param context Context of the application package implementing MainActivity class.
@@ -53,12 +63,9 @@
   private void initLayout() {
     findViewById(R.id.fab).setOnClickListener(this);
 
-    ViewPager pager = findViewById(R.id.pager);
-    MainPagerAdapter pagerAdapter = new MainPagerAdapter(this, getSupportFragmentManager());
-    pager.setAdapter(pagerAdapter);
-
-    TabLayout tabLayout = findViewById(R.id.tab_layout);
-    tabLayout.setupWithViewPager(pager);
+    BottomNavBar navBar = findViewById(R.id.bottom_nav_bar);
+    navBar.setOnTabSelectedListener(new MainBottomNavBarBottomNavTabListener());
+    navBar.selectTab(BottomNavBar.TabIndex.SPEED_DIAL);
 
     Toolbar toolbar = findViewById(R.id.toolbar);
     toolbar.setPopupTheme(android.R.style.Theme_Material_Light);
@@ -77,9 +84,6 @@
     if (item.getItemId() == R.id.search) {
       // open search
       return true;
-    } else if (item.getItemId() == R.id.contacts) {
-      // open contacts
-      return true;
     } else {
       // TODO(calderwoodra) handle other menu items
       return super.onOptionsItemSelected(item);
@@ -92,4 +96,107 @@
       // open dialpad search
     }
   }
+
+  @Override
+  public void onContactSelected(ImageView photo, Uri contactUri, long contactId) {
+    // TODO(calderwoodra): Add impression logging
+    QuickContact.showQuickContact(
+        this, photo, contactUri, QuickContact.MODE_LARGE, null /* excludeMimes */);
+  }
+
+  /**
+   * Implementation of {@link OnBottomNavTabSelectedListener} that handles logic for showing each of
+   * the main tabs.
+   */
+  private final class MainBottomNavBarBottomNavTabListener
+      implements OnBottomNavTabSelectedListener {
+
+    private static final String SPEED_DIAL_TAG = "speed_dial";
+    private static final String CALL_LOG_TAG = "call_log";
+    private static final String CONTACTS_TAG = "contacts";
+    private static final String VOICEMAIL_TAG = "voicemail";
+
+    @Override
+    public void onSpeedDialSelected() {
+      hideAllFragments();
+      SpeedDialFragment fragment =
+          (SpeedDialFragment) getFragmentManager().findFragmentByTag(SPEED_DIAL_TAG);
+      if (fragment == null) {
+        getFragmentManager()
+            .beginTransaction()
+            .add(R.id.fragment_container, SpeedDialFragment.newInstance(), SPEED_DIAL_TAG)
+            .commit();
+      } else {
+        getFragmentManager().beginTransaction().show(fragment).commit();
+      }
+    }
+
+    @Override
+    public void onCallLogSelected() {
+      hideAllFragments();
+      NewCallLogFragment fragment =
+          (NewCallLogFragment) getSupportFragmentManager().findFragmentByTag(CALL_LOG_TAG);
+      if (fragment == null) {
+        getSupportFragmentManager()
+            .beginTransaction()
+            .add(R.id.fragment_container, new NewCallLogFragment(), CALL_LOG_TAG)
+            .commit();
+      } else {
+        getSupportFragmentManager().beginTransaction().show(fragment).commit();
+      }
+    }
+
+    @Override
+    public void onContactsSelected() {
+      hideAllFragments();
+      ContactsFragment fragment =
+          (ContactsFragment) getFragmentManager().findFragmentByTag(CONTACTS_TAG);
+      if (fragment == null) {
+        getFragmentManager()
+            .beginTransaction()
+            .add(
+                R.id.fragment_container,
+                ContactsFragment.newInstance(Header.ADD_CONTACT),
+                CONTACTS_TAG)
+            .commit();
+      } else {
+        getFragmentManager().beginTransaction().show(fragment).commit();
+      }
+    }
+
+    @Override
+    public void onVoicemailSelected() {
+      hideAllFragments();
+      NewVoicemailFragment fragment =
+          (NewVoicemailFragment) getSupportFragmentManager().findFragmentByTag(VOICEMAIL_TAG);
+      if (fragment == null) {
+        getSupportFragmentManager()
+            .beginTransaction()
+            .add(R.id.fragment_container, new NewVoicemailFragment(), VOICEMAIL_TAG)
+            .commit();
+      } else {
+        getSupportFragmentManager().beginTransaction().show(fragment).commit();
+      }
+    }
+
+    private void hideAllFragments() {
+      FragmentTransaction supportTransaction = getSupportFragmentManager().beginTransaction();
+      if (getSupportFragmentManager().findFragmentByTag(CALL_LOG_TAG) != null) {
+        supportTransaction.hide(getSupportFragmentManager().findFragmentByTag(CALL_LOG_TAG));
+      }
+      if (getSupportFragmentManager().findFragmentByTag(VOICEMAIL_TAG) != null) {
+        supportTransaction.hide(getSupportFragmentManager().findFragmentByTag(VOICEMAIL_TAG));
+      }
+      supportTransaction.commit();
+
+      android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
+      if (getFragmentManager().findFragmentByTag(SPEED_DIAL_TAG) != null) {
+        transaction.hide(getFragmentManager().findFragmentByTag(SPEED_DIAL_TAG));
+      }
+      if (getFragmentManager().findFragmentByTag(CONTACTS_TAG) != null) {
+        transaction.hide(getFragmentManager().findFragmentByTag(CONTACTS_TAG));
+      }
+      transaction.commit();
+    }
+  }
 }
diff --git a/java/com/android/dialer/main/impl/res/layout/bottom_nav_bar_layout.xml b/java/com/android/dialer/main/impl/res/layout/bottom_nav_bar_layout.xml
new file mode 100644
index 0000000..67c1a20
--- /dev/null
+++ b/java/com/android/dialer/main/impl/res/layout/bottom_nav_bar_layout.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+<com.android.dialer.main.impl.BottomNavBar
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:background="@color/dialer_theme_color"
+    android:elevation="8dp">
+
+  <include
+      android:id="@+id/speed_dial_tab"
+      android:layout_width="0dp"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      layout="@layout/bottom_nav_item"/>
+
+  <include
+      android:id="@+id/call_log_tab"
+      android:layout_width="0dp"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      layout="@layout/bottom_nav_item"/>
+
+  <include
+      android:id="@+id/contacts_tab"
+      android:layout_width="0dp"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      layout="@layout/bottom_nav_item"/>
+
+  <include
+      android:id="@+id/voicemail_tab"
+      android:layout_width="0dp"
+      android:layout_height="wrap_content"
+      android:layout_weight="1"
+      layout="@layout/bottom_nav_item"/>
+</com.android.dialer.main.impl.BottomNavBar>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/res/layout/bottom_nav_item.xml b/java/com/android/dialer/main/impl/res/layout/bottom_nav_item.xml
new file mode 100644
index 0000000..28ad964
--- /dev/null
+++ b/java/com/android/dialer/main/impl/res/layout/bottom_nav_item.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2018 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
+  -->
+<com.android.dialer.main.impl.BottomNavItem
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:minWidth="80dp"
+    android:paddingTop="8dp"
+    android:paddingBottom="10dp"
+    android:paddingStart="12dp"
+    android:paddingEnd="12dp"
+    android:gravity="center"
+    android:background="?android:selectableItemBackgroundBorderless">
+
+  <ImageView
+      android:id="@+id/bottom_nav_item_image"
+      android:layout_width="24dp"
+      android:layout_height="24dp"
+      android:layout_marginBottom="6dp"/>
+
+  <TextView
+      android:id="@+id/bottom_nav_item_text"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:textSize="12sp"/>
+</com.android.dialer.main.impl.BottomNavItem>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/res/layout/main_activity.xml b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
index 73b2eae..969bbe4 100644
--- a/java/com/android/dialer/main/impl/res/layout/main_activity.xml
+++ b/java/com/android/dialer/main/impl/res/layout/main_activity.xml
@@ -14,55 +14,44 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<FrameLayout
+<RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/container"
+    android:id="@+id/root_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-  <TextView
+  <android.support.v7.widget.Toolbar
+      android:id="@+id/toolbar"
+      android:layout_height="wrap_content"
+      android:layout_width="match_parent"
+      android:minHeight="?attr/actionBarSize"
+      android:background="@color/dialer_theme_color"
+      app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
+      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
+
+  <FrameLayout
+      android:id="@+id/fragment_container"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
-      android:textColor="@android:color/secondary_text_dark_nodisable"/>
+      android:layout_below="@+id/toolbar"
+      android:layout_above="@+id/bottom_nav_bar"/>
 
-  <android.support.design.widget.CoordinatorLayout
+  <include
+      android:id="@+id/bottom_nav_bar"
+      layout="@layout/bottom_nav_bar_layout"
       android:layout_width="match_parent"
-      android:layout_height="match_parent">
+      android:layout_height="wrap_content"
+      android:layout_gravity="bottom"
+      android:layout_alignParentBottom="true"/>
 
-    <android.support.design.widget.AppBarLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:theme="@style/AppBarTheme">
-
-      <android.support.v7.widget.Toolbar
-          android:id="@+id/toolbar"
-          android:layout_height="wrap_content"
-          android:layout_width="match_parent"
-          android:background="?android:attr/colorPrimary"/>
-
-      <android.support.design.widget.TabLayout
-          android:id="@+id/tab_layout"
-          android:layout_width="match_parent"
-          android:layout_height="wrap_content"
-          android:background="?android:attr/colorPrimary"
-          app:tabIndicatorColor="?android:attr/colorAccent"
-          app:layout_scrollFlags="enterAlwaysCollapsed"/>
-    </android.support.design.widget.AppBarLayout>
-
-    <android.support.v4.view.ViewPager
-        android:id="@+id/pager"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
-
-    <android.support.design.widget.FloatingActionButton
-        android:id="@+id/fab"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="bottom|end"
-        android:layout_margin="16dp"
-        android:src="@drawable/quantum_ic_dialpad_white_24"
-        app:backgroundTint="?android:attr/colorAccent"/>
-  </android.support.design.widget.CoordinatorLayout>
-</FrameLayout>
\ No newline at end of file
+  <android.support.design.widget.FloatingActionButton
+      android:id="@+id/fab"
+      android:layout_width="wrap_content"
+      android:layout_height="wrap_content"
+      android:layout_above="@+id/bottom_nav_bar"
+      android:layout_alignParentEnd="true"
+      android:layout_margin="16dp"
+      android:src="@drawable/quantum_ic_dialpad_white_24"
+      app:backgroundTint="?android:attr/colorAccent"/>
+</RelativeLayout>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/res/menu/main_menu.xml b/java/com/android/dialer/main/impl/res/menu/main_menu.xml
index 09bcbf8..08d711e 100644
--- a/java/com/android/dialer/main/impl/res/menu/main_menu.xml
+++ b/java/com/android/dialer/main/impl/res/menu/main_menu.xml
@@ -24,13 +24,6 @@
       app:showAsAction="always"/>
 
   <item
-      android:id="@+id/contacts"
-      android:icon="@drawable/quantum_ic_person_white_24"
-      android:title="@string/contacts"
-      android:contentDescription="@string/description_contacts"
-      app:showAsAction="always"/>
-
-  <item
       android:id="@+id/call_history"
       android:title="@string/tab_title_call_history"
       app:showAsAction="collapseActionView"/>
diff --git a/java/com/android/dialer/main/impl/res/values/colors.xml b/java/com/android/dialer/main/impl/res/values/colors.xml
new file mode 100644
index 0000000..3d34865
--- /dev/null
+++ b/java/com/android/dialer/main/impl/res/values/colors.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2017 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
+  -->
+<resources>
+  <color name="bottom_nav_icon_selected">#FFFFFF</color>
+  <color name="bottom_nav_icon_deselected">#B2FFFFFF</color>
+</resources>
diff --git a/java/com/android/dialer/main/impl/res/values/strings.xml b/java/com/android/dialer/main/impl/res/values/strings.xml
index d3eb6d7..abf44dd 100644
--- a/java/com/android/dialer/main/impl/res/values/strings.xml
+++ b/java/com/android/dialer/main/impl/res/values/strings.xml
@@ -41,6 +41,8 @@
   <string name="tab_title_speed_dial">Speed Dial</string>
   <!-- Tab text to show users their voicemails  [CHAR LIMIT=10] -->
   <string name="tab_title_voicemail">Voicemail</string>
+  <!-- Tab text to show users their contacts  [CHAR LIMIT=10] -->
+  <string name="tab_title_contacts">Contacts</string>
 
   <!-- Show users their settings [CHAR LIMIT=20] -->
   <string name="settings">Settings</string>
diff --git a/java/com/android/dialer/main/impl/res/values/styles.xml b/java/com/android/dialer/main/impl/res/values/styles.xml
index 38c5008..f94897a 100644
--- a/java/com/android/dialer/main/impl/res/values/styles.xml
+++ b/java/com/android/dialer/main/impl/res/values/styles.xml
@@ -20,9 +20,4 @@
     <item name="android:colorPrimaryDark">@color/dialer_theme_color_dark</item>
     <item name="android:colorAccent">@color/dialer_secondary_color</item>
   </style>
-
-  <style name="AppBarTheme" parent="Theme.AppCompat">
-    <item name="android:colorPrimary">@color/dialtacts_theme_color</item>
-    <item name="android:colorAccent">@color/dialer_secondary_color</item>
-  </style>
 </resources>
diff --git a/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java b/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java
index e9e3e32..40d0384 100644
--- a/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java
+++ b/java/com/android/dialer/speeddial/StrequentContactsCursorLoader.java
@@ -26,7 +26,7 @@
 import android.provider.ContactsContract.Contacts;
 
 /** Cursor Loader for strequent contacts. */
-final class StrequentContactsCursorLoader extends CursorLoader {
+public final class StrequentContactsCursorLoader extends CursorLoader {
 
   static final int PHONE_ID = 0;
   static final int PHONE_DISPLAY_NAME = 1;
@@ -41,7 +41,7 @@
   static final int PHONE_PINNED = 10;
   static final int PHONE_CONTACT_ID = 11;
 
-  static final String[] PHONE_PROJECTION =
+  public static final String[] PHONE_PROJECTION =
       new String[] {
         Phone._ID, // 0
         Phone.DISPLAY_NAME, // 1
diff --git a/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml b/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml
index d432f09..ecbb951 100644
--- a/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml
+++ b/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml
@@ -21,4 +21,5 @@
     android:layout_height="match_parent"
     android:paddingStart="16dp"
     android:paddingEnd="16dp"
-    android:clipToPadding="false"/>
+    android:clipToPadding="false"
+    android:background="@color/background_dialer_light"/>
