diff --git a/src/org/sflphone/client/HomeActivity.java b/src/org/sflphone/client/HomeActivity.java
index 09b77eb..244d705 100644
--- a/src/org/sflphone/client/HomeActivity.java
+++ b/src/org/sflphone/client/HomeActivity.java
@@ -43,6 +43,7 @@
 
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.content.pm.PackageManager;
 import android.support.v4.app.*;
 import org.sflphone.R;
 import org.sflphone.fragments.AboutFragment;
@@ -122,8 +123,6 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
-
         setContentView(R.layout.activity_home);
 
         // Bind to LocalService
@@ -384,6 +383,8 @@
         public void onServiceConnected(ComponentName className, IBinder binder) {
             service = ISipService.Stub.asInterface(binder);
 
+
+
             try {
 
                 fMenu = new MenuFragment();
diff --git a/src/org/sflphone/fragments/CallFragment.java b/src/org/sflphone/fragments/CallFragment.java
index 24ac9f7..2843864 100644
--- a/src/org/sflphone/fragments/CallFragment.java
+++ b/src/org/sflphone/fragments/CallFragment.java
@@ -399,9 +399,11 @@
     }
 
     private void enableZRTP(final SecureSipCall secured) {
-
-        if(secured.isInitialized()){
+        Log.i(TAG, "enable ZRTP");
+        if (secured.isInitialized()) {
+            Log.i(TAG, "Call initialized ");
             if (secured.needSASConfirmation()) {
+                Log.i(TAG, "needSASConfirmation");
                 final Button sas = (Button) mSecuritySwitch.findViewById(R.id.confirm_sas);
                 sas.setText("Confirm SAS: " + secured.getSAS());
                 sas.setOnClickListener(new OnClickListener() {
@@ -409,25 +411,29 @@
                     public void onClick(View v) {
                         try {
                             mCallbacks.getService().confirmSAS(secured.getCallId());
-                            ImageView lock = (ImageView) mSecuritySwitch.findViewById(R.id.lock_image);
-                            lock.setImageDrawable(getResources().getDrawable(R.drawable.green_lock));
-                            mSecuritySwitch.showNext();
+                            showLock(R.drawable.green_lock);
                         } catch (RemoteException e) {
                             e.printStackTrace();
                         }
                     }
                 });
                 mSecuritySwitch.setVisibility(View.VISIBLE);
+            } else if (secured.supportZRTP()) {
+                Log.i(TAG, "supportZRTP");
+                showLock(R.drawable.green_lock);
             } else {
-                ImageView lock = (ImageView) mSecuritySwitch.findViewById(R.id.lock_image);
-                lock.setImageDrawable(getResources().getDrawable(R.drawable.red_lock));
-
-                mSecuritySwitch.showNext();
-                mSecuritySwitch.setVisibility(View.VISIBLE);
+                showLock(R.drawable.red_lock);
             }
         }
     }
 
+    private void showLock(int resId) {
+        ImageView lock = (ImageView) mSecuritySwitch.findViewById(R.id.lock_image);
+        lock.setImageDrawable(getResources().getDrawable(resId));
+        mSecuritySwitch.showNext();
+        mSecuritySwitch.setVisibility(View.VISIBLE);
+    }
+
     private void initIncomingCallDisplay() {
         Log.i(TAG, "Start incoming display");
 
diff --git a/src/org/sflphone/fragments/ContactListFragment.java b/src/org/sflphone/fragments/ContactListFragment.java
index ab6c2af..b7bd3a7 100644
--- a/src/org/sflphone/fragments/ContactListFragment.java
+++ b/src/org/sflphone/fragments/ContactListFragment.java
@@ -173,9 +173,9 @@
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View inflatedView = inflater.inflate(R.layout.frag_contact_list, container, false);
         mHeader = (LinearLayout) inflater.inflate(R.layout.frag_contact_list_header, null);
-        mContactList = (StickyListHeadersListView) inflatedView.findViewById(R.id.contacts_list);
+        mContactList = (StickyListHeadersListView) inflatedView.findViewById(R.id.contacts_stickylv);
 
-        ((LinearLayout) inflatedView.findViewById(R.id.drag_view)).setOnTouchListener(new OnTouchListener() {
+        inflatedView.findViewById(R.id.drag_view).setOnTouchListener(new OnTouchListener() {
 
             @Override
             public boolean onTouch(View v, MotionEvent event) {
@@ -183,7 +183,7 @@
             }
         });
 
-        ((ImageButton) inflatedView.findViewById(R.id.contact_search_button)).setOnClickListener(new OnClickListener() {
+        inflatedView.findViewById(R.id.contact_search_button).setOnClickListener(new OnClickListener() {
 
             @Override
             public void onClick(View v) {
@@ -195,7 +195,7 @@
             }
         });
 
-        ((RelativeLayout) inflatedView.findViewById(R.id.slider_button)).setOnClickListener(new OnClickListener() {
+        inflatedView.findViewById(R.id.slider_button).setOnClickListener(new OnClickListener() {
 
             @Override
             public void onClick(View v) {
diff --git a/src/org/sflphone/model/SecureSipCall.java b/src/org/sflphone/model/SecureSipCall.java
index 8b4b7b0..ff59671 100644
--- a/src/org/sflphone/model/SecureSipCall.java
+++ b/src/org/sflphone/model/SecureSipCall.java
@@ -34,6 +34,7 @@
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.util.Log;
 
 
 public class SecureSipCall extends SipCall {
@@ -79,19 +80,29 @@
 
     private String SAS;
     private boolean needSASConfirmation;
+
+    public boolean supportZRTP() {
+        return !zrtpNotSupported;
+    }
+
     private boolean zrtpNotSupported;
-    private boolean alertIfZrtpNotSupported;
-    private boolean displaySASOnHold;
+
+    // static preferences of account
+    private final boolean displaySas;
+    private final boolean alertIfZrtpNotSupported;
+    private final boolean displaySASOnHold;
 
     private boolean isInitialized;
 
 
-    public SecureSipCall(SipCall call, Bundle secure){
+    public SecureSipCall(SipCall call, Bundle secure) {
         super(call);
         isInitialized = false;
-        needSASConfirmation = secure.getBoolean(SecureSipCall.DISPLAY_SAS, false);
+        displaySas = secure.getBoolean(SecureSipCall.DISPLAY_SAS, false);
+        needSASConfirmation = displaySas; // At first this is equal
         alertIfZrtpNotSupported = secure.getBoolean(SecureSipCall.DISPLAY_WARNING_ZRTP_NOT_SUPPORTED, false);
         displaySASOnHold = secure.getBoolean(SecureSipCall.DISPLAY_SAS_ONCE, false);
+        zrtpNotSupported = false;
     }
 
     public boolean needSASConfirmation() {
@@ -110,20 +121,27 @@
         this.SAS = SAS;
     }
 
-    public SecureSipCall(Parcel in){
+    public SecureSipCall(Parcel in) {
         super(in);
         SAS = in.readString();
-        needSASConfirmation = in.readByte() == 1;
+        displaySas = in.readByte() == 1;
         isInitialized = in.readByte() == 1;
-
+        alertIfZrtpNotSupported = in.readByte() == 1;
+        displaySASOnHold = in.readByte() == 1;
+        zrtpNotSupported = in.readByte() == 1;
+        needSASConfirmation = in.readByte() == 1;
     }
 
     @Override
     public void writeToParcel(Parcel out, int flags) {
         super.writeToParcel(out, flags);
         out.writeString(SAS);
-        out.writeByte((byte) (needSASConfirmation ? 1 : 0));
+        out.writeByte((byte) (displaySas ? 1 : 0));
         out.writeByte((byte) (isInitialized ? 1 : 0));
+        out.writeByte((byte) (alertIfZrtpNotSupported ? 1 : 0));
+        out.writeByte((byte) (displaySASOnHold ? 1 : 0));
+        out.writeByte((byte) (zrtpNotSupported ? 1 : 0));
+        out.writeByte((byte) (needSASConfirmation ? 1 : 0));
     }
 
     public static final Parcelable.Creator<SecureSipCall> CREATOR = new Parcelable.Creator<SecureSipCall>() {
@@ -137,7 +155,7 @@
     };
 
     public void sasConfirmedByZrtpLayer(boolean verified) {
-
+        // Not used
     }
 
     public void setZrtpNotSupported(boolean zrtpNotSupported) {
