diff --git a/src/org/sflphone/fragments/AccountCreationFragment.java b/src/org/sflphone/fragments/AccountCreationFragment.java
index 7aed9da..f96a82e 100644
--- a/src/org/sflphone/fragments/AccountCreationFragment.java
+++ b/src/org/sflphone/fragments/AccountCreationFragment.java
@@ -21,6 +21,7 @@
 import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 import android.widget.Toast;
+import org.sflphone.views.PasswordEditText;
 
 public class AccountCreationFragment extends Fragment {
 
@@ -34,7 +35,7 @@
     private EditText mAliasView;
     private EditText mHostnameView;
     private EditText mUsernameView;
-    private EditText mPasswordView;
+    private PasswordEditText mPasswordView;
 
     private Callbacks mCallbacks = sDummyCallbacks;
     private static Callbacks sDummyCallbacks = new Callbacks() {
@@ -63,9 +64,9 @@
         mAliasView = (EditText) inflatedView.findViewById(R.id.alias);
         mHostnameView = (EditText) inflatedView.findViewById(R.id.hostname);
         mUsernameView = (EditText) inflatedView.findViewById(R.id.username);
-        mPasswordView = (EditText) inflatedView.findViewById(R.id.password);
+        mPasswordView = (PasswordEditText) inflatedView.findViewById(R.id.password);
 
-        mPasswordView.setOnEditorActionListener(new OnEditorActionListener() {
+        mPasswordView.getEdit_text().setOnEditorActionListener(new OnEditorActionListener() {
 
             @Override
             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
diff --git a/src/org/sflphone/views/CredentialsPreference.java b/src/org/sflphone/views/CredentialsPreference.java
index 93d0df8..5b18f1d 100644
--- a/src/org/sflphone/views/CredentialsPreference.java
+++ b/src/org/sflphone/views/CredentialsPreference.java
@@ -56,7 +56,9 @@
 
 public class CredentialsPreference extends DialogPreference {
 
-    EditText mUsernameField, mPasswordField, mRealmField;
+    EditText mUsernameField;
+    PasswordEditText mPasswordField;
+    EditText mRealmField;
 
     public CredentialsPreference(Context context, AttributeSet attrs) {
         super(context, attrs);
@@ -70,13 +72,13 @@
         View view = inflater.inflate(R.layout.credentials_pref, null);
 
         mUsernameField = (EditText) view.findViewById(R.id.credentials_username);
-        mPasswordField = (EditText) view.findViewById(R.id.credentials_password);
+        mPasswordField = (PasswordEditText) view.findViewById(R.id.credentials_password);
         mRealmField = (EditText) view.findViewById(R.id.credentials_realm);
 
         if (getExtras().getSerializable(CredentialsManager.CURRENT_CRED) != null) {
             HashMap<String, String> details = (HashMap<String, String>) getExtras().getSerializable(CredentialsManager.CURRENT_CRED);
             mUsernameField.setText(details.get(AccountCredentials.CONFIG_ACCOUNT_USERNAME));
-            mPasswordField.setText(details.get(AccountCredentials.CONFIG_ACCOUNT_PASSWORD));
+            mPasswordField.getEdit_text().setText(details.get(AccountCredentials.CONFIG_ACCOUNT_PASSWORD));
             mRealmField.setText(details.get(AccountCredentials.CONFIG_ACCOUNT_REALM));
         }
 
diff --git a/src/org/sflphone/views/PasswordEditText.java b/src/org/sflphone/views/PasswordEditText.java
new file mode 100644
index 0000000..e15ce65
--- /dev/null
+++ b/src/org/sflphone/views/PasswordEditText.java
@@ -0,0 +1,115 @@
+package org.sflphone.views;
+
+import android.content.Context;
+import android.text.Editable;
+import android.text.TextWatcher;
+import android.text.method.HideReturnsTransformationMethod;
+import android.text.method.PasswordTransformationMethod;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.inputmethod.EditorInfo;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.RelativeLayout;
+import org.sflphone.R;
+
+/**
+ * Created by lisional on 06/04/14.
+ */
+public class PasswordEditText extends RelativeLayout {
+    LayoutInflater inflater = null;
+    EditText edit_text;
+    Button btn_clear;
+
+    public PasswordEditText(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        initViews();
+    }
+
+    public PasswordEditText(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        initViews();
+    }
+
+    public PasswordEditText(Context context) {
+        super(context);
+        // TODO Auto-generated constructor stub
+        initViews();
+    }
+
+    void initViews() {
+        inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        inflater.inflate(R.layout.password_edittext, this, true);
+        edit_text = (EditText) findViewById(R.id.password_edittext);
+        edit_text.setSingleLine();
+        edit_text.setImeOptions(EditorInfo.IME_ACTION_DONE);
+        btn_clear = (Button) findViewById(R.id.password_visibility);
+        btn_clear.setVisibility(RelativeLayout.INVISIBLE);
+        revealText();
+        edit_text.setTransformationMethod(PasswordTransformationMethod.getInstance());
+        showHideClearButton();
+    }
+
+    void revealText() {
+        btn_clear.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                switch(event.getAction()) {
+                    case MotionEvent.ACTION_DOWN:
+                        edit_text.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
+                        edit_text.setSelection(edit_text.getText().length());
+                        return true; // if you want to handle the touch event
+                    case MotionEvent.ACTION_UP:
+                        // RELEASED
+                        edit_text.setTransformationMethod(PasswordTransformationMethod.getInstance());
+                        edit_text.setSelection(edit_text.getText().length());
+                        return true; // if you want to handle the touch event
+                }
+                return false;
+            }
+        });
+    }
+
+    void showHideClearButton() {
+        edit_text.addTextChangedListener(new TextWatcher() {
+
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+                if (s.length() > 0)
+                    btn_clear.setVisibility(RelativeLayout.VISIBLE);
+                else
+                    btn_clear.setVisibility(RelativeLayout.INVISIBLE);
+            }
+
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+            }
+        });
+    }
+
+    public Editable getText() {
+        Editable text = edit_text.getText();
+        return text;
+    }
+
+    public void setInputType(int typeClassNumber) {
+        edit_text.setFocusableInTouchMode(true);
+        edit_text.requestFocus();
+        edit_text.setInputType(typeClassNumber);
+    }
+
+    public EditText getEdit_text() {
+        return edit_text;
+    }
+
+    public void setError(String string) {
+        edit_text.setError(string);
+        edit_text.requestFocus();
+    }
+}
\ No newline at end of file
