diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 6d07e41..4704426 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -174,10 +174,13 @@
     private static final String SELECT_LOGD_OFF_SIZE_MARKER_VALUE = "32768";
     private static final String SELECT_LOGPERSIST_KEY = "select_logpersist";
     private static final String SELECT_LOGPERSIST_PROPERTY = "persist.logd.logpersistd";
+    private static final String ACTUAL_LOGPERSIST_PROPERTY = "logd.logpersistd";
     private static final String SELECT_LOGPERSIST_PROPERTY_SERVICE = "logcatd";
     private static final String SELECT_LOGPERSIST_PROPERTY_CLEAR = "clear";
     private static final String SELECT_LOGPERSIST_PROPERTY_STOP = "stop";
     private static final String SELECT_LOGPERSIST_PROPERTY_BUFFER = "persist.logd.logpersistd.buffer";
+    private static final String ACTUAL_LOGPERSIST_PROPERTY_BUFFER = "logd.logpersistd.buffer";
+    private static final String ACTUAL_LOGPERSIST_PROPERTY_ENABLE = "logd.logpersistd.enable";
 
     private static final String WIFI_DISPLAY_CERTIFICATION_KEY = "wifi_display_certification";
     private static final String WIFI_VERBOSE_LOGGING_KEY = "wifi_verbose_logging";
@@ -1483,13 +1486,17 @@
             String currentValue = SystemProperties.get(SELECT_LOGD_SIZE_PROPERTY);
             if ((currentTag != null) && currentTag.startsWith(SELECT_LOGD_TAG_SILENCE)) {
                 currentValue = SELECT_LOGD_OFF_SIZE_MARKER_VALUE;
-                if (mLogpersist != null) {
-                   writeLogpersistOption(null, true);
-                   mLogpersist.setEnabled(false);
-                }
-            } else {
-                if ((mLogpersist != null) && mLastEnabledState) {
-                   mLogpersist.setEnabled(true);
+            }
+            if (mLogpersist != null) {
+                String currentLogpersistEnable
+                    = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_ENABLE);
+                if ((currentLogpersistEnable == null)
+                        || !currentLogpersistEnable.equals("true")
+                        || currentValue.equals(SELECT_LOGD_OFF_SIZE_MARKER_VALUE)) {
+                    writeLogpersistOption(null, true);
+                    mLogpersist.setEnabled(false);
+                } else if (mLastEnabledState) {
+                    mLogpersist.setEnabled(true);
                 }
             }
             if ((currentValue == null) || (currentValue.length() == 0)) {
@@ -1563,11 +1570,11 @@
         if (mLogpersist == null) {
             return;
         }
-        String currentValue = SystemProperties.get(SELECT_LOGPERSIST_PROPERTY);
+        String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
         if (currentValue == null) {
             currentValue = "";
         }
-        String currentBuffers = SystemProperties.get(SELECT_LOGPERSIST_PROPERTY_BUFFER);
+        String currentBuffers = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_BUFFER);
         if ((currentBuffers == null) || (currentBuffers.length() == 0)) {
             currentBuffers = "all";
         }
@@ -1599,7 +1606,7 @@
             mLogpersistCleared = false;
         } else if (!mLogpersistCleared) {
             // would File.delete() directly but need to switch uid/gid to access
-            SystemProperties.set(SELECT_LOGPERSIST_PROPERTY, SELECT_LOGPERSIST_PROPERTY_CLEAR);
+            SystemProperties.set(ACTUAL_LOGPERSIST_PROPERTY, SELECT_LOGPERSIST_PROPERTY_CLEAR);
             pokeSystemProperties();
             mLogpersistCleared = true;
         }
@@ -1607,11 +1614,25 @@
 
     private void setLogpersistOff(boolean update) {
         SystemProperties.set(SELECT_LOGPERSIST_PROPERTY_BUFFER, "");
-        SystemProperties.set(SELECT_LOGPERSIST_PROPERTY,
+        // deal with trampoline of empty properties
+        SystemProperties.set(ACTUAL_LOGPERSIST_PROPERTY_BUFFER, "");
+        SystemProperties.set(SELECT_LOGPERSIST_PROPERTY, "");
+        SystemProperties.set(ACTUAL_LOGPERSIST_PROPERTY,
             update ? "" : SELECT_LOGPERSIST_PROPERTY_STOP);
         pokeSystemProperties();
         if (update) {
             updateLogpersistValues();
+        } else {
+            for (int i = 0; i < 3; i++) {
+                String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
+                if ((currentValue == null) || currentValue.equals("")) {
+                    break;
+                }
+                try {
+                    Thread.sleep(100);
+                } catch (InterruptedException e) {
+                }
+            }
         }
     }
 
@@ -1630,8 +1651,9 @@
                 mLogpersistCleared = false;
             } else if (!mLogpersistCleared) {
                 // if transitioning from on to off, pop up an are you sure?
-                String currentValue = SystemProperties.get(SELECT_LOGPERSIST_PROPERTY);
-                if ((currentValue != null) && (currentValue.length() != 0)) {
+                String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
+                if ((currentValue != null) &&
+                        currentValue.equals(SELECT_LOGPERSIST_PROPERTY_SERVICE)) {
                     if (mLogpersistClearDialog != null) dismissDialogs();
                     mLogpersistClearDialog = new AlertDialog.Builder(getActivity()).setMessage(
                             getActivity().getResources().getString(
@@ -1648,13 +1670,24 @@
             return;
         }
 
-        String currentBuffer = SystemProperties.get(SELECT_LOGPERSIST_PROPERTY_BUFFER);
+        String currentBuffer = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY_BUFFER);
         if ((currentBuffer != null) && !currentBuffer.equals(newValue.toString())) {
             setLogpersistOff(false);
         }
         SystemProperties.set(SELECT_LOGPERSIST_PROPERTY_BUFFER, newValue.toString());
         SystemProperties.set(SELECT_LOGPERSIST_PROPERTY, SELECT_LOGPERSIST_PROPERTY_SERVICE);
         pokeSystemProperties();
+        for (int i = 0; i < 3; i++) {
+            String currentValue = SystemProperties.get(ACTUAL_LOGPERSIST_PROPERTY);
+            if ((currentValue != null)
+                    && currentValue.equals(SELECT_LOGPERSIST_PROPERTY_SERVICE)) {
+                break;
+            }
+            try {
+                Thread.sleep(100);
+            } catch (InterruptedException e) {
+            }
+        }
         updateLogpersistValues();
     }
 
