diff --git a/src/org/sflphone/client/HomeActivity.java b/src/org/sflphone/client/HomeActivity.java
index 4fc6e9c..f03f80b 100644
--- a/src/org/sflphone/client/HomeActivity.java
+++ b/src/org/sflphone/client/HomeActivity.java
@@ -86,6 +86,7 @@
 import android.view.Gravity;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.WindowManager;
 import android.widget.RelativeLayout;
 import android.widget.Toast;
 
@@ -637,6 +638,14 @@
     }
 
     @Override
+    public void toggleForSearchDrawer() {
+        if (mContactDrawer.isExpanded()) {
+            mContactDrawer.collapsePane();
+        } else
+            mContactDrawer.expandPane();
+    }
+
+    @Override
     public void confCreated(Intent intent) {
         // TODO Auto-generated method stub
 
diff --git a/src/org/sflphone/fragments/ContactListFragment.java b/src/org/sflphone/fragments/ContactListFragment.java
index f6f57a4..5cb5838 100644
--- a/src/org/sflphone/fragments/ContactListFragment.java
+++ b/src/org/sflphone/fragments/ContactListFragment.java
@@ -127,6 +127,10 @@
         public void setDragView(RelativeLayout relativeLayout) {
             
         }
+
+        @Override
+        public void toggleForSearchDrawer() {
+        }
     };
 
     public interface Callbacks {
@@ -144,6 +148,8 @@
 
         void setDragView(RelativeLayout relativeLayout);
 
+        void toggleForSearchDrawer();
+
     }
 
     @Override
@@ -185,7 +191,7 @@
                 mQuickReturnSearchView.setOnQueryTextListener(ContactListFragment.this);
                 mQuickReturnSearchView.setIconified(false);
                 mQuickReturnSearchView.setFocusable(true);
-                mCallbacks.toggleDrawer();
+                mCallbacks.toggleForSearchDrawer();
             }
         });
 
@@ -274,7 +280,7 @@
 
             @Override
             public void onItemClick(AdapterView<?> arg0, View view, int pos, long id) {
-
+                Log.i(TAG, "Opening Item");
                 mSwipeLvTouchListener.openItem(view, pos, id);
             }
         });
diff --git a/src/org/sflphone/fragments/DetailsHistoryEntryFragment.java b/src/org/sflphone/fragments/DetailsHistoryEntryFragment.java
index e697b7e..4affba3 100644
--- a/src/org/sflphone/fragments/DetailsHistoryEntryFragment.java
+++ b/src/org/sflphone/fragments/DetailsHistoryEntryFragment.java
@@ -66,7 +66,6 @@
     View mheaderView;
     DetailHistoryAdapter mAdapter;
     HistoryEntry toDisplay;
-    @SuppressWarnings("unused")
     private static final String TAG = DetailsHistoryEntryFragment.class.getSimpleName();
     ContactPictureTask tasker;
 
@@ -120,6 +119,11 @@
         super.onCreate(savedInstanceState);
 
         toDisplay = (HistoryEntry) getArguments().get("entry");
+
+        Log.i(TAG, "Ok, we got " + toDisplay.getIncoming_sum() + " incoming calls");
+        Log.i(TAG, "Ok, we got " + toDisplay.getMissed_sum() + " missed calls");
+        Log.i(TAG, "Ok, we got " + toDisplay.getOutgoing_sum() + " outgoing calls");
+
         mAdapter = new DetailHistoryAdapter(toDisplay.getCalls(), getActivity());
     }
 
diff --git a/src/org/sflphone/fragments/HistoryFragment.java b/src/org/sflphone/fragments/HistoryFragment.java
index 94bc3b9..f602020 100644
--- a/src/org/sflphone/fragments/HistoryFragment.java
+++ b/src/org/sflphone/fragments/HistoryFragment.java
@@ -220,7 +220,6 @@
 
             // SipCall call = (SipCall) mCallList.values().toArray()[position];
             entryView.displayName.setText(dataset.get(pos).getContact().getmDisplayName());
-
             infos_fetcher.execute(new ContactPictureTask(mContext, entryView.photo, dataset.get(pos).getContact()));
 
             entryView.incoming.setText(getString(R.string.hist_in_calls, dataset.get(pos).getIncoming_sum()));
diff --git a/src/org/sflphone/loaders/HistoryLoader.java b/src/org/sflphone/loaders/HistoryLoader.java
index 94c01e5..c454cc8 100644
--- a/src/org/sflphone/loaders/HistoryLoader.java
+++ b/src/org/sflphone/loaders/HistoryLoader.java
@@ -46,10 +46,15 @@
             ArrayList<HashMap<String, String>> history = (ArrayList<HashMap<String, String>>) service.getHistory();
             for (HashMap<String, String> entry : history) {
 
+                CallContact contact = null;
+                String contactName = entry.get(ServiceConstants.history.DISPLAY_NAME_KEY);
                 String number_called = entry.get(ServiceConstants.history.PEER_NUMBER_KEY);
+                if (contactName.isEmpty()) {
+                    contact = ContactBuilder.buildUnknownContact(number_called);
+                } else {
+                    contact = ContactBuilder.getInstance().buildSimpleContact(contactName, number_called);
+                }
 
-//                Log.w(TAG, "----------------------Number" + number_called);
-                CallContact c = null;
                 if (historyEntries.containsKey(number_called)) {
                     // It's a direct match
                     historyEntries.get(number_called).addHistoryCall(new HistoryCall(entry));
@@ -59,19 +64,17 @@
                     Matcher m = p.matcher(number_called);
                     if (m.find()) {
 
-//                        Log.i(TAG, "Pattern found:" + m.group(1));
                         if (historyEntries.containsKey(m.group(1) + "@" + m.group(2))) {
                             historyEntries.get(m.group(1) + "@" + m.group(2)).addHistoryCall(new HistoryCall(entry));
                         } else {
-                            c = ContactBuilder.buildUnknownContact(m.group(1) + "@" + m.group(2));
-                            HistoryEntry e = new HistoryEntry(entry.get(ServiceConstants.history.ACCOUNT_ID_KEY), c);
+                            HistoryEntry e = new HistoryEntry(entry.get(ServiceConstants.history.ACCOUNT_ID_KEY), contact);
                             e.addHistoryCall(new HistoryCall(entry));
                             historyEntries.put(m.group(1) + "@" + m.group(2), e);
                         }
 
                     } else {
-                        c = ContactBuilder.buildUnknownContact(number_called);
-                        HistoryEntry e = new HistoryEntry(entry.get(ServiceConstants.history.ACCOUNT_ID_KEY), c);
+
+                        HistoryEntry e = new HistoryEntry(entry.get(ServiceConstants.history.ACCOUNT_ID_KEY), contact);
                         e.addHistoryCall(new HistoryCall(entry));
                         historyEntries.put(number_called, e);
                     }
diff --git a/src/org/sflphone/model/CallContact.java b/src/org/sflphone/model/CallContact.java
index adb7474..fd70395 100644
--- a/src/org/sflphone/model/CallContact.java
+++ b/src/org/sflphone/model/CallContact.java
@@ -182,6 +182,13 @@
             return result;
         }
 
+        public CallContact buildSimpleContact(String name, String number_called) {
+            ArrayList<Phone> phones = new ArrayList<Phone>();
+            phones.add(new Phone(number_called, 0));
+
+            return new CallContact(-1, name, 0, phones, new ArrayList<CallContact.Phone>(), "", false);
+        }
+
     }
 
     @Override
diff --git a/src/org/sflphone/model/HistoryEntry.java b/src/org/sflphone/model/HistoryEntry.java
index 578a030..278277b 100644
--- a/src/org/sflphone/model/HistoryEntry.java
+++ b/src/org/sflphone/model/HistoryEntry.java
@@ -85,11 +85,13 @@
 
     public void addHistoryCall(HistoryCall historyCall) {
         calls.put(historyCall.call_start, historyCall);
-        if (historyCall.getDirection().contentEquals(ServiceConstants.history.OUTGOING_STRING)) {
-            ++outgoing_sum;
-        } else if (historyCall.isIncoming()) {
+        if (historyCall.isIncoming()) {
             ++incoming_sum;
+        } else {
+            ++outgoing_sum;
         }
+        if (historyCall.isMissed())
+            missed_sum++;
     }
 
     public String getNumber() {
@@ -134,7 +136,6 @@
         dest.writeList(new ArrayList<HistoryCall>(calls.values()));
         dest.writeList(new ArrayList<Long>(calls.keySet()));
 
-        dest.writeMap(calls);
         dest.writeString(accountID);
         dest.writeInt(missed_sum);
         dest.writeInt(outgoing_sum);
@@ -242,7 +243,7 @@
         }
 
         public String getDisplayName() {
-            return displayName;
+            return displayName.substring(0, displayName.indexOf('@'));
         }
 
         @Override
