diff --git a/src/org/codeaurora/bluetooth/dun/BluetoothDunService.java b/src/org/codeaurora/bluetooth/dun/BluetoothDunService.java
index 88ea756..d1c8986 100644
--- a/src/org/codeaurora/bluetooth/dun/BluetoothDunService.java
+++ b/src/org/codeaurora/bluetooth/dun/BluetoothDunService.java
@@ -399,12 +399,29 @@
                 }
 
                 Log.v(TAG, "Starting DUN server process");
-                SystemProperties.set(BLUETOOTH_DUN_PROFILE_STATUS, "running");
+                try {
+                    SystemProperties.set(BLUETOOTH_DUN_PROFILE_STATUS, "running");
+                    mDunEnable = true;
+                } catch (RuntimeException e) {
+                    Log.v(TAG, "Could not start DUN server process: " + e);
+                }
 
-                mDunHandler.sendMessage(mDunHandler
-                        .obtainMessage(MESSAGE_START_LISTENER));
-
-                mDunEnable = true;
+                if (mDunEnable) {
+                    mDunHandler.sendMessage(mDunHandler
+                            .obtainMessage(MESSAGE_START_LISTENER));
+                } else {
+                    //DUN server process is not started successfully.
+                    //So clean up service connection to avoid service connection leak
+                    if (mAdapterService != null) {
+                        try {
+                            mAdapterService = null;
+                            unbindService(mConnection);
+                        } catch (IllegalArgumentException e) {
+                            Log.e(TAG, "could not unbind the adapter Service", e);
+                        }
+                    }
+                    return;
+                }
             }
             else if (state == BluetoothAdapter.STATE_TURNING_OFF) {
                 // Send any pending timeout now, as this service will be destroyed.
@@ -416,7 +433,11 @@
 
                 if (mDunEnable) {
                     Log.v(TAG, "Stopping DUN server process");
-                    SystemProperties.set(BLUETOOTH_DUN_PROFILE_STATUS, "stopped");
+                    try {
+                        SystemProperties.set(BLUETOOTH_DUN_PROFILE_STATUS, "stopped");
+                    } catch (RuntimeException e) {
+                        Log.v(TAG, "Could not stop DUN server process: " + e);
+                    }
 
                     synchronized(mConnection) {
                         try {
diff --git a/src/org/codeaurora/bluetooth/sap/BluetoothSapService.java b/src/org/codeaurora/bluetooth/sap/BluetoothSapService.java
index ab754e0..7dd6125 100644
--- a/src/org/codeaurora/bluetooth/sap/BluetoothSapService.java
+++ b/src/org/codeaurora/bluetooth/sap/BluetoothSapService.java
@@ -420,12 +420,29 @@
                 }
 
                 Log.v(TAG, "Starting SAP server process");
-                SystemProperties.set(BLUETOOTH_SAP_PROFILE_STATUS, "running");
+                try {
+                    SystemProperties.set(BLUETOOTH_SAP_PROFILE_STATUS, "running");
+                    mSapEnable = true;
+                } catch (RuntimeException e) {
+                    Log.v(TAG, "Could not start SAP server process: " + e);
+                }
 
-                mSapHandler.sendMessage(mSapHandler
-                        .obtainMessage(MESSAGE_START_LISTENER));
-
-                mSapEnable = true;
+                if (mSapEnable) {
+                    mSapHandler.sendMessage(mSapHandler
+                            .obtainMessage(MESSAGE_START_LISTENER));
+                } else {
+                    //Sap server process is not started successfully.
+                    //So clean up service connection to avoid service connection leak
+                    if (mAdapterService != null) {
+                        try {
+                            mAdapterService = null;
+                            unbindService(mConnection);
+                        } catch (IllegalArgumentException e) {
+                            Log.e(TAG, "could not unbind the adapter Service", e);
+                        }
+                    }
+                    return;
+                }
             }
             else if (state == BluetoothAdapter.STATE_TURNING_OFF) {
                 // Send any pending timeout now, as this service will be destroyed.
@@ -437,7 +454,12 @@
 
                 if (mSapEnable) {
                     Log.v(TAG, "Stopping SAP server process");
-                    SystemProperties.set(BLUETOOTH_SAP_PROFILE_STATUS, "stopped");
+
+                    try {
+                        SystemProperties.set(BLUETOOTH_SAP_PROFILE_STATUS, "stopped");
+                    } catch (RuntimeException e) {
+                        Log.v(TAG, "Could not stop SAP server process: " + e);
+                    }
 
                     synchronized(mConnection) {
                         try {
