diff --git a/src/com/android/settings/OwnerInfoSettings.java b/src/com/android/settings/OwnerInfoSettings.java
index 77484e4..2d44921 100644
--- a/src/com/android/settings/OwnerInfoSettings.java
+++ b/src/com/android/settings/OwnerInfoSettings.java
@@ -19,6 +19,7 @@
 import android.app.Fragment;
 import android.content.ContentResolver;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.provider.Settings;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -51,6 +52,9 @@
         mEditText.setText(info);
         mEditText.setEnabled(enabled != 0);
         mCheckbox.setChecked(enabled != 0);
+        if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
+            mCheckbox.setText(R.string.show_user_info_on_lockscreen_label);
+        }
         mCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                 Settings.Secure.putInt(res, Settings.Secure.LOCK_SCREEN_OWNER_INFO_ENABLED,
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 2af212c..a72159d 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -57,6 +57,7 @@
  */
 public class SecuritySettings extends SettingsPreferenceFragment
         implements OnPreferenceChangeListener, DialogInterface.OnClickListener {
+
     static final String TAG = "SecuritySettings";
 
     // Lock Settings
@@ -73,6 +74,7 @@
     private static final String KEY_TACTILE_FEEDBACK_ENABLED = "unlock_tactile_feedback";
     private static final String KEY_SECURITY_CATEGORY = "security_category";
     private static final String KEY_LOCK_AFTER_TIMEOUT = "lock_after_timeout";
+    private static final String KEY_OWNER_INFO_SETTINGS = "owner_info_settings";
     private static final String EXTRA_NO_WIDGET = "com.android.settings.NO_WIDGET";
     private static final String EXTRA_DEFAULT_WIDGET = "com.android.settings.DEFAULT_WIDGET";
     private static final int SET_OR_CHANGE_LOCK_METHOD_REQUEST = 123;
@@ -169,6 +171,14 @@
 
         mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER;
 
+        if (!mIsPrimary) {
+            // Rename owner info settings
+            Preference ownerInfoPref = findPreference(KEY_OWNER_INFO_SETTINGS);
+            if (ownerInfoPref != null) {
+                ownerInfoPref.setTitle(R.string.user_info_settings_title);
+            }
+        }
+
         if (mIsPrimary) {
             switch (dpm.getStorageEncryptionStatus()) {
             case DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE:
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 34209ae..d7580fe 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -723,6 +723,9 @@
         int titleRes = pref.getTitleRes();
         if (pref.getFragment().equals(WallpaperTypeSettings.class.getName())) {
             titleRes = R.string.wallpaper_settings_fragment_title;
+        } else if (pref.getFragment().equals(OwnerInfoSettings.class.getName())
+                && UserHandle.myUserId() != UserHandle.USER_OWNER) {
+            titleRes = R.string.user_info_settings_title;
         }
         startPreferencePanel(pref.getFragment(), pref.getExtras(), titleRes, pref.getTitle(),
                 null, 0);
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index c7829cb..abcb203 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -102,6 +102,8 @@
     private final Object mUserLock = new Object();
     private UserManager mUserManager;
     private SparseArray<Drawable> mUserIcons = new SparseArray<Drawable>();
+    private boolean mIsOwner = UserHandle.myUserId() == UserHandle.USER_OWNER;
+
 
     private Handler mHandler = new Handler() {
         @Override
@@ -135,14 +137,19 @@
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
+
         mUserManager = (UserManager) getActivity().getSystemService(Context.USER_SERVICE);
         addPreferencesFromResource(R.xml.user_settings);
         mUserListCategory = (PreferenceGroup) findPreference(KEY_USER_LIST);
         mMePreference = (Preference) findPreference(KEY_USER_ME);
         mMePreference.setOnPreferenceClickListener(this);
-        if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
+        if (!mIsOwner) {
             mMePreference.setSummary(null);
         }
+        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(
@@ -172,7 +179,7 @@
 
     @Override
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
-        if (UserHandle.myUserId() == UserHandle.USER_OWNER) {
+        if (mIsOwner) {
             if (UserManager.getMaxSupportedUsers() > mUserManager.getUsers(false).size()) {
                 MenuItem addUserItem = menu.add(0, MENU_ADD_USER, 0, R.string.user_add_user_menu);
                 addUserItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM
