diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp
index e0a08a3fe45a4add3e5a20dd42053694c24bb0cf..fcd59af3018b6459bf20d43281cff022439c93f2 100644
--- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.cpp
@@ -86,6 +86,11 @@ namespace armarx
         replaceWidget(widget._queryTabWidget, queryTabs, widget.queryGroupBox->layout());
         ARMARX_CHECK_NULL(widget._queryTabWidget);
 
+        instanceTree = new armem::InstanceTreeWidget();
+        instanceTree->setStatusLabel(widget.statusLabel);
+        replaceWidget(widget._instanceTree, instanceTree, widget.instanceGroupBox->layout());
+        ARMARX_CHECK_NULL(widget._instanceTree);
+
 
         connect(this, &This::connected, this, &This::updateMemory);
         connect(widget.updateButton, &QPushButton::pressed, this, &This::updateMemory);
@@ -110,8 +115,7 @@ namespace armarx
 
         connect(memoryTree, &armem::MemoryTreeWidget::updated, this, &This::memoryTreeUpdated);
         connect(memoryTree, &armem::MemoryTreeWidget::instanceSelected, this, &This::updateInstanceTree);
-
-        // connect(this, &This::memoryTreeUpdated, this, &This::updateInstanceTree);
+        connect(instanceTree, &armem::InstanceTreeWidget::updated, this, &This::instanceTreeUpdated);
     }
 
     ArMemMemoryViewerWidgetController::~ArMemMemoryViewerWidgetController()
@@ -198,6 +202,14 @@ namespace armarx
         }
     }
 
+    void ArMemMemoryViewerWidgetController::updateInstanceTree(const armem::MemoryID& id)
+    {
+        if (memoryData)
+        {
+            instanceTree->update(id, *memoryData);
+        }
+    }
+
     void ArMemMemoryViewerWidgetController::updateMemoryTree(armem::Memory& memory)
     {
         armem::Time start = armem::Time::now();
@@ -212,50 +224,6 @@ namespace armarx
     }
 
 
-    void ArMemMemoryViewerWidgetController::updateInstanceTree(const armem::MemoryID& id)
-    {
-        if (!memoryData)
-        {
-            return;
-        }
-
-        armem::EntityInstance* instance;
-        try
-        {
-            instance = &memoryData->getEntityInstance(id);
-        }
-        catch (const armem::error::ArMemError& e)
-        {
-            widget.statusLabel->setText(QString::fromStdString(e.what()));
-            return;
-        }
-
-        QTreeWidgetItem* item = new QTreeWidgetItem();
-        item->setText(0, QString::fromStdString(id.str()));
-
-        if (!instance->data())
-        {
-            item->setText(0, "(No data.)");
-        }
-        else if (!instance->dataNavigator())
-        {
-            item->setText(0, "(No introspection available.)");
-        }
-        else
-        {
-            armem::QTreeWidgetAronDataVisitor visitor(item);
-            visitor.applyTo(*instance->dataNavigator());
-        }
-
-        widget.instanceTree->clear();
-        widget.instanceTree->addTopLevelItem(item);
-
-        item->setExpanded(true);
-
-        emit instanceTreeUpdated();
-    }
-
-
     const static std::string CONFIG_KEY_MEMORY = "MemoryName";
     const static std::string CONFIG_KEY_DEBUG_OBSERVER = "DebugObserverName";
 
diff --git a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h
index d922212d16b5ea7ffc229dd22dcb2e28a931ea22..36d618adb8979f718747ac89702ad34cf11851fe 100644
--- a/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h
+++ b/source/RobotAPI/gui-plugins/ArMemMemoryViewer/ArMemMemoryViewerWidgetController.h
@@ -34,6 +34,7 @@
 
 #include <RobotAPI/interface/armem/MemoryInterface.h>
 #include <RobotAPI/libraries/armem/client/MemoryReader.h>
+#include <RobotAPI/libraries/armem_gui/InstanceTreeWidget.h>
 #include <RobotAPI/libraries/armem_gui/MemoryQueryWidget.h>
 #include <RobotAPI/libraries/armem_gui/MemoryTreeWidget.h>
 
@@ -131,6 +132,7 @@ namespace armarx
 
         armem::MemoryTreeWidget* memoryTree;
         armem::MemoryQueryWidget* queryTabs;
+        armem::InstanceTreeWidget* instanceTree;
 
 
         std::string debugObserverName;
diff --git a/source/RobotAPI/libraries/armem_gui/CMakeLists.txt b/source/RobotAPI/libraries/armem_gui/CMakeLists.txt
index 506344f84c51cd19e40daf0727bc69f5149e0ef5..591625e957fdd1a8dbbcfd50f89c6d1f405690d7 100644
--- a/source/RobotAPI/libraries/armem_gui/CMakeLists.txt
+++ b/source/RobotAPI/libraries/armem_gui/CMakeLists.txt
@@ -10,11 +10,13 @@ set(LIBRARIES
 )
 
 set(SOURCES
+    InstanceTreeWidget.cpp
     MemoryTreeWidget.cpp
     MemoryQueryWidget.cpp
     QTreeWidgetAronDataVisitor.cpp
 )
 set(HEADERS
+    InstanceTreeWidget.h
     MemoryTreeWidget.h
     MemoryQueryWidget.h
     TreeWidgetBuilder.h
diff --git a/source/RobotAPI/libraries/armem_gui/InstanceTreeWidget.cpp b/source/RobotAPI/libraries/armem_gui/InstanceTreeWidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..bbf77359d6ce9bf9a826aaa9e72141b3e6fbf53a
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_gui/InstanceTreeWidget.cpp
@@ -0,0 +1,89 @@
+#include "InstanceTreeWidget.h"
+
+#include <QHeaderView>
+#include <QLabel>
+
+#include <SimoxUtility/algorithm/string.h>
+
+#include <ArmarXCore/core/exceptions/local/ExpressionException.h>
+
+#include <RobotAPI/libraries/aron/aroncore/navigators/typenavigator/AronObjectTypeNavigator.h>
+#include <RobotAPI/libraries/armem_gui/QTreeWidgetAronDataVisitor.h>
+
+
+namespace armarx::armem
+{
+
+    InstanceTreeWidget::InstanceTreeWidget()
+    {
+        initWidget();
+    }
+
+    void InstanceTreeWidget::initWidget()
+    {
+        clear();
+        QStringList columns;
+        columns.insert(int(Columns::KEY), "Key");
+        columns.insert(int(Columns::TYPE), "Type");
+        columns.insert(int(Columns::VALUE), "Value");
+        setColumnCount(columns.size());
+        setHeaderLabels(columns);
+
+        // header()->setMinimumSectionSize(25);
+        // header()->resizeSection(int(Columns::KEY), 250);
+        // header()->setTextElideMode(Qt::TextElideMode::ElideRight);
+    }
+
+    void InstanceTreeWidget::update(const MemoryID& id, const Memory& memory)
+    {
+        const armem::EntityInstance* instance;
+        try
+        {
+            instance = &memory.getEntityInstance(id);
+        }
+        catch (const armem::error::ArMemError& e)
+        {
+            if (statusLabel)
+            {
+                statusLabel->setText(QString::fromStdString(e.what()));
+            }
+            return;
+        };
+        if (instance)
+        {
+            update(*instance);
+        }
+    }
+
+    void InstanceTreeWidget::update(const EntityInstance& instance)
+    {
+        QTreeWidgetItem* item = new QTreeWidgetItem();
+        item->setText(0, QString::fromStdString(instance.id().str()));
+
+        if (!instance.data())
+        {
+            item->setText(0, "(No data.)");
+        }
+        else if (!instance.dataNavigator())
+        {
+            item->setText(0, "(No introspection available.)");
+        }
+        else
+        {
+            armem::QTreeWidgetAronDataVisitor visitor(item);
+            visitor.applyTo(*instance.dataNavigator());
+        }
+
+        clear();
+        addTopLevelItem(item);
+
+        item->setExpanded(true);
+        emit updated();
+    }
+
+    void InstanceTreeWidget::setStatusLabel(QLabel* statusLabel)
+    {
+        this->statusLabel = statusLabel;
+    }
+
+}
diff --git a/source/RobotAPI/libraries/armem_gui/InstanceTreeWidget.h b/source/RobotAPI/libraries/armem_gui/InstanceTreeWidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..adb4de498c008d1eeb5592c01b062fe1966aa740
--- /dev/null
+++ b/source/RobotAPI/libraries/armem_gui/InstanceTreeWidget.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include <QTreeWidget>
+
+#include <RobotAPI/libraries/armem/memory/Memory.h>
+
+class QLabel;
+
+
+namespace armarx::armem
+{
+
+    class InstanceTreeWidget : public QTreeWidget
+    {
+        Q_OBJECT
+    public:
+
+        InstanceTreeWidget();
+
+        void update(const MemoryID& id, const Memory& memory);
+        void update(const EntityInstance& instance);
+
+        void setStatusLabel(QLabel* statusLabel);
+
+
+    signals:
+
+        void updated();
+        void instanceSelected(const MemoryID& id);
+
+
+    private slots:
+
+
+    private:
+
+        void initWidget();
+
+        QLabel* statusLabel = nullptr;
+
+
+        enum class Columns
+        {
+            KEY = 0,
+            TYPE = 1,
+            VALUE = 2,
+        };
+    };
+
+}