diff --git a/src/org/sflphone/fragments/AccountsManagementFragment.java b/src/org/sflphone/fragments/AccountsManagementFragment.java
index 95caf5d..93114dc 100644
--- a/src/org/sflphone/fragments/AccountsManagementFragment.java
+++ b/src/org/sflphone/fragments/AccountsManagementFragment.java
@@ -218,10 +218,10 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         super.onOptionsItemSelected(item);
         switch (item.getItemId()) {
-        case R.id.menuitem_create:
-            Intent intent = new Intent().setClass(getActivity(), AccountWizard.class);
-            startActivityForResult(intent, ACCOUNT_CREATE_REQUEST);
-            break;
+            case R.id.menuitem_create:
+                Intent intent = new Intent().setClass(getActivity(), AccountWizard.class);
+                startActivityForResult(intent, ACCOUNT_CREATE_REQUEST);
+                break;
         }
 
         return true;
@@ -253,17 +253,15 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
-        if(resultCode == ACCOUNT_EDIT_REQUEST) {
-            getLoaderManager().restartLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
-        }
+
+        getLoaderManager().restartLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
+
     }
 
     /**
-     * 
      * Adapter for accounts List
-     * 
+     *
      * @author lisional
-     * 
      */
     public class AccountsAdapter extends BaseAdapter {
 
@@ -352,9 +350,11 @@
             return rowView;
         }
 
-        /*********************
+        /**
+         * ******************
          * ViewHolder Pattern
-         *********************/
+         * *******************
+         */
         public class AccountView {
             public TextView alias;
             public TextView host;
@@ -374,7 +374,7 @@
 
         /**
          * Modify state of specific account
-         * 
+         *
          * @param accountState
          */
         public void updateAccount(Intent accountState) {
diff --git a/src/org/sflphone/fragments/MenuFragment.java b/src/org/sflphone/fragments/MenuFragment.java
index c85acf2..e097505 100644
--- a/src/org/sflphone/fragments/MenuFragment.java
+++ b/src/org/sflphone/fragments/MenuFragment.java
@@ -36,6 +36,7 @@
 import android.support.v4.app.LoaderManager;
 import android.support.v4.content.AsyncTaskLoader;
 import android.support.v4.content.Loader;
+import android.util.Log;
 import org.sflphone.R;
 import org.sflphone.adapters.AccountSelectionAdapter;
 import org.sflphone.adapters.ContactPictureTask;
@@ -132,6 +133,7 @@
     public void onResume() {
         super.onResume();
 
+        Log.i(TAG, "Resuming");
         IntentFilter intentFilter2 = new IntentFilter();
         intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNT_STATE_CHANGED);
         intentFilter2.addAction(ConfigurationManagerCallback.ACCOUNTS_CHANGED);
@@ -141,6 +143,14 @@
     }
 
     @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        getLoaderManager().restartLoader(LoaderConstants.ACCOUNTS_LOADER, null, this);
+    }
+
+
+
+    @Override
     public void onPause() {
         super.onPause();
         getActivity().unregisterReceiver(accountReceiver);
