diff --git a/RingWinClient.pro b/RingWinClient.pro
index 7b3c996..fd52a65 100644
--- a/RingWinClient.pro
+++ b/RingWinClient.pro
@@ -39,7 +39,8 @@
     videowidget.cpp \
     utils.cpp \
     wizarddialog.cpp \
-    windowscontactbackend.cpp
+    windowscontactbackend.cpp \
+    historydelegate.cpp
 
 HEADERS  += mainwindow.h \
     callwidget.h \
@@ -56,7 +57,8 @@
     videowidget.h \
     utils.h \
     wizarddialog.h \
-    windowscontactbackend.h
+    windowscontactbackend.h \
+    historydelegate.h
 
 FORMS    += mainwindow.ui \
     callwidget.ui \
diff --git a/callwidget.cpp b/callwidget.cpp
index 100fa4a..52b055c 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -19,6 +19,7 @@
 #include "callwidget.h"
 #include "ui_callwidget.h"
 
+#include <memory>
 
 #include "imconversationmanager.h"
 #include "instantmessagingmodel.h"
@@ -28,6 +29,7 @@
 #include "accountmodel.h"
 #include "categorizedcontactmodel.h"
 #include "windowscontactbackend.h"
+#include "historydelegate.h"
 
 #include "wizarddialog.h"
 
@@ -71,10 +73,18 @@
         PersonModel::instance()->
                 addCollection<WindowsContactBackend>(LoadOptions::FORCE_ENABLED);
 
-        ui->historyList->setModel(CategorizedHistoryModel::instance());
+        auto historyModel = std::unique_ptr<QSortFilterProxyModel>(new QSortFilterProxyModel());
+        historyModel->setSourceModel(CategorizedHistoryModel::instance());
+        historyModel->setSortRole(static_cast<int>(Call::Role::Date));
+        historyModel->sort(0,Qt::DescendingOrder);
+        ui->historyList->setModel(historyModel.get());
+        ui->historyList->setHeaderHidden(true);
+        ui->historyList->setItemDelegate(new HistoryDelegate());
+        historyModel.release();
+
         CategorizedContactModel::instance()->setSortAlphabetical(false);
         ui->contactView->setModel(CategorizedContactModel::instance());
-        ui->contactView->setHeaderHidden(true);
+
         ui->speakerSlider->setValue(Audio::Settings::instance()->playbackVolume());
         ui->micSlider->setValue(Audio::Settings::instance()->captureVolume());
 
@@ -151,7 +161,7 @@
 CallWidget::on_acceptButton_clicked()
 {
     if (actualCall_ != nullptr)
-       actualCall_->performAction(Call::Action::ACCEPT);
+        actualCall_->performAction(Call::Action::ACCEPT);
     ui->callInvite->setVisible(false);
 }
 
@@ -202,7 +212,7 @@
         ui->videoWidget->hide();
     } else if (call->state() == Call::State::HOLD) {
         ui->videoWidget->hide();
-    } else if (call->state() == Call::State::CURRENT){
+    } else if (call->state() == Call::State::CURRENT) {
         ui->videoWidget->show();
         ui->messageOutput->setModel(
                     IMConversationManager::instance()->getModel(actualCall_));
@@ -289,3 +299,13 @@
         outCall->performAction(Call::Action::ACCEPT);
     }
 }
+
+void CallWidget::on_historyList_doubleClicked(const QModelIndex &index)
+{
+    QString number = index.model()->data(index, static_cast<int>(Call::Role::Number)).toString();
+    if (not number.isEmpty()) {
+        auto outCall = CallModel::instance()->dialingCall(number);
+        outCall->setDialNumber(number);
+        outCall->performAction(Call::Action::ACCEPT);
+    }
+}
diff --git a/callwidget.h b/callwidget.h
index ee31f78..726a067 100644
--- a/callwidget.h
+++ b/callwidget.h
@@ -65,6 +65,7 @@
     void on_micSlider_sliderMoved(int position);
     void on_micSlider_sliderReleased();
     void on_contactView_doubleClicked(const QModelIndex &index);
+    void on_historyList_doubleClicked(const QModelIndex &index);
 
 private slots:
     void callIncoming(Call *call);
diff --git a/callwidget.ui b/callwidget.ui
index d8b657f..99dbbaf 100644
--- a/callwidget.ui
+++ b/callwidget.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>700</width>
-    <height>668</height>
+    <height>695</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -125,7 +125,7 @@
             <number>4</number>
            </property>
            <item>
-            <widget class="QTreeView" name="contactView"/>
+            <widget class="QListView" name="contactView"/>
            </item>
           </layout>
          </widget>
diff --git a/historydelegate.cpp b/historydelegate.cpp
new file mode 100644
index 0000000..99488ba
--- /dev/null
+++ b/historydelegate.cpp
@@ -0,0 +1,71 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Savoir-Faire Linux                                *
+ * Author: Edric Ladent Milaret <edric.ladent-milaret@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, see <http://www.gnu.org/licenses/>.   *
+ **************************************************************************/
+
+#include "historydelegate.h"
+
+#include <QDebug>
+
+HistoryDelegate::HistoryDelegate(QObject *parent) :
+    QStyledItemDelegate(parent)
+{
+
+}
+
+void
+HistoryDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+                       const QModelIndex &index) const
+{
+    QStyleOptionViewItemV4 opt = option;
+    initStyleOption(&opt, index);
+
+    if (index.column() == 0) {
+        auto name = index.model()->data(index, Qt::DisplayRole).toString();
+        auto number = index.model()->data(index, static_cast<int>(Call::Role::Number)).toString();
+        opt.text = "";
+        QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
+        style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
+        auto rect = opt.rect;
+        QPalette::ColorGroup cg = opt.state & QStyle::State_Enabled ? QPalette::Normal : QPalette::Disabled;
+        if (cg == QPalette::Normal && !(opt.state & QStyle::State_Active))
+            cg = QPalette::Inactive;
+        painter->setPen(opt.palette.color(cg, QPalette::Text));
+        painter->setOpacity(1.0);
+        if (not number.isEmpty()) {
+            painter->drawText(QRect(rect.left(), rect.top(), rect.width(), rect.height()/2),
+                              opt.displayAlignment, name);
+            painter->setOpacity(0.7);
+            painter->drawText(QRect(rect.left(), rect.top() + rect.height()/2, rect.width(), rect.height()/2),
+                              opt.displayAlignment, number);
+        } else {
+            painter->drawText(QRect(rect.left(), rect.top(), rect.width(), rect.height()),
+                              opt.displayAlignment, name);
+        }
+    }
+}
+
+QSize
+HistoryDelegate::sizeHint(const QStyleOptionViewItem & option, const QModelIndex & index ) const
+{
+    QSize result = QStyledItemDelegate::sizeHint(option, index);
+    if (not index.model()->data(index, static_cast<int>(Call::Role::Number)).toString().isEmpty()) {
+        result.setHeight(result.height()*2);
+    } else {
+        result.setHeight(result.height());
+    }
+    return result;
+}
diff --git a/historydelegate.h b/historydelegate.h
new file mode 100644
index 0000000..d15424f
--- /dev/null
+++ b/historydelegate.h
@@ -0,0 +1,44 @@
+/***************************************************************************
+ * Copyright (C) 2015 by Savoir-Faire Linux                                *
+ * Author: Edric Ladent Milaret <edric.ladent-milaret@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, see <http://www.gnu.org/licenses/>.   *
+ **************************************************************************/
+
+#ifndef HISTORYDELEGATE_H
+#define HISTORYDELEGATE_H
+
+#include <QObject>
+#include <QString>
+#include <QPainter>
+#include <QApplication>
+#include <QStyledItemDelegate>
+
+#include "categorizedhistorymodel.h"
+
+class HistoryDelegate : public QStyledItemDelegate
+{
+    Q_OBJECT
+public:
+    explicit HistoryDelegate(QObject *parent = 0);
+
+protected:
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+signals:
+
+public slots:
+};
+
+#endif // HISTORYDELEGATE_H
