diff --git a/linux/Resources/status.xslt b/linux/Resources/status.xslt
index bf33e49..8192628 100644
--- a/linux/Resources/status.xslt
+++ b/linux/Resources/status.xslt
@@ -1,28 +1,20 @@
 <xsl:stylesheet version = '2.0'
                 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
 
-<xsl:template match="/ndnd">
-<html><body>
-<xsl:apply-templates select="forwarding/fentry" />
-</body></html>
+<xsl:template match="/">
+<stats>
+  <data>
+    <in><xsl:value-of select="sum(/ndnd/faces/face/meters/datain/total)" /></in>
+    <out><xsl:value-of select="sum(/ndnd/faces/face/meters/dataout/total)" /></out>
+    <!-- <in><xsl:value-of select="sum(/ndnd/faces/face/meters/datain/persec)" /></in> -->
+    <!-- <out><xsl:value-of select="sum(/ndnd/faces/face/meters/dataout/persec)" /></out> -->
+  </data>
+  <interests>
+    <in><xsl:value-of select="sum(/ndnd/faces/face/meters/intrin/total)" /></in>
+    <out><xsl:value-of select="sum(/ndnd/faces/face/meters/introut/total)" /></out>
+    <!-- <in><xsl:value-of select="sum(/ndnd/faces/face/meters/intrin/persec)" /></in> -->
+    <!-- <out><xsl:value-of select="sum(/ndnd/faces/face/meters/introut/persec)" /></out> -->
+  </interests>
+</stats>
 </xsl:template>
-
-<xsl:template match="fentry">
-<xsl:apply-templates select="dest/faceid" />
-<xsl:text> </xsl:text>
-<xsl:value-of select="prefix"/>
-<br/>
-</xsl:template>
-
-<xsl:template match="faceid">
-<xsl:variable name="id"><xsl:value-of select="." /></xsl:variable>
-<b>face: <xsl:copy-of select="$id" />
-
-<xsl:choose>
-  <xsl:when test="count(//face/ip[../faceid=$id]) &gt; 0"> (<xsl:value-of select="//face/ip[../faceid=$id]" />)
-  </xsl:when>
-  <xsl:otherwise> (app)</xsl:otherwise>
-</xsl:choose></b>
-</xsl:template>
-
 </xsl:stylesheet>
diff --git a/linux/resource.qrc b/linux/resource.qrc
index 77511fa..e39ebb1 100644
--- a/linux/resource.qrc
+++ b/linux/resource.qrc
@@ -1,7 +1,5 @@
 <RCC>
     <qresource prefix="/resource">
-        <file>Resources/icon1.png</file>
-        <file>Resources/FlatConnected.png</file>
         <file>Resources/emblem-dropbox-unsyncable.png</file>
         <file>Resources/emblem-system.png</file>
         <file>Resources/emblem-web.png</file>
@@ -9,9 +7,9 @@
         <file>Resources/mail-send-receive.png</file>
         <file>Resources/preferences-desktop.png</file>
         <file>Resources/system-run.png</file>
-        <file>Resources/status.xslt</file>
         <file>Resources/icon-connected-white.png</file>
         <file>Resources/icon-disconnected-white.png</file>
         <file>Resources/status-to-fib.xslt</file>
+        <file>Resources/status.xslt</file>
     </qresource>
 </RCC>
diff --git a/linux/tray-menu.cpp b/linux/tray-menu.cpp
index daf28d5..f345828 100644
--- a/linux/tray-menu.cpp
+++ b/linux/tray-menu.cpp
@@ -27,6 +27,8 @@
 #include <QtXml>
 #include <QStandardItemModel>
 #include <QDir>
+#include <QWidgetAction>
+#include <QTextStream>
 
 TrayMenu::TrayMenu(QWidget *parent) :
     QMainWindow(parent),
@@ -232,9 +234,14 @@
 
     trayIconMenu->addSeparator();
 
-    QAction *displayStatus = new QAction(tr("Status"), this);
-    connect(displayStatus, SIGNAL(triggered()), this, SLOT(displayPopup()));
+    displayStatus = new QAction("                           Sent / Recv   ", this);
+    //connect(displayStatus, SIGNAL(triggered()), this, SLOT(displayPopup()));
     trayIconMenu->addAction(displayStatus);
+    interestSentRecv = new QAction("Interests      0 / 0", this);
+    trayIconMenu->addAction(interestSentRecv);
+    dataSentRecv = new QAction("Data               0 / 0", this);
+    trayIconMenu->addAction(dataSentRecv);
+
 
     trayIconMenu->addSeparator();
 
@@ -246,6 +253,22 @@
     connect(close, SIGNAL(triggered()), this, SLOT(confirmQuit()));
     trayIconMenu->addAction(close);
 
+
+
+
+    /*QWidgetAction * wa = new QWidgetAction(this);
+    wa->setDefaultWidget(new QPushButton("Default"));
+
+    trayIconMenu->setDefaultAction(wa);
+*/
+    //trayIconMenu->addAction();
+    /*QVBoxLayout *layout = new QVBoxLayout(wa->defaultWidget());
+
+    QLineEdit *edit = new QLineEdit("", wa->defaultWidget());
+    layout->addWidget(edit);
+
+    trayIconMenu->addAction(wa);*/
+
     trayIcon = new QSystemTrayIcon(this);
     trayIcon->setContextMenu(trayIconMenu);
 
@@ -398,6 +421,62 @@
         daemonStarted = true;
         setIcon(true);
         statusIndicator->setText(tr("Active"));
+        //qDebug() << statusXml;
+        QString interestIn = statusXml.mid(statusXml.indexOf("<in>")+4, statusXml.indexOf("</in>") - (statusXml.indexOf("<in>")+4));
+        QString interestOut = statusXml.mid(statusXml.indexOf("<out>")+5, statusXml.indexOf("</out>") - (statusXml.indexOf("<out>")+5));
+        QString dataIn = statusXml.mid(statusXml.lastIndexOf("<in>")+4, statusXml.lastIndexOf("</in>") - (statusXml.lastIndexOf("<in>")+4));
+        QString dataOut = statusXml.mid(statusXml.lastIndexOf("<out>")+5, statusXml.lastIndexOf("</out>") - (statusXml.lastIndexOf("<out>")+5));
+
+        int i = 0;
+        int k = 0;
+        if((dataOut.length() - interestOut.length()) > 0)
+        {
+            i = dataOut.length() - interestOut.length();
+            i*=2; //because space takes less space than a letter
+        }
+
+        if((interestOut.length() - dataOut.length()) > 0)
+        {
+            k = interestOut.length() - dataOut.length();
+            k*=2; //because space takes less space than a letter
+        }
+
+        QString interestStats = QString("%1%2%3%4").arg("Interests",-16,' ').arg(interestOut,6+i,' ').arg(" / ",3).arg(interestIn,-6,' ');
+        QString dataStats = QString("%1%2%3%4").arg("Data",-20,' ').arg(dataOut,6+k,' ').arg(" / ",3).arg(dataIn,-6,' ');
+
+        //Now I try to align header "Sent / Recv" centrally with the upper line
+        QString padding;
+        for(int j = 0; j < interestStats.indexOf(interestOut); j++)
+        {
+            if(interestStats.at(j)==' ')
+                padding +=" ";
+            else
+                padding += "  "; //because space takes less space than a letter
+        }
+
+        QString header;
+        int m = 0;
+        if(interestOut.length() - QString("Sent").length() > 0)
+        {
+            m = interestOut.length() - QString("Sent").length();
+            m *=3;
+            //qDebug() << "m=" << m;
+            header = QString("%1%2").arg(padding).arg("  Sent / Recv",QString("  Sent / Recv").length() + m,' ');
+        }
+        else if(interestOut.length() - QString("Sent").length() < 0)
+        {
+            //qDebug() << "truncating";
+            padding.truncate(padding.length()-(QString("Sent").length() - interestOut.length()));
+            header = padding + "Sent / Recv";
+        }
+        else
+        {
+            header = padding + "  Sent / Recv";
+        }
+
+        interestSentRecv->setText(interestStats);
+        dataSentRecv->setText(dataStats);
+        displayStatus->setText(header);
     }
 
     query.setQuery(QUrl("qrc:/resource/Resources/status-to-fib.xslt"));  // TODO: I suspect it's being read from HDD each time
diff --git a/linux/tray-menu.h b/linux/tray-menu.h
index a40faca..0badef0 100644
--- a/linux/tray-menu.h
+++ b/linux/tray-menu.h
@@ -82,6 +82,9 @@
     int selectedRow;
 
     QAction *statusIndicator;
+    QAction *displayStatus;
+    QAction *interestSentRecv;
+    QAction *dataSentRecv;
     QAction *open;
     QAction *close;
     QAction *openGeneralSettings;
