diff --git a/src/com/android/settings/vpn/VpnProfileEditor.java b/src/com/android/settings/vpn/VpnProfileEditor.java
index a1cdc76..bf2e57d 100644
--- a/src/com/android/settings/vpn/VpnProfileEditor.java
+++ b/src/com/android/settings/vpn/VpnProfileEditor.java
@@ -25,6 +25,7 @@
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
+import android.text.InputType;
 import android.text.TextUtils;
 import android.text.method.PasswordTransformationMethod;
 
@@ -32,6 +33,9 @@
  * The common class for editing {@link VpnProfile}.
  */
 class VpnProfileEditor {
+    static final String SECRET_SET_INDICATOR =
+            new String(new byte[] {(byte) 1, (byte) 0});
+
     private static final String KEY_VPN_NAME = "vpn_name";
 
     private EditTextPreference mName;
@@ -95,7 +99,7 @@
      * Creates a preference for users to input domain suffices.
      */
     protected EditTextPreference createDomainSufficesPreference(Context c) {
-        mDomainSuffices = createEditTextPreference(c,
+        EditTextPreference pref = mDomainSuffices = createEditTextPreference(c,
                 R.string.vpn_dns_search_list_title,
                 R.string.vpn_dns_search_list,
                 mProfile.getDomainSuffices(),
@@ -108,11 +112,12 @@
                         return true;
                     }
                 });
-        return mDomainSuffices;
+        pref.getEditText().setInputType(InputType.TYPE_TEXT_VARIATION_URI);
+        return pref;
     }
 
     private Preference createServerNamePreference(Context c) {
-        mServerName = createEditTextPreference(c,
+        EditTextPreference pref = mServerName = createEditTextPreference(c,
                 R.string.vpn_vpn_server_title,
                 R.string.vpn_vpn_server,
                 mProfile.getServerName(),
@@ -125,7 +130,8 @@
                         return true;
                     }
                 });
-        return mServerName;
+        pref.getEditText().setInputType(InputType.TYPE_TEXT_VARIATION_URI);
+        return pref;
     }
 
     protected EditTextPreference createEditTextPreference(Context c, int titleId,
@@ -147,9 +153,10 @@
         EditTextPreference pref = new EditTextPreference(c);
         pref.setTitle(titleId);
         pref.setDialogTitle(titleId);
+        pref.getEditText().setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
         pref.getEditText().setTransformationMethod(
                 new PasswordTransformationMethod());
-        pref.setText(value);
+        pref.setText(TextUtils.isEmpty(value) ? "" : SECRET_SET_INDICATOR);
         setSecretSummary(pref, fieldNameId, value);
         pref.setPersistent(true);
         pref.setOnPreferenceChangeListener(listener);
diff --git a/src/com/android/settings/vpn/VpnSettings.java b/src/com/android/settings/vpn/VpnSettings.java
index c41a105..f0e71f7 100644
--- a/src/com/android/settings/vpn/VpnSettings.java
+++ b/src/com/android/settings/vpn/VpnSettings.java
@@ -18,6 +18,7 @@
 
 import com.android.settings.R;
 import com.android.settings.SecuritySettings;
+import static com.android.settings.vpn.VpnProfileEditor.SECRET_SET_INDICATOR;
 
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -109,6 +110,10 @@
 
     private static final int NO_ERROR = 0;
 
+    private static final String NAMESPACE_VPN = "vpn";
+    private static final String KEY_PREFIX_IPSEC_PSK = "ipsk000";
+    private static final String KEY_PREFIX_L2TP_SECRET = "lscrt000";
+
     private PreferenceScreen mAddVpn;
     private PreferenceCategory mVpnListContainer;
 
@@ -838,37 +843,37 @@
         return mVpnManager.createVpnProfile(Enum.valueOf(VpnType.class, type));
     }
 
-    private static final String NAMESPACE_VPN = "vpn";
-    private static final String KEY_PREFIX_IPSEC_PSK = "ipsk000";
-    private static final String KEY_PREFIX_L2TP_SECRET = "lscrt000";
+    private String keyNameForDaemon(String keyName) {
+        return NAMESPACE_VPN + "_" + keyName;
+    }
 
     private void processSecrets(VpnProfile p) {
         Keystore ks = Keystore.getInstance();
         switch (p.getType()) {
             case L2TP_IPSEC_PSK:
                 L2tpIpsecPskProfile pskProfile = (L2tpIpsecPskProfile) p;
-                String keyName = KEY_PREFIX_IPSEC_PSK + p.getId();
-                String keyNameForDaemon = NAMESPACE_VPN + "_" + keyName;
                 String presharedKey = pskProfile.getPresharedKey();
-                if (!presharedKey.equals(keyNameForDaemon)) {
+                if (!presharedKey.equals(SECRET_SET_INDICATOR)) {
+                    String keyName = KEY_PREFIX_IPSEC_PSK + p.getId();
                     int ret = ks.put(NAMESPACE_VPN, keyName, presharedKey);
-                    if (ret < 0) Log.e(TAG, "keystore write failed: key=" + keyName);
-                    pskProfile.setPresharedKey(keyNameForDaemon);
+                    if (ret < 0) {
+                        Log.e(TAG, "keystore write failed: key=" + keyName);
+                    }
+                    pskProfile.setPresharedKey(keyNameForDaemon(keyName));
                 }
                 // pass through
 
             case L2TP:
                 L2tpProfile l2tpProfile = (L2tpProfile) p;
-                keyName = KEY_PREFIX_L2TP_SECRET + p.getId();
+                String keyName = KEY_PREFIX_L2TP_SECRET + p.getId();
                 if (l2tpProfile.isSecretEnabled()) {
-                    keyNameForDaemon = NAMESPACE_VPN + "_" + keyName;
                     String secret = l2tpProfile.getSecretString();
-                    if (!secret.equals(keyNameForDaemon)) {
+                    if (!secret.equals(SECRET_SET_INDICATOR)) {
                         int ret = ks.put(NAMESPACE_VPN, keyName, secret);
                         if (ret < 0) {
                             Log.e(TAG, "keystore write failed: key=" + keyName);
                         }
-                        l2tpProfile.setSecretString(keyNameForDaemon);
+                        l2tpProfile.setSecretString(keyNameForDaemon(keyName));
                     }
                 } else {
                     ks.remove(NAMESPACE_VPN, keyName);
