diff --git a/chatdialog.ui b/chatdialog.ui
index ed466e7..072d139 100644
--- a/chatdialog.ui
+++ b/chatdialog.ui
@@ -17,7 +17,7 @@
         <number>6</number>
       </property>
       <item>
-        <layout class="QHBoxLayout">
+        <layout class="QVBoxLayout">
           <property name="margin">
            <number>0</number>
           </property>
@@ -25,6 +25,13 @@
             <number>6</number>
           </property>
           <item>
+            <widget class="DigestTreeViewer" name="treeViewer">
+            <property name="focusPolicy">
+              <enum>Qt::NoFocus</enum>
+            </property>
+            </widget>
+          </item>
+          <item>
             <widget class="QTextEdit" name="textEdit">
               <property name="focusPolicy">
                 <enum>Qt::NoFocus</enum>
@@ -34,13 +41,6 @@
               </property>
             </widget>
           </item>
-          <item>
-            <widget class="QListWidget" name="listWidget">
-              <property name="focusPolicy">
-                <enum>Qt::NoFocus</enum>
-              </property>
-            </widget>
-          </item>
         </layout>
       </item>
       <item>
diff --git a/digesttreescene.cpp b/digesttreescene.cpp
new file mode 100644
index 0000000..8d2d5c3
--- /dev/null
+++ b/digesttreescene.cpp
@@ -0,0 +1,97 @@
+#include "digesttreescene.h"
+#include <QtGui>
+#include "ogdf/basic/Array.h"
+#include "ogdf/basic/Graph_d.h"
+#include "ogdf/tree/TreeLayout.h"
+#include <vector>
+#include <iostream>
+#include <assert.h>
+
+static const double Pi = 3.14159265358979323846264338327950288419717;
+static double TwoPi = 2.0 * Pi;
+
+DigestTreeScene::DigestTreeScene(QWidget *parent)
+  : QGraphicsScene(parent)
+{
+  m_graph.clear();
+  std::vector<ogdf::node> v(5);
+  for (int i = 0; i < 5; i++)
+    v[i] = m_graph.newNode();
+
+  m_graph.newEdge(v[0], v[1]);
+  m_graph.newEdge(v[0], v[2]);
+  m_graph.newEdge(v[0], v[3]);
+  m_graph.newEdge(v[0], v[4]);
+
+  ogdf::GraphAttributes GA(m_graph);
+  GA.initAttributes(ogdf::GraphAttributes::nodeLabel);
+  int nodeWidth = 30, nodeHeight = 30, siblingDistance = 60;
+  ogdf::TreeLayout layout;
+  layout.siblingDistance(siblingDistance);
+  layout.rootSelection(ogdf::TreeLayout::rootIsSource);
+  //layout.call(GA);
+  layout.callSortByPositions(GA, m_graph);
+
+  int width = GA.boundingBox().width();
+  std::cout << "GA width " << width << std::endl;
+  int height = GA.boundingBox().height();
+  std::cout << "GA height " << height << std::endl;
+  setSceneRect(QRect(0, 0, width + nodeWidth, height + nodeHeight));
+  GA.setAllWidth(nodeWidth);
+  GA.setAllHeight(nodeHeight);
+
+  ogdf::edge e;
+  forall_edges(e, m_graph) {
+    ogdf::node source = e->source();
+    ogdf::node target = e->target();
+    int x1 = GA.x(source), y1 = -GA.y(source);
+    int x2 = GA.x(target), y2 = -GA.y(target);
+  //  QPainterPath p;
+    QPointF src(x1 + nodeWidth/2, y1 + nodeHeight/2);
+    QPointF dest(x2 + nodeWidth/2, y2 + nodeHeight/2);
+    QLineF line(src, dest);
+    //p.moveTo(x1 + nodeWidth/2, y1 + nodeHeight/2);
+    //p.lineTo(x2 + nodeWidth/2, y2 + nodeHeight/2);
+    //addPath(p, QPen(Qt::black), QBrush(Qt::black));
+    addLine(line, QPen(Qt::black));
+    
+    double angle = ::acos(line.dx() / line.length());
+
+    double arrowSize = 10;
+
+   QPointF sourceArrowP0 = src + QPointF(nodeWidth/2 * line.dx() / line.length(),  nodeHeight/2 * line.dy() / line.length());
+   //QPointF sourceArrowP0 = src + QPointF(cos(angle) * nodeHeight/2, sin(angle) * nodeHeight/2);
+
+   std::cout << "src " << src.x() << ", " << src.y() << std::endl;
+   std::cout << "dest " << dest.x() << ", " << dest.y() << std::endl;
+   std::cout << "line dx " << line.dx() << ", dy " << line.dy() << ", lenght << " << line.length() << std::endl;
+   std::cout << "sap " << sourceArrowP0.x() << ", " << sourceArrowP0.y() << std::endl;
+
+   QPointF sourceArrowP1 = sourceArrowP0 + QPointF(cos(angle + Pi / 3 - Pi/2) * arrowSize,
+                                                    sin(angle + Pi / 3 - Pi/2) * arrowSize);
+      QPointF sourceArrowP2 = sourceArrowP0 + QPointF(cos(angle + Pi - Pi / 3 - Pi/2) * arrowSize,
+                                                         sin(angle + Pi - Pi / 3 - Pi/2) * arrowSize);
+    QLineF line1(sourceArrowP1, sourceArrowP2);
+    addLine(line1, QPen(Qt::black));
+     
+      addPolygon(QPolygonF() << sourceArrowP0<< sourceArrowP1 << sourceArrowP2, QPen(Qt::black), QBrush(Qt::black));
+  }
+
+  /*
+  ogdf::node n;
+  forall_nodes(n, m_graph) {
+    double x = GA.x(n);
+
+    double y = -GA.y(n);
+    double w = GA.width(n);
+    double h = GA.height(n);
+    QRectF boundingRect(x, y, w, h);
+ 
+    addEllipse(boundingRect, QPen(Qt::black), QBrush(Qt::green));
+    QGraphicsTextItem *text = addText(QString(GA.labelNode(n).cstr()));
+    text->setPos(x, y);
+ 
+  }
+    */
+}
+
diff --git a/digesttreescene.h b/digesttreescene.h
new file mode 100644
index 0000000..0d98f7e
--- /dev/null
+++ b/digesttreescene.h
@@ -0,0 +1,17 @@
+#ifndef DIGESTTREESCENE_H
+#define DIGESTTREESCENE_H
+
+#include <QtGui/QGraphicsScene>
+#include "ogdf/basic/GraphAttributes.h"
+#include "ogdf/basic/Graph.h"
+
+class DigestTreeScene : public QGraphicsScene
+{
+  Q_OBJECT
+
+public:
+  DigestTreeScene(QWidget *parent = 0);
+private:
+  ogdf::Graph m_graph;
+};
+#endif
diff --git a/digesttreeviewer.cpp b/digesttreeviewer.cpp
new file mode 100644
index 0000000..cb52a9e
--- /dev/null
+++ b/digesttreeviewer.cpp
@@ -0,0 +1,10 @@
+#include "digesttreeviewer.h"
+#include "digesttreescene.h"
+#include <QtGui>
+
+DigestTreeViewer::DigestTreeViewer(QWidget *parent)
+  : QGraphicsView(parent) 
+{
+  DigestTreeScene *scene = new DigestTreeScene(this);
+  setScene(scene);
+}
diff --git a/digesttreeviewer.h b/digesttreeviewer.h
new file mode 100644
index 0000000..0f09f67
--- /dev/null
+++ b/digesttreeviewer.h
@@ -0,0 +1,13 @@
+#ifndef DIGESTTREEVIEWER_H
+#define DIGESTTREEVIEWER_H
+#include <QtGui/QGraphicsView>
+
+class DigestTreeViewer : public QGraphicsView
+{ 
+  Q_OBJECT
+
+public:
+  DigestTreeViewer(QWidget *parent = 0);
+};
+
+#endif
diff --git a/sync-demo.pro b/sync-demo.pro
index e912e77..b201cb7 100644
--- a/sync-demo.pro
+++ b/sync-demo.pro
@@ -1,15 +1,20 @@
 TEMPLATE = app
 TARGET = sync-demo
-HEADERS = chatdialog.h 
+HEADERS = chatdialog.h \
+          digesttreeviewer.h \
+          digesttreescene.h
 
 SOURCES = main.cpp \
-          chatdialog.cpp
+          chatdialog.cpp \
+          digesttreeviewer.cpp \
+          digesttreescene.cpp
 
 FORMS = chatdialog.ui
 
+QMAKE_CXXFLAGS *= -g
 
-QMAKE_LIBDIR *= /opt/local/lib /usr/local/lib /usr/lib
-INCLUDEPATH *= /opt/local/include /usr/local/include
-LIBS *= -lccn -lssl -lcrypto 
+QMAKE_LIBDIR *= /opt/local/lib /usr/local/lib /usr/lib ../../../third_party/OGDF/_release
+INCLUDEPATH *= /opt/local/include /usr/local/include ../../../third_party/OGDF
+LIBS *= -lccn -lssl -lcrypto -lpthread -lOGDF
 CONFIG += console 
 
