diff --git a/RingWinClient.pro b/RingWinClient.pro
index 6186cbaca876dd6b7174aa896919d007d1f17fe8..3ce82f2d8c0d9387ca14d01d07f7cd855e760c17 100644
--- a/RingWinClient.pro
+++ b/RingWinClient.pro
@@ -42,7 +42,8 @@ SOURCES += main.cpp\
     utils.cpp \
     wizarddialog.cpp \
     windowscontactbackend.cpp \
-    historydelegate.cpp
+    historydelegate.cpp \
+    contactdelegate.cpp
 
 HEADERS  += mainwindow.h \
     callwidget.h \
@@ -60,7 +61,8 @@ HEADERS  += mainwindow.h \
     utils.h \
     wizarddialog.h \
     windowscontactbackend.h \
-    historydelegate.h
+    historydelegate.h \
+    contactdelegate.h
 
 FORMS    += mainwindow.ui \
     callwidget.ui \
diff --git a/callwidget.cpp b/callwidget.cpp
index b61b80c68304391ee1bec5990b2cf033fa2bd7cb..ff6072473b5dcc045f1f200395e832c3bea3bc4a 100644
--- a/callwidget.cpp
+++ b/callwidget.cpp
@@ -30,6 +30,7 @@
 #include "categorizedcontactmodel.h"
 #include "windowscontactbackend.h"
 #include "historydelegate.h"
+#include "contactdelegate.h"
 
 #include "wizarddialog.h"
 
@@ -84,6 +85,7 @@ CallWidget::CallWidget(QWidget *parent) :
 
         CategorizedContactModel::instance()->setSortAlphabetical(false);
         ui->contactView->setModel(CategorizedContactModel::instance());
+        ui->contactView->setItemDelegate(new ContactDelegate());
 
         ui->speakerSlider->setValue(Audio::Settings::instance()->playbackVolume());
         ui->micSlider->setValue(Audio::Settings::instance()->captureVolume());
diff --git a/contactdelegate.cpp b/contactdelegate.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e95b4fd75f3f70a08e820a6f227f9807a4f2d1f7
--- /dev/null
+++ b/contactdelegate.cpp
@@ -0,0 +1,102 @@
+/***************************************************************************
+ * 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 "contactdelegate.h"
+
+#include "person.h"
+#include "contactmethod.h"
+
+ContactDelegate::ContactDelegate(QObject *parent)
+    : QStyledItemDelegate(parent)
+{
+}
+
+
+void
+ContactDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+                       const QModelIndex &index) const
+{
+    QStyleOptionViewItemV4 opt = option;
+    initStyleOption(&opt, index);
+
+    if (index.column() == 0) {
+        QString name = index.model()->data(index, Qt::DisplayRole).toString();
+        opt.text = "";
+        QStyle *style = opt.widget ? opt.widget->style() : QApplication::style();
+        style->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);
+        QRect 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);
+        painter->drawText(QRect(rect.left()+sizeImage_+5, rect.top(),
+                                rect.width(), rect.height()/2),
+                                opt.displayAlignment, name);
+
+        QVariant var_c = index.child(0,0).data(
+                    static_cast<int>(Person::Role::Object));
+        if (var_c.isValid()) {
+            Person *c = var_c.value<Person *>();
+            QVariant var_p = c->photo();
+            painter->drawRect(QRect(rect.left(), rect.top(),
+                                    sizeImage_+1, sizeImage_+1));
+            if (var_p.isValid()) {
+                painter->drawImage(QRect(rect.left()+1, rect.top()+1,
+                                         sizeImage_, sizeImage_),
+                                   var_p.value<QImage>());
+            } else {
+                QImage defaultImage(":images/account.png");
+                painter->drawImage(QRect(rect.left(), rect.top(),
+                                         sizeImage_, sizeImage_),
+                                   defaultImage);
+            }
+            switch (c->phoneNumbers().size()) {
+            case 0:
+                break;
+            case 1:
+            {
+                QString number;
+                QVariant var_n =
+                        c->phoneNumbers().first()->roleData(Qt::DisplayRole);
+                if (var_n.isValid())
+                    number = var_n.value<QString>();
+
+                painter->drawText(QRect(rect.left()+sizeImage_+5,
+                                        rect.top() + rect.height()/2,
+                                        rect.width(), rect.height()/2),
+                                  opt.displayAlignment, number);
+                break;
+            }
+            default:
+                /* more than one, for now don't show any of the contact methods */
+                break;
+            }
+        }
+    }
+}
+
+QSize
+ContactDelegate::sizeHint(const QStyleOptionViewItem &option,
+                          const QModelIndex &index) const
+{
+    QSize result = QStyledItemDelegate::sizeHint(option, index);
+    result.setHeight((result.height()*2)+2);
+    return result;
+}
diff --git a/contactdelegate.h b/contactdelegate.h
new file mode 100644
index 0000000000000000000000000000000000000000..30d857ae74ab5d152e065ae69968430d1b47d1a5
--- /dev/null
+++ b/contactdelegate.h
@@ -0,0 +1,42 @@
+/***************************************************************************
+ * 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 CONTACTDELEGATE_H
+#define CONTACTDELEGATE_H
+
+#include <QObject>
+#include <QString>
+#include <QPainter>
+#include <QApplication>
+#include <QStyledItemDelegate>
+
+class ContactDelegate : public QStyledItemDelegate
+{
+    Q_OBJECT
+public:
+    explicit ContactDelegate(QObject *parent = 0);
+
+protected:
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+
+private:
+    constexpr static int sizeImage_ = 49;
+};
+
+#endif // CONTACTDELEGATE_H
diff --git a/images/account.png b/images/account.png
new file mode 100644
index 0000000000000000000000000000000000000000..086b752bb34604e3f576a285d1172f55229f2898
Binary files /dev/null and b/images/account.png differ
diff --git a/images/sort-variant.png b/images/sort-variant.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f926cc16ebe28805c7862f30048fbcbc3a8d2b6
Binary files /dev/null and b/images/sort-variant.png differ
diff --git a/windowscontactbackend.cpp b/windowscontactbackend.cpp
index 95a76809a49a0cf892d607e395357045de1b797d..f8adb26ef91bd5c3f7576bd051b8e9d496a54213 100644
--- a/windowscontactbackend.cpp
+++ b/windowscontactbackend.cpp
@@ -134,11 +134,12 @@ WindowsContactBackend::loadRun()
                     else if (name == "Photo") {
                         //FIXME: It seems to be possible to have multiple photo...
                         reader.readNext();
-                        if (reader.name().toString() == "Value") {
+                        if (reader.name().toString() == "Url") {
                             QString photoValue = reader.readElementText();
-                            QByteArray byteArray;
-                            byteArray.append(photoValue);
-                            p->setPhoto(byteArray);
+                            QImage photo;
+                            photo.load(photoValue);
+                            p->setPhoto(photo.scaled(sizePhoto_,sizePhoto_, Qt::KeepAspectRatio,
+                                                     Qt::SmoothTransformation));
                         }
                     }
                     else if (name == "EmailAddress") {
diff --git a/windowscontactbackend.h b/windowscontactbackend.h
index a2a3550b63a6b318cf330205bc7b3b8e09816b22..c804a064fde1dd2c185474946ce32fad4103b434 100644
--- a/windowscontactbackend.h
+++ b/windowscontactbackend.h
@@ -24,6 +24,7 @@
 #include <QDir>
 #include <QXmlStreamReader>
 #include <QtConcurrent/QtConcurrent>
+#include <QImage>
 
 #include "person.h"
 #include "collectioninterface.h"
@@ -49,6 +50,7 @@ private:
     bool loadRun();
 private:
     CollectionMediator<Person>*  mediator_;
+    constexpr static int sizePhoto_ = 50;
 };
 
 class WindowsContactEditor : public CollectionEditor<Person>