diff --git a/res/values/strings.xml b/res/values/strings.xml
index 92a29de..8030194 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -205,12 +205,6 @@
     <!-- Menu item to indicate you want to stop editing a contact and NOT save the changes you've made [CHAR LIMIT=12] -->
     <string name="menu_discard">Discard</string>
 
-    <!-- The title of the activity that edits and existing contact -->
-    <string name="editContact_title_edit">Edit contact</string>
-
-    <!-- The title of the activity that creates a new contact -->
-    <string name="editContact_title_insert">New contact</string>
-
     <!-- The label describing the phonetic pronunciation/reading of a contact name [CHAR LIMIT=20] -->
     <string name="label_phonetic_name">Phonetic</string>
 
@@ -1603,12 +1597,6 @@
     <!-- Label to instruct the user to type in a contact's name to add the contact as a member of the current group. [CHAR LIMIT=64] -->
     <string name="enter_contact_name">Enter contact\'s name</string>
 
-    <!-- The title of the activity that creates a new group [CHAR LIMIT=NONE] -->
-    <string name="editGroup_title_insert">New group</string>
-
-    <!-- The title of the activity that edits an existing group [CHAR LIMIT=NONE] -->
-    <string name="editGroup_title_edit">Edit group</string>
-
     <!-- Button to view the updates from the current group on the group detail page [CHAR LIMIT=20] -->
     <string name="view_updates_from_group">View updates</string>
 
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 54ea05f..2936110 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -171,11 +171,6 @@
         }
 
         @Override
-        public void setTitleTo(int resourceId) {
-            setTitle(resourceId);
-        }
-
-        @Override
         public void onEditOtherContactRequested(
                 Uri contactLookupUri, ArrayList<ContentValues> values) {
             Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
diff --git a/src/com/android/contacts/activities/GroupEditorActivity.java b/src/com/android/contacts/activities/GroupEditorActivity.java
index 80653d2..e1c878d 100644
--- a/src/com/android/contacts/activities/GroupEditorActivity.java
+++ b/src/com/android/contacts/activities/GroupEditorActivity.java
@@ -163,11 +163,6 @@
             }
             finish();
         }
-
-        @Override
-        public void onTitleLoaded(int resourceId) {
-            setTitle(resourceId);
-        }
     };
 
     @Override
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 4126425..412efab 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -317,11 +317,8 @@
 
         if (!hasIncomingState) {
             if (Intent.ACTION_EDIT.equals(mAction)) {
-                if (mListener != null) mListener.setTitleTo(R.string.editContact_title_edit);
                 getLoaderManager().initLoader(LOADER_DATA, null, mDataLoaderListener);
             } else if (Intent.ACTION_INSERT.equals(mAction)) {
-                if (mListener != null) mListener.setTitleTo(R.string.editContact_title_insert);
-
                 final Account account = mIntentExtras == null ? null :
                         (Account) mIntentExtras.getParcelable(Intents.Insert.ACCOUNT);
                 final String dataSet = mIntentExtras == null ? null :
@@ -1119,11 +1116,6 @@
         void onReverted();
 
         /**
-         * Set the Title (e.g. of the Activity)
-         */
-        void setTitleTo(int resourceId);
-
-        /**
          * Contact was saved and the Fragment can now be closed safely.
          */
         void onSaveFinished(Intent resultIntent);
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index f62a671..e8122ef 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -104,13 +104,6 @@
         void onReverted();
 
         /**
-         * Title has been determined.
-         *
-         * TODO Remove this.  No longer needed with the latest visual spec.
-         */
-        void onTitleLoaded(int resourceId);
-
-        /**
          * Contact was saved and the Fragment can now be closed safely.
          */
         void onSaveFinished(int resultCode, Intent resultIntent);
@@ -257,13 +250,6 @@
             throw new IllegalArgumentException("Unknown Action String " + mAction +
                     ". Only support " + Intent.ACTION_EDIT + " or " + Intent.ACTION_INSERT);
         }
-
-        // Let the activity update the title.
-        if (mListener != null) {
-            mListener.onTitleLoaded(Intent.ACTION_EDIT.equals(mAction)
-                    ? R.string.editGroup_title_edit
-                    : R.string.editGroup_title_insert);
-        }
     }
 
     private void startGroupMetaDataLoader() {
