diff --git a/res/values/styles.xml b/res/values/styles.xml
index d4826a1..ca3f450 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -163,6 +163,7 @@
         <item name="android:textColor">@color/tab_text_color</item>
         <item name="android:textSize">@dimen/tab_text_size</item>
         <item name="android:fontFamily">@string/tab_font_family</item>
+        <item name="android:elevation">0dp</item>
         <item name="android:textStyle">bold</item>
     </style>
 
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 94e2263..8af3d13 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -134,6 +134,7 @@
     private long mPhotoRawContactId;
     private Bundle mUpdatedPhotos = new Bundle();
     private MaterialColorMapUtils.MaterialPalette mMaterialPalette;
+    private boolean mShowToastAfterSave = true;
 
     @Override
     public void onCreate(Bundle savedState) {
@@ -289,6 +290,11 @@
     }
 
     @Override
+    protected boolean showToastAfterSave() {
+        return mShowToastAfterSave;
+    }
+
+    @Override
     protected boolean doSaveAction(int saveMode) {
         // Save contact
         final Intent intent = ContactSaveService.createSaveContactIntent(mContext, mState,
@@ -352,7 +358,8 @@
             // Pass on all the data that has been entered so far
             ArrayList<ContentValues> contentValues = mState.get(0).getContentValues();
             if (contentValues != null && contentValues.size() != 0) {
-                intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contentValues);
+                intent.putParcelableArrayListExtra(
+                        ContactsContract.Intents.Insert.DATA, contentValues);
             }
             // Name must be passed separately since it is skipped in RawContactModifier.parseValues
             final StructuredNameEditorView structuredNameEditorView =
@@ -365,7 +372,10 @@
             }
             getActivity().finish();
         } else {
-            // Whatever is in the form will be saved when the hosting activity is finished
+            // Prevent a Toast from being displayed as we transition to the full editor
+            mShowToastAfterSave = false;
+
+            // Save whatever is in the form
             save(SaveMode.RELOAD);
         }
 
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index d8c20fb..a7dd5f3 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -1269,7 +1269,7 @@
             Uri contactLookupUri) {
         if (hadChanges) {
             if (saveSucceeded) {
-                if (saveMode != SaveMode.JOIN) {
+                if (saveMode != SaveMode.JOIN && showToastAfterSave()) {
                     Toast.makeText(mContext, R.string.contactSavedToast, Toast.LENGTH_SHORT).show();
                 }
             } else {
@@ -1323,6 +1323,14 @@
     }
 
     /**
+     * Whether to show a Toast message after saves have completed.
+     * Does not affect successful toasts shown after joins, which are never displayed.
+     */
+    protected boolean showToastAfterSave() {
+        return true;
+    }
+
+    /**
      * Shows a list of aggregates that can be joined into the currently viewed aggregate.
      *
      * @param contactLookupUri the fresh URI for the currently edited contact (after saving it)
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
index 209f2d3..adeb8ad 100644
--- a/src/com/android/contacts/editor/StructuredNameEditorView.java
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -196,12 +196,6 @@
         }
     }
 
-    private static void appendQueryParameter(Uri.Builder builder, String field, String value) {
-        if (!TextUtils.isEmpty(value)) {
-            builder.appendQueryParameter(field, value);
-        }
-    }
-
     /**
      * Set the display name onto the text field directly.  This does not affect the underlying
      * data structure so it is similar to the user typing the value in on the field directly.
@@ -215,10 +209,15 @@
     }
 
     /**
-     * Returns the display name from the underlying ValuesDelta.
+     * Returns the display name currently displayed in the editor.
      */
     public String getDisplayName() {
-        return getValues().getDisplayName();
+        final ValuesDelta valuesDelta = getValues();
+        if (hasShortAndLongForms() && areOptionalFieldsVisible()) {
+            return valuesDelta.getDisplayName();
+        }
+        final Map<String, String> structuredNameMap = valuesToStructuredNameMap(valuesDelta);
+        return NameConverter.structuredNameToDisplayName(getContext(), structuredNameMap);
     }
 
     @Override
