diff --git a/res/layout/support_offline_escalation_options.xml b/res/layout/support_offline_escalation_options.xml
index d1e77a3..4f6940c 100644
--- a/res/layout/support_offline_escalation_options.xml
+++ b/res/layout/support_offline_escalation_options.xml
@@ -64,6 +64,5 @@
         style="@style/SupportSecondaryButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="16dp"
         android:minHeight="48dp"/>
 </LinearLayout>
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index 7c76794..b49bb7b 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -20,6 +20,7 @@
 import android.content.pm.PackageManager;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
+import android.os.Bundle;
 import android.support.v7.widget.PopupMenu;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
@@ -45,10 +46,13 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class DashboardAdapter extends RecyclerView.Adapter<DashboardAdapter.DashboardItemHolder>
         implements View.OnClickListener {
     public static final String TAG = "DashboardAdapter";
+    private static final String STATE_SUGGESTION_LIST = "suggestion_list";
+    private static final String STATE_CATEGORY_LIST = "category_list";
     private static final int NS_SPACER = 0;
     private static final int NS_SUGGESTION = 1000;
     private static final int NS_ITEMS = 2000;
@@ -80,13 +84,20 @@
     private Condition mExpandedCondition = null;
     private SuggestionParser mSuggestionParser;
 
-    public DashboardAdapter(Context context, SuggestionParser parser) {
+    public DashboardAdapter(Context context, SuggestionParser parser, Bundle savedInstanceState,
+                List<Condition> conditions) {
         mContext = context;
         mCache = new IconCache(context);
         mSuggestionParser = parser;
+        mConditions = conditions;
 
         setHasStableIds(true);
         setShowingAll(true);
+
+        if (savedInstanceState != null) {
+            mSuggestions = savedInstanceState.getParcelableArrayList(STATE_SUGGESTION_LIST);
+            mCategories = savedInstanceState.getParcelableArrayList(STATE_CATEGORY_LIST);
+        }
     }
 
     public List<Tile> getSuggestions() {
@@ -94,8 +105,10 @@
     }
 
     public void setSuggestions(List<Tile> suggestions) {
-        mSuggestions = suggestions;
-        recountItems();
+        if (!Objects.equals(mSuggestions, suggestions)) {
+            mSuggestions = suggestions;
+            recountItems();
+        }
     }
 
     public Tile getTile(ComponentName component) {
@@ -111,6 +124,9 @@
     }
 
     public void setCategories(List<DashboardCategory> categories) {
+        if (Objects.equals(mCategories, categories)) {
+            return;
+        }
         mCategories = categories;
 
         // TODO: Better place for tinting?
@@ -133,8 +149,10 @@
     }
 
     public void setConditions(List<Condition> conditions) {
-        mConditions = conditions;
-        recountItems();
+        if (!Objects.equals(mConditions, conditions)) {
+            mConditions = conditions;
+            recountItems();
+        }
     }
 
     public boolean isShowingAll() {
@@ -422,6 +440,12 @@
         return packageName;
     }
 
+    void onSaveInstanceState(Bundle outState) {
+        outState.putParcelableArrayList(STATE_SUGGESTION_LIST, new ArrayList<Tile>(mSuggestions));
+        outState.putParcelableArrayList(STATE_CATEGORY_LIST,
+                new ArrayList<DashboardCategory>(mCategories));
+    }
+
     private static class IconCache {
 
         private final Context mContext;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index e04b255..24b5aee 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -165,6 +165,9 @@
         super.onSaveInstanceState(outState);
         if (mLayoutManager == null) return;
         outState.putInt(EXTRA_SCROLL_POSITION, mLayoutManager.findFirstVisibleItemPosition());
+        if (mAdapter != null) {
+            mAdapter.onSaveInstanceState(outState);
+        }
     }
 
     @Override
@@ -181,14 +184,13 @@
         mDashboard.setHasFixedSize(true);
         mDashboard.setListener(this);
         mDashboard.addItemDecoration(new DashboardDecorator(getContext()));
-        mAdapter = new DashboardAdapter(getContext(), mSuggestionParser);
-        mAdapter.setConditions(mConditionManager.getConditions());
+        mAdapter = new DashboardAdapter(getContext(), mSuggestionParser, bundle,
+                mConditionManager.getConditions());
         mDashboard.setAdapter(mAdapter);
         mSummaryLoader.setAdapter(mAdapter);
         ConditionAdapterUtils.addDismiss(mDashboard);
         if (DEBUG_TIMING) Log.d(TAG, "onViewCreated took "
                 + (System.currentTimeMillis() - startTime) + " ms");
-
         rebuildUI();
     }
 
diff --git a/src/com/android/settings/dashboard/SupportItemAdapter.java b/src/com/android/settings/dashboard/SupportItemAdapter.java
index a0ba57b..d0c5398 100644
--- a/src/com/android/settings/dashboard/SupportItemAdapter.java
+++ b/src/com/android/settings/dashboard/SupportItemAdapter.java
@@ -314,11 +314,13 @@
         }
         if (holder.summary1View != null) {
             holder.summary1View.setText(data.summary1);
-            holder.summary1View.setVisibility(mHasInternet ? View.VISIBLE : View.GONE);
+            holder.summary1View.setVisibility(mHasInternet && !TextUtils.isEmpty(data.summary1)
+                    ? View.VISIBLE : View.GONE);
         }
         if (holder.summary2View != null) {
             holder.summary2View.setText(data.summary2);
-            holder.summary2View.setVisibility(mHasInternet ? View.VISIBLE : View.GONE);
+            holder.summary2View.setVisibility(mHasInternet && !TextUtils.isEmpty(data.summary2)
+                    ? View.VISIBLE : View.GONE);
         }
     }
 
