diff --git a/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
new file mode 100644
index 0000000..11a7011
--- /dev/null
+++ b/src/com/savoirfairelinux/sflphone/client/AccountCreationActivity.java
@@ -0,0 +1,47 @@
+/*
+ *  Copyright (C) 2004-2012 Savoir-Faire Linux Inc.
+ *
+ *  Author: Alexandre Savard <alexandre.savard@savoirfairelinux.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Additional permission under GNU GPL version 3 section 7:
+ *
+ *  If you modify this program, or any covered work, by linking or
+ *  combining it with the OpenSSL project's OpenSSL library (or a
+ *  modified version of that library), containing parts covered by the
+ *  terms of the OpenSSL or SSLeay licenses, Savoir-Faire Linux Inc.
+ *  grants you additional permission to convey the resulting work.
+ *  Corresponding Source for a non-source form of such a combination
+ *  shall include the source code for the parts of OpenSSL used as well
+ *  as that of the covered work.
+ */
+
+package com.savoirfairelinux.sflphone.client;
+
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+import com.savoirfairelinux.sflphone.R;
+
+public class AccountCreationActivity extends PreferenceActivity
+{
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        addPreferencesFromResource(R.xml.account_creation_preferences);
+    }    
+}
diff --git a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
index a73c050..02d87e0 100644
--- a/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
+++ b/src/com/savoirfairelinux/sflphone/client/AccountManagementFragment.java
@@ -32,6 +32,7 @@
 package com.savoirfairelinux.sflphone.client;
 
 import android.app.Activity;
+import android.content.Intent;
 import android.preference.EditTextPreference;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
@@ -57,6 +58,7 @@
     static final String TAG = "AccountManagementFragment";
     static final String CURRENT_VALUE = "Current value:: ";
     static final String DEFAULT_ACCOUNT_ID = "IP2IP";
+    static final int ACCOUNT_CREATE_REQUEST = 1;
     private ISipService service;
     // HashMap<String, String> mAccountDetails = null;
     // ArrayList<String> mAccountList = null;
@@ -203,6 +205,12 @@
         
     }
 
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == ACCOUNT_CREATE_REQUEST) {
+        }
+    }
+
     boolean onTextEditPreferenceChange(Preference preference, Object newValue)
     {
         Log.i(TAG, "Account Preference Changed " + preference.getTitle());
@@ -220,13 +228,23 @@
     };
 
 
-    Preference.OnPreferenceClickListener preferenceClick = new Preference.OnPreferenceClickListener() {
+    Preference.OnPreferenceClickListener launchAccountCreationOnClick = new Preference.OnPreferenceClickListener() {
         public boolean onPreferenceClick(Preference preference) {
-            return false;
+            if(preference.getTitle() == "Touch to Create New Account") {
+                launchAccountCreationPanel();
+            }
+            return true;
         }
     };
 
-    ArrayList<String> getAccountList()
+    private void launchAccountCreationPanel()
+    {
+        Log.i("MainSandbox", "launchPreferencePanel");
+        Intent intent = new Intent().setClass(getActivity(), AccountCreationActivity.class);
+        startActivityForResult(intent, ACCOUNT_CREATE_REQUEST);
+    } 
+
+    private ArrayList<String> getAccountList()
     {
         ArrayList<String> accountList = null;
         try {
@@ -241,7 +259,7 @@
         return accountList;
     }
 
-    HashMap getAccountDetails(String accountID)
+    private HashMap getAccountDetails(String accountID)
     {
         HashMap accountDetails = null;
         try {
@@ -276,8 +294,12 @@
 
         for(String s : accountList)
             root.addPreference(getAccountPreferenceScreen(s));
-
-       
+         
+        Preference createNewAccount = new Preference(currentContext);
+        createNewAccount.setTitle("Touch to Create New Account");
+        createNewAccount.setOnPreferenceClickListener(launchAccountCreationOnClick);
+        // createNewAccount.setIntent(new Intent().setClass(getActivity(), AccountCreationActivity.class));
+        root.addPreference(createNewAccount);
 
         return root;
     }
