diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java
index bd740c1..3fbdaa2 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountCreationFragment.java
@@ -105,13 +105,11 @@
         mPasswordView.setOnEditorActionListener(new OnEditorActionListener() {
             @Override
             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-                mAccountType = AccountDetailBasic.ACCOUNT_TYPE_SIP;
-
-                mAlias = mAliasView.getText().toString();
-                mHostname = mHostnameView.getText().toString();
-                mUsername = mUsernameView.getText().toString();
-                mPassword = mPasswordView.getText().toString();
-                attemptCreation();
+                if (actionId == getResources().getInteger(R.integer.register_sip_account_actionid)
+                        || event == null
+                        || (event.getAction() == KeyEvent.ACTION_UP)) {
+                    inflatedView.findViewById(R.id.create_sip_button).callOnClick();
+                }
                 return true;
             }
         });
@@ -119,7 +117,7 @@
             @Override
             public void onClick(View view) {
                 mAccountType = AccountDetailBasic.ACCOUNT_TYPE_RING;
-                initCreation();
+                initAccountCreation();
             }
         });
         inflatedView.findViewById(R.id.create_sip_button).setOnClickListener(new View.OnClickListener() {
@@ -444,48 +442,62 @@
         // Store values at the time of the login attempt.
 
         boolean cancel = false;
+        boolean warningIPAccount = false;
         View focusView = null;
 
-        // Check for a valid password.
-        if (TextUtils.isEmpty(mPassword)) {
-            mPasswordView.setError(getString(R.string.error_field_required));
-            focusView = mPasswordView;
-            cancel = true;
-        }
-
-        if (TextUtils.isEmpty(mUsername)) {
-            mUsernameView.setError(getString(R.string.error_field_required));
-            focusView = mUsernameView;
-            cancel = true;
-        }
-
-        if (TextUtils.isEmpty(mHostname)) {
-            mHostnameView.setError(getString(R.string.error_field_required));
-            focusView = mHostnameView;
-            cancel = true;
-        }
-
-        // Check for a valid email address.
+        // Alias is mandatory
         if (TextUtils.isEmpty(mAlias)) {
             mAliasView.setError(getString(R.string.error_field_required));
             focusView = mAliasView;
             cancel = true;
         }
 
-        if (cancel) {
-            // There was an error; don't attempt login and focus the first
-            // form field with an error.
-            focusView.requestFocus();
-        } else {
-            // Show a progress spinner, and kick off a background task to
-            // perform the user login attempt.
-            initCreation();
+        if (TextUtils.isEmpty(mHostname)) {
+            warningIPAccount = true;
+        }
 
+        if (!warningIPAccount && TextUtils.isEmpty(mPassword)) {
+            mPasswordView.setError(getString(R.string.error_field_required));
+            focusView = mPasswordView;
+            cancel = true;
+        }
+
+        if (!warningIPAccount && TextUtils.isEmpty(mUsername)) {
+            mUsernameView.setError(getString(R.string.error_field_required));
+            focusView = mUsernameView;
+            cancel = true;
+        }
+
+        if (cancel) {
+            focusView.requestFocus();
+        } else if (warningIPAccount) {
+            showIP2IPDialog();
+        } else {
+            initAccountCreation();
         }
     }
 
+    private void showIP2IPDialog() {
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        builder.setTitle(R.string.dialog_warn_ip2ip_account_title)
+                .setMessage(R.string.dialog_warn_ip2ip_account_message)
+                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        initAccountCreation();
+                    }
+                })
+                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        /* Terminate with no action */
+                    }
+                })
+                .create().show();
+    }
+
     @SuppressWarnings("unchecked")
-    private void initCreation() {
+    private void initAccountCreation() {
         try {
             HashMap<String, String> accountDetails = (HashMap<String, String>) mCallbacks.getRemoteService().getAccountTemplate(mAccountType);
             accountDetails.put(AccountDetailBasic.CONFIG_ACCOUNT_TYPE, mAccountType);
diff --git a/ring-android/app/src/main/res/layout/frag_account_creation.xml b/ring-android/app/src/main/res/layout/frag_account_creation.xml
index a9faa6a..a6249f7 100644
--- a/ring-android/app/src/main/res/layout/frag_account_creation.xml
+++ b/ring-android/app/src/main/res/layout/frag_account_creation.xml
@@ -274,6 +274,7 @@
                         android:layout_marginLeft="12dp"
                         android:layout_marginRight="12dp"
                         android:hint="@string/prompt_password"
+                        android:imeActionId="@integer/register_sip_account_actionid"
                         android:imeActionLabel="@string/action_create_short"
                         android:inputType="textPassword"
                         android:singleLine="true"
diff --git a/ring-android/app/src/main/res/values/integers.xml b/ring-android/app/src/main/res/values/integers.xml
new file mode 100644
index 0000000..353c4cf
--- /dev/null
+++ b/ring-android/app/src/main/res/values/integers.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <integer name="register_sip_account_actionid">1000</integer>
+</resources>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/values/strings_account.xml b/ring-android/app/src/main/res/values/strings_account.xml
index 3e867ea..fdc31a0 100644
--- a/ring-android/app/src/main/res/values/strings_account.xml
+++ b/ring-android/app/src/main/res/values/strings_account.xml
@@ -31,6 +31,11 @@
     <string name="dialog_wait_create">Adding account</string>
     <string name="dialog_wait_create_details">Please wait while your new account is added…</string>
 
+    <string name="dialog_warn_ip2ip_account_title">Create empty SIP account ?</string>
+    <string name="dialog_warn_ip2ip_account_message">You are about to create a SIP account with no valid hostname.
+        You will only be able to make and receive direct ip calls.
+        You can edit your account later</string>
+
     <string-array name="accountType">
         <item>RING</item>
         <item>SIP</item>
