diff --git a/res/layout/ownerinfo.xml b/res/layout/ownerinfo.xml
index d33f156..35f04d8 100644
--- a/res/layout/ownerinfo.xml
+++ b/res/layout/ownerinfo.xml
@@ -37,10 +37,20 @@
                 android:background="#ff404040"
                 />
 
+            <EditText android:id="@+id/owner_info_nickname"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="8dip"
+                android:gravity="top"
+                android:hint="@string/user_nickname"
+                android:inputType="textCapWords"
+            />
+
             <CheckBox android:id="@+id/show_owner_info_on_lockscreen_checkbox"
                 android:layout_width="match_parent"
                 android:layout_height="64dip"
                 android:gravity="center_vertical"
+                android:layout_marginTop="8dip"
                 android:text="@string/show_owner_info_on_lockscreen_label"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:textColor="?android:attr/textColorSecondary"
diff --git a/res/layout/preference_user_delete_widget.xml b/res/layout/preference_user_delete_widget.xml
index 57c240f..6dc6a79 100644
--- a/res/layout/preference_user_delete_widget.xml
+++ b/res/layout/preference_user_delete_widget.xml
@@ -20,6 +20,13 @@
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:orientation="horizontal">
+    <View
+        android:id="@+id/divider_manage"
+        android:layout_width="2dip"
+        android:layout_height="match_parent"
+        android:layout_marginTop="5dip"
+        android:layout_marginBottom="5dip"
+        android:background="@android:drawable/divider_horizontal_dark" />
     <ImageView
         android:id="@+id/manage_user"
         android:layout_width="wrap_content"
@@ -31,6 +38,7 @@
         android:layout_gravity="center"
         android:background="?android:attr/selectableItemBackground" />
     <View
+        android:id="@+id/divider_delete"
         android:layout_width="2dip"
         android:layout_height="match_parent"
         android:layout_marginTop="5dip"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6f43881..665959a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4324,20 +4324,20 @@
     <string name="user_settings_title">Users</string>
     <!-- User settings section title for details about you [CHAR LIMIT=25] -->
     <string name="user_you_section">You</string>
-    <!-- User settings trusted user list section header [CHAR LIMIT=30] -->
-    <string name="user_trusted_list_title">Trusted users</string>
-    <!-- User settings limited user list section header [CHAR LIMIT=30] -->
+    <!-- User settings trusted user list section header [CHAR LIMIT=40] -->
+    <string name="user_trusted_list_title">Users</string>
+    <!-- User settings limited user list section header [CHAR LIMIT=40] -->
     <string name="user_limited_list_title">Limited users</string>
-    <!-- User settings add user menu [CHAR LIMIT=20] -->
+    <!-- User settings add user menu [CHAR LIMIT=35] -->
     <string name="user_add_user_menu">Add user</string>
-    <!-- User settings add restricted user label [CHAR LIMIT=20] -->
+    <!-- User settings add restricted user label [CHAR LIMIT=35] -->
     <string name="user_add_restricted">Add limited user</string>
     <!-- User settings summary for add restricted user [CHAR LIMIT=100] -->
     <string name="user_add_restricted_summary">Limited users can only access the apps and content you select</string>
-    <!-- User settings add user label [CHAR LIMIT=20] -->
-    <string name="user_add_trusted">Add trusted user</string>
+    <!-- User settings add user label [CHAR LIMIT=35] -->
+    <string name="user_add_trusted">Add standard user</string>
     <!-- User settings summary for add trusted user [CHAR LIMIT=100] -->
-    <string name="user_add_trusted_summary">Trusted users have no restrictions</string>
+    <string name="user_add_trusted_summary">Standard users have their own apps and content</string>
 
     <!-- User summary to indicate that user is currently active in the background [CHAR LIMIT=100] -->
     <string name="user_summary_active">Active</string>
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 2e73e9e..6c6ad92 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -19,20 +19,15 @@
         android:title="@string/user_settings_title">
 
     <PreferenceCategory
-            android:key="user_you"
-            android:title="@string/user_you_section"/>
+            android:key="trusted_user_list"
+            android:title="@string/user_trusted_list_title">
+    </PreferenceCategory>
+
     <Preference
-            android:key="user_me"
-            android:summary="@string/user_owner" />
-    <com.android.settings.SelectableEditTextPreference
-            android:key="user_nickname"
-            android:title="@string/user_nickname"
-            android:icon="@drawable/empty_icon" />
-    <Preference
-            android:key="user_owner_info"
-            android:title="@string/owner_info_settings_title"
-            android:icon="@drawable/empty_icon"
-            android:fragment="com.android.settings.OwnerInfoSettings" />
+            android:key="user_add_trusted"
+            android:title="@string/user_add_trusted"
+            android:summary="@string/user_add_trusted_summary"
+            android:icon="@drawable/ic_menu_add" />
 
     <PreferenceCategory
             android:key="limited_user_list"
@@ -45,14 +40,4 @@
             android:summary="@string/user_add_restricted_summary"
             android:icon="@drawable/ic_menu_add" />
 
-    <PreferenceCategory
-            android:key="trusted_user_list"
-            android:title="@string/user_trusted_list_title">
-    </PreferenceCategory>
-
-    <Preference
-            android:key="user_add_trusted"
-            android:title="@string/user_add_trusted"
-            android:summary="@string/user_add_trusted_summary"
-            android:icon="@drawable/ic_menu_add" />
 </PreferenceScreen>
diff --git a/src/com/android/settings/OwnerInfoSettings.java b/src/com/android/settings/OwnerInfoSettings.java
index 0a83f1a..51d166c 100644
--- a/src/com/android/settings/OwnerInfoSettings.java
+++ b/src/com/android/settings/OwnerInfoSettings.java
@@ -20,6 +20,9 @@
 import android.content.ContentResolver;
 import android.os.Bundle;
 import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -31,11 +34,25 @@
 import com.android.internal.widget.LockPatternUtils;
 
 public class OwnerInfoSettings extends Fragment {
+
+    public static final String EXTRA_SHOW_NICKNAME = "show_nickname";
+
     private View mView;
     private CheckBox mCheckbox;
-    private EditText mEditText;
     private int mUserId;
     private LockPatternUtils mLockPatternUtils;
+    private EditText mOwnerInfo;
+    private EditText mNickname;
+    private boolean mShowNickname;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Bundle args = getArguments();
+        if (args != null && args.containsKey(EXTRA_SHOW_NICKNAME)) {
+            mShowNickname = args.getBoolean(EXTRA_SHOW_NICKNAME);
+        }
+    }
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
@@ -52,9 +69,16 @@
         String info = mLockPatternUtils.getOwnerInfo(mUserId);
         boolean enabled = mLockPatternUtils.isOwnerInfoEnabled();
         mCheckbox = (CheckBox) mView.findViewById(R.id.show_owner_info_on_lockscreen_checkbox);
-        mEditText = (EditText) mView.findViewById(R.id.owner_info_edit_text);
-        mEditText.setText(info);
-        mEditText.setEnabled(enabled);
+        mOwnerInfo = (EditText) mView.findViewById(R.id.owner_info_edit_text);
+        mOwnerInfo.setText(info);
+        mOwnerInfo.setEnabled(enabled);
+        mNickname = (EditText) mView.findViewById(R.id.owner_info_nickname);
+        if (!mShowNickname) {
+            mNickname.setVisibility(View.GONE);
+        } else {
+            mNickname.setText(UserManager.get(getActivity()).getUserName());
+            mNickname.setSelected(true);
+        }
         mCheckbox.setChecked(enabled);
         if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
             mCheckbox.setText(R.string.show_user_info_on_lockscreen_label);
@@ -62,7 +86,7 @@
         mCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 mLockPatternUtils.setOwnerInfoEnabled(isChecked);
-                mEditText.setEnabled(isChecked); // disable text field if not enabled
+                mOwnerInfo.setEnabled(isChecked); // disable text field if not enabled
             }
         });
     }
@@ -70,12 +94,21 @@
     @Override
     public void onPause() {
         super.onPause();
-        saveToDb();
+        saveChanges();
     }
 
-    void saveToDb() {
-        String info = mEditText.getText().toString();
+    void saveChanges() {
+        ContentResolver res = getActivity().getContentResolver();
+        String info = mOwnerInfo.getText().toString();
         mLockPatternUtils.setOwnerInfo(info, mUserId);
+        if (mShowNickname) {
+            String oldName = UserManager.get(getActivity()).getUserName();
+            CharSequence newName = mNickname.getText();
+            if (!TextUtils.isEmpty(newName) && !newName.equals(oldName)) {
+                UserManager.get(getActivity()).setUserName(UserHandle.myUserId(),
+                        newName.toString());
+            }
+        }
     }
 
 }
diff --git a/src/com/android/settings/users/UserPreference.java b/src/com/android/settings/users/UserPreference.java
index 2894bf9..9f53aa5 100644
--- a/src/com/android/settings/users/UserPreference.java
+++ b/src/com/android/settings/users/UserPreference.java
@@ -36,50 +36,58 @@
     private int mSerialNumber = -1;
     private int mUserId = USERID_UNKNOWN;
     private boolean mRestricted;
+    private boolean mSelf;
     static final int SETTINGS_ID = R.id.manage_user;
     static final int DELETE_ID = R.id.trash_user;
 
     public UserPreference(Context context, AttributeSet attrs) {
-        this(context, attrs, USERID_UNKNOWN, false, null, null);
+        this(context, attrs, USERID_UNKNOWN, null, null);
     }
 
     UserPreference(Context context, AttributeSet attrs, int userId,
-            boolean showOptions, OnClickListener deleteListener,
-            OnClickListener settingsListener) {
+            OnClickListener settingsListener,
+            OnClickListener deleteListener) {
         super(context, attrs);
-        if (showOptions) {
+        if (deleteListener != null || settingsListener != null) {
             setWidgetLayoutResource(R.layout.preference_user_delete_widget);
-            mDeleteClickListener = deleteListener;
-            mSettingsClickListener = settingsListener;
         }
+        mDeleteClickListener = deleteListener;
+        mSettingsClickListener = settingsListener;
         mUserId = userId;
-        if (mUserId > UserHandle.USER_OWNER) {
-            mRestricted = ((UserManager) getContext().getSystemService(Context.USER_SERVICE))
-                    .getUserInfo(mUserId).isRestricted();
-        }
-        //setSummary(mRestricted ? R.string.user_limited : R.string.user_trusted);
     }
 
     @Override
     protected void onBindView(View view) {
+        View deleteDividerView = view.findViewById(R.id.divider_delete);
+        View manageDividerView = view.findViewById(R.id.divider_manage);
         View deleteView = view.findViewById(R.id.trash_user);
         if (deleteView != null) {
-            deleteView.setOnClickListener(mDeleteClickListener);
-            deleteView.setTag(this);
-        }
-        View settingsView = view.findViewById(R.id.manage_user);
-        if (settingsView != null) {
-            if (mRestricted) {
-                settingsView.setOnClickListener(mSettingsClickListener);
-                settingsView.setTag(this);
+            if (mDeleteClickListener != null) {
+                deleteView.setOnClickListener(mDeleteClickListener);
+                deleteView.setTag(this);
             } else {
-                settingsView.setVisibility(View.INVISIBLE);
+                deleteView.setVisibility(View.GONE);
+                deleteDividerView.setVisibility(View.GONE);
+            }
+        }
+        View manageView = view.findViewById(R.id.manage_user);
+        if (manageView != null) {
+            if (mSettingsClickListener != null) {
+                manageView.setOnClickListener(mSettingsClickListener);
+                manageView.setTag(this);
+                if (mDeleteClickListener != null) {
+                    manageDividerView.setVisibility(View.GONE);
+                }
+            } else {
+                manageView.setVisibility(View.GONE);
+                manageDividerView.setVisibility(View.GONE);
             }
         }
         super.onBindView(view);
     }
 
-    public int getSerialNumber() {
+    private int getSerialNumber() {
+        if (mUserId == UserHandle.myUserId()) return Integer.MIN_VALUE;
         if (mSerialNumber < 0) {
             // If the userId is unknown
             if (mUserId == USERID_UNKNOWN) return Integer.MAX_VALUE;
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index a0e4c35..1f1815e 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -31,8 +31,6 @@
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
-import android.graphics.Color;
-import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
 import android.os.Bundle;
@@ -43,12 +41,10 @@
 import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
-import android.preference.PreferenceScreen;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceGroup;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
-import android.text.InputType;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.Menu;
@@ -57,11 +53,11 @@
 import android.view.View;
 import android.view.View.OnClickListener;
 
+import com.android.settings.OwnerInfoSettings;
 import com.android.settings.R;
 import com.android.settings.SelectableEditTextPreference;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
-import com.android.settings.SettingsPreferenceFragment.SettingsDialogFragment;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -77,7 +73,6 @@
     /** UserId of the user that was just added */
     private static final String SAVE_ADDING_USER = "adding_user";
 
-    private static final String KEY_USER_NICKNAME = "user_nickname";
     private static final String KEY_TRUSTED_USER_LIST = "trusted_user_list";
     private static final String KEY_LIMITED_USER_LIST = "limited_user_list";
     private static final String KEY_USER_ME = "user_me";
@@ -179,21 +174,13 @@
         addPreferencesFromResource(R.xml.user_settings);
         mTrustedUserListCategory = (PreferenceGroup) findPreference(KEY_TRUSTED_USER_LIST);
         mLimitedUserListCategory = (PreferenceGroup) findPreference(KEY_LIMITED_USER_LIST);
-        mMePreference = (Preference) findPreference(KEY_USER_ME);
+        mMePreference = new UserPreference(getActivity(), null, UserHandle.myUserId(),
+                mUserManager.isLinkedUser() ? null : this, null);
+        mMePreference.setKey(KEY_USER_ME);
         mMePreference.setOnPreferenceClickListener(this);
-        if (!mIsOwner) {
-            mMePreference.setSummary(null);
+        if (mIsOwner) {
+            mMePreference.setSummary(R.string.user_owner);
         }
-        Preference ownerInfo = findPreference("user_owner_info");
-        if (ownerInfo != null && !mIsOwner) {
-            ownerInfo.setTitle(R.string.user_info_settings_title);
-        }
-        mNicknamePreference = (SelectableEditTextPreference) findPreference(KEY_USER_NICKNAME);
-        mNicknamePreference.setOnPreferenceChangeListener(this);
-        mNicknamePreference.getEditText().setInputType(
-                InputType.TYPE_TEXT_VARIATION_NORMAL | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
-        mNicknamePreference.setInitialSelectionMode(
-                SelectableEditTextPreference.SELECTION_SELECT_ALL);
         mAddRestrictedUser = findPreference(KEY_ADD_RESTRICTED_USER);
         mAddTrustedUser = findPreference(KEY_ADD_TRUSTED_USER);
         mAddRestrictedUser.setOnPreferenceClickListener(this);
@@ -269,6 +256,9 @@
                     assignProfilePhoto(user);
                 }
                 String profileName = getProfileName();
+                if (profileName == null) {
+                    profileName = user.name;
+                }
                 return profileName;
             }
         }.execute();
@@ -341,17 +331,28 @@
     }
 
     private void onManageUserClicked(int userId, boolean newUser) {
-        Bundle extras = new Bundle();
-        extras.putInt(AppRestrictionsFragment.EXTRA_USER_ID, userId);
-        extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
-        String title = getResources().getString(R.string.user_new_user_name);
-        if (userId > UserHandle.USER_OWNER) {
-            title = mUserManager.getUserInfo(userId).name;
+        UserInfo info = mUserManager.getUserInfo(userId);
+        if (info.isRestricted() && mIsOwner) {
+            Bundle extras = new Bundle();
+            extras.putInt(AppRestrictionsFragment.EXTRA_USER_ID, userId);
+            extras.putBoolean(AppRestrictionsFragment.EXTRA_NEW_USER, newUser);
+            String title = getResources().getString(R.string.user_new_user_name);
+            if (userId > UserHandle.USER_OWNER) {
+                title = mUserManager.getUserInfo(userId).name;
+            }
+            ((PreferenceActivity) getActivity()).startPreferencePanel(
+                    AppRestrictionsFragment.class.getName(),
+                    extras, 0, title,
+                    null, 0);
+        } else if (info.id == UserHandle.myUserId()) {
+            // Jump to owner info panel
+            Bundle extras = new Bundle();
+            extras.putBoolean(OwnerInfoSettings.EXTRA_SHOW_NICKNAME, true);
+            ((PreferenceActivity) getActivity()).startPreferencePanel(
+                    OwnerInfoSettings.class.getName(),
+                    extras, R.string.user_info_settings_title, null,
+                    null, 0);
         }
-        ((PreferenceActivity) getActivity()).startPreferencePanel(
-                AppRestrictionsFragment.class.getName(),
-                extras, 0, title,
-                null, 0);
     }
 
     private void onUserCreated(int userId) {
@@ -510,16 +511,17 @@
         mLimitedUserListCategory.removeAll();
         mLimitedUserListCategory.setOrderingAsAdded(false);
 
+        mTrustedUserListCategory.addPreference(mMePreference);
+
         final ArrayList<Integer> missingIcons = new ArrayList<Integer>();
         for (UserInfo user : users) {
             Preference pref;
             if (user.id == UserHandle.myUserId()) {
                 pref = mMePreference;
-                mNicknamePreference.setText(user.name);
-                mNicknamePreference.setSummary(user.name);
             } else {
                 pref = new UserPreference(getActivity(), null, user.id,
-                        UserHandle.myUserId() == UserHandle.USER_OWNER, this, this);
+                        mIsOwner && user.isRestricted() ? this : null,
+                        mIsOwner ? this : null);
                 pref.setOnPreferenceClickListener(this);
                 pref.setKey("id=" + user.id);
                 if (user.isRestricted()) {
@@ -547,7 +549,7 @@
         // Add a temporary entry for the user being created
         if (mAddingUser) {
             Preference pref = new UserPreference(getActivity(), null, UserPreference.USERID_UNKNOWN,
-                    false, null, null);
+                    null, null);
             pref.setEnabled(false);
             pref.setTitle(R.string.user_new_user_name);
             pref.setIcon(encircle(R.drawable.avatar_default_1));
@@ -610,7 +612,7 @@
     }
 
     private void setPhotoId(Preference pref, UserInfo user) {
-        Bitmap bitmap = mUserIcons.get(user.id); // UserUtils.getUserIcon(mUserManager, user);
+        Bitmap bitmap = mUserIcons.get(user.id);
         if (bitmap != null) {
             pref.setIcon(encircle(bitmap));
         }
@@ -636,7 +638,13 @@
             // To make sure that it returns back here when done
             // TODO: Make this a proper API
             editProfile.putExtra("finishActivityOnSaveCompleted", true);
-            startActivity(editProfile);
+
+            // If this is a limited user, launch the user info settings instead of profile editor
+            if (mUserManager.isLinkedUser()) {
+                onManageUserClicked(UserHandle.myUserId(), false);
+            } else {
+                startActivity(editProfile);
+            }
         } else if (pref instanceof UserPreference) {
             int userId = ((UserPreference) pref).getUserId();
             // Get the latest status of the user
@@ -647,6 +655,8 @@
                 if (!isInitialized(user)) {
                     mHandler.sendMessage(mHandler.obtainMessage(
                             MESSAGE_SETUP_USER, user.id, user.serialNumber));
+                } else if (user.isRestricted()) {
+                    onManageUserClicked(user.id, false);
                 }
             }
         } else if (pref == mAddTrustedUser) {
