diff --git a/src/com/android/phone/sip/SipEditor.java b/src/com/android/phone/sip/SipEditor.java
index e40e3f0..034d09f 100644
--- a/src/com/android/phone/sip/SipEditor.java
+++ b/src/com/android/phone/sip/SipEditor.java
@@ -16,6 +16,8 @@
 
 package com.android.phone.sip;
 
+import com.android.internal.telephony.CallManager;
+import com.android.internal.telephony.Phone;
 import com.android.phone.R;
 import com.android.phone.SipUtil;
 
@@ -23,6 +25,7 @@
 import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.net.sip.SipException;
 import android.net.sip.SipManager;
 import android.net.sip.SipProfile;
 import android.os.Bundle;
@@ -33,12 +36,14 @@
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
+import android.widget.AdapterView;
 import android.widget.Button;
 import android.widget.Toast;
 
@@ -66,11 +71,14 @@
     private AdvancedSettings mAdvancedSettings;
     private SipSharedPreferences mSharedPreferences;
     private boolean mDisplayNameSet;
-    private boolean mHomeButtonClicked = false;
+    private boolean mHomeButtonClicked;
+    private boolean mUpdateRequired;
 
     private SipManager mSipManager;
     private SipProfileDb mProfileDb;
     private SipProfile mOldProfile;
+    private CallManager mCallManager;
+    private Button mRemoveButton;
 
     enum PreferenceKey {
         Username(R.string.username, 0, R.string.default_preference_summary),
@@ -134,6 +142,20 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        mHomeButtonClicked = false;
+        if (mCallManager.getState() != Phone.State.IDLE) {
+            mAdvancedSettings.show();
+            getPreferenceScreen().setEnabled(false);
+            if (mRemoveButton != null) mRemoveButton.setEnabled(false);
+        } else {
+            getPreferenceScreen().setEnabled(true);
+            if (mRemoveButton != null) mRemoveButton.setEnabled(true);
+        }
+    }
+
+    @Override
     public void onCreate(Bundle savedInstanceState) {
         Log.v(TAG, "start profile editor");
         super.onCreate(savedInstanceState);
@@ -141,6 +163,7 @@
         mSipManager = SipManager.newInstance(this);
         mSharedPreferences = new SipSharedPreferences(this);
         mProfileDb = new SipProfileDb(this);
+        mCallManager = CallManager.getInstance();
 
         setContentView(R.layout.sip_settings_ui);
         addPreferencesFromResource(R.xml.sip_edit);
@@ -159,10 +182,10 @@
                     .setVisibility(View.GONE);
             screen.setTitle(R.string.sip_edit_new_title);
         } else {
-            Button removeButton =
+            mRemoveButton =
                     (Button)findViewById(R.id.add_remove_account_button);
-            removeButton.setText(getString(R.string.remove_sip_account));
-            removeButton.setOnClickListener(
+            mRemoveButton.setText(getString(R.string.remove_sip_account));
+            mRemoveButton.setOnClickListener(
                     new android.view.View.OnClickListener() {
                         public void onClick(View v) {
                             setRemovedProfileAndFinish();
@@ -322,14 +345,13 @@
             }
         }
 
-        if (allEmpty) {
+        if (allEmpty || !mUpdateRequired) {
             finish();
             return;
         } else if (firstEmptyFieldTitle != null) {
             showAlert(getString(R.string.empty_alert, firstEmptyFieldTitle));
             return;
         }
-
         try {
             SipProfile profile = createSipProfile();
             Intent intent = new Intent(this, SipSettings.class);
@@ -398,6 +420,12 @@
     }
 
     public boolean onPreferenceChange(Preference pref, Object newValue) {
+        if (!mUpdateRequired) {
+            mUpdateRequired = true;
+            if (mOldProfile != null) {
+                unregisterProfile(mOldProfile.getUriString());
+            }
+        }
         if (pref instanceof CheckBoxPreference) return true;
         String value = (newValue == null) ? "" : newValue.toString();
         if (TextUtils.isEmpty(value)) {
@@ -576,7 +604,7 @@
             }
         }
 
-        private void show() {
+        void show() {
             mShowing = true;
             mAdvancedSettingsTrigger.setSummary(R.string.advanced_settings_hide);
             PreferenceGroup screen = (PreferenceGroup) getPreferenceScreen();
diff --git a/src/com/android/phone/sip/SipSettings.java b/src/com/android/phone/sip/SipSettings.java
index e59ccf5..79a61ca 100644
--- a/src/com/android/phone/sip/SipSettings.java
+++ b/src/com/android/phone/sip/SipSettings.java
@@ -16,6 +16,8 @@
 
 package com.android.phone.sip;
 
+import com.android.internal.telephony.CallManager;
+import com.android.internal.telephony.Phone;
 import com.android.phone.R;
 import com.android.phone.SipUtil;
 
@@ -71,10 +73,12 @@
 
     private PackageManager mPackageManager;
     private SipManager mSipManager;
+    private CallManager mCallManager;
     private SipProfileDb mProfileDb;
 
     private SipProfile mProfile; // profile that's being edited
 
+    private Button mButtonAddSipAccount;
     private CheckBoxPreference mButtonSipReceiveCalls;
     private PreferenceCategory mSipListContainer;
     private Map<String, SipPreference> mSipPreferenceMap;
@@ -150,6 +154,7 @@
         mSipListContainer = (PreferenceCategory) findPreference(PREF_SIP_LIST);
         registerForAddSipListener();
         registerForReceiveCallsCheckBox();
+        mCallManager = CallManager.getInstance();
 
         updateProfilesStatus();
     }
@@ -157,6 +162,14 @@
     @Override
     public void onResume() {
         super.onResume();
+
+        if (mCallManager.getState() != Phone.State.IDLE) {
+            mButtonAddSipAccount.setEnabled(false);
+            mButtonSipReceiveCalls.setEnabled(false);
+        } else {
+            mButtonAddSipAccount.setEnabled(true);
+            mButtonSipReceiveCalls.setEnabled(true);
+        }
     }
 
     @Override
@@ -190,8 +203,10 @@
     }
 
     private void registerForAddSipListener() {
-        ((Button) findViewById(R.id.add_remove_account_button))
-                .setOnClickListener(new android.view.View.OnClickListener() {
+        mButtonAddSipAccount =
+                (Button) findViewById(R.id.add_remove_account_button);
+        mButtonAddSipAccount.setOnClickListener(
+                new android.view.View.OnClickListener() {
                     public void onClick(View v) {
                         startSipEditor(null);
                     }
