Index: src/UIElements/Views/Qt4/QtGeometryList.cpp
===================================================================
--- src/UIElements/Views/Qt4/QtGeometryList.cpp	(revision 48eab88be721d77d193490f29a1fa50334c2e8fb)
+++ src/UIElements/Views/Qt4/QtGeometryList.cpp	(revision 6116df7dd9b5466f8f51d501cf184b27d4fa78b5)
@@ -45,4 +45,5 @@
 
 #include <QAbstractItemView>
+#include <QCoreApplication>
 
 using namespace std;
@@ -56,5 +57,6 @@
 {
   setColumnCount(COLUMNCOUNT);
-  setSelectionMode(QAbstractItemView::NoSelection);
+  setSelectionMode(QAbstractItemView::SingleSelection);
+  setSortingEnabled(true);
 
   QStringList header;
@@ -62,4 +64,7 @@
 	  header << COLUMNNAMES[i];
 	setHeaderLabels(header);
+  sortByColumn(0);
+
+  setStyleSheet("QTreeView::item:hover{background-color:#999966;}");
 
 	refill(NULL);
@@ -68,4 +73,6 @@
 	GeometryRegistry::getInstance().signOn(this, GeometryRegistry::GeometryInserted);
 	GeometryRegistry::getInstance().signOn(this, GeometryRegistry::GeometryRemoved);
+
+	QCoreApplication::instance()->installEventFilter(this);
 }
 
@@ -129,2 +136,58 @@
 void QtGeometryList::subjectKilled(Observable *publisher) {
 }
+
+bool QtGeometryList::eventFilter(QObject* object, QEvent* event)
+{
+    if(event->type() == QEvent::MouseMove)
+    {
+         mouseMoveFunction(static_cast<QMouseEvent*>(event));
+    }
+    // Repeat for other mouse events
+
+   // returning true blocks event returning false doesnt so if you want to block all mouse events except what your handling then return true inside each of your ifs
+   return false;
+}
+
+void QtGeometryList::mouseMoveFunction(QMouseEvent * event)
+{
+  if (event->type() == QEvent::MouseMove) {
+    QTreeWidgetItem* current = itemAt(event->pos());
+    if (current == NULL)
+      return;
+    // reset all tooltips
+    bool NoneSelected = true;
+    for (int i=0;i<topLevelItemCount();i++){
+      QTreeWidgetItem *item = topLevelItem(i);
+      item->setToolTip(NAME, tr(""));
+      item->setToolTip(VECTOR, tr(""));
+      NoneSelected &= !item->isSelected();
+    }
+    const std::string name = current->text(NAME).toStdString();
+    GeometryObject *v = GeometryRegistry::getInstance().getByName(name);
+    const Vector currentVec = v->getVector();
+    if ((NoneSelected) || (current->isSelected())) {
+      // show norm
+      std::string tooltiptext("Length:");
+      tooltiptext += toString<double>(currentVec.Norm());
+      tooltiptext += std::string(" AngstrÃ¶m");
+      current->setToolTip(NAME, trUtf8(tooltiptext.c_str()));
+      current->setToolTip(VECTOR, trUtf8(tooltiptext.c_str()));
+    } else {
+      for (int i=0;i<topLevelItemCount();i++){
+        QTreeWidgetItem *item = topLevelItem(i);
+        if (item->isSelected()) {
+          // show angle
+          const std::string othername = item->text(NAME).toStdString();
+          GeometryObject *otherv = GeometryRegistry::getInstance().getByName(othername);
+          const Vector otherVec = otherv->getVector();
+          std::string tooltiptext("Angle:");
+          tooltiptext += toString<double>(currentVec.Angle(otherVec)*180/M_PI);
+          tooltiptext += std::string(" deg");
+          current->setToolTip(NAME, trUtf8(tooltiptext.c_str()));
+          current->setToolTip(VECTOR, trUtf8(tooltiptext.c_str()));
+          break;
+        }
+      }
+    }
+  }
+}
Index: src/UIElements/Views/Qt4/QtGeometryList.hpp
===================================================================
--- src/UIElements/Views/Qt4/QtGeometryList.hpp	(revision 48eab88be721d77d193490f29a1fa50334c2e8fb)
+++ src/UIElements/Views/Qt4/QtGeometryList.hpp	(revision 6116df7dd9b5466f8f51d501cf184b27d4fa78b5)
@@ -16,4 +16,6 @@
 
 #include <QtGui/QTreeWidget>
+#include <QMouseEvent>
+
 #include "CodePatterns/Observer/Observer.hpp"
 
@@ -27,4 +29,8 @@
   QtGeometryList(QWidget * _parent=0);
   virtual ~QtGeometryList();
+
+protected:
+  bool eventFilter(QObject* object, QEvent* event);
+  void mouseMoveFunction(QMouseEvent * event);
 
 protected:
