diff --git a/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidget.ui b/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidget.ui
index 83f77d3ae4886eaced3509fa4c1af1c62a21d80f..de8496435fea6ea6fb7dca4bce1833fffa0ee632 100644
--- a/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidget.ui
+++ b/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidget.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>300</height>
+    <width>522</width>
+    <height>378</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,46 +15,120 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QGroupBox" name="objectsGroupBox">
-     <property name="title">
-      <string>Objects</string>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="updateButton">
+       <property name="text">
+        <string>Update</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QCheckBox" name="autoUpdateCheckBox">
+       <property name="text">
+        <string>Auto Update</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QTabWidget" name="tabWidget">
+     <property name="currentIndex">
+      <number>1</number>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <widget class="QPushButton" name="updateObjectsButton">
-          <property name="text">
-           <string>Update</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QCheckBox" name="autoUpdateCheckBox">
-          <property name="text">
-           <string>Auto Update</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <widget class="QTableWidget" name="objectsTable"/>
-      </item>
-     </layout>
+     <widget class="QWidget" name="tabObjects">
+      <attribute name="title">
+       <string>Objects</string>
+      </attribute>
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
+       <item>
+        <widget class="QTableWidget" name="objectsTable"/>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tabRequest">
+      <attribute name="title">
+       <string>Request</string>
+      </attribute>
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_2">
+         <item>
+          <widget class="QTableWidget" name="requestTable"/>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_4">
+         <item>
+          <widget class="QLabel" name="label_2">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text">
+            <string>Timeout:</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QDoubleSpinBox" name="requestTimeoutSpinBox">
+           <property name="suffix">
+            <string> s</string>
+           </property>
+           <property name="maximum">
+            <double>999.000000000000000</double>
+           </property>
+           <property name="singleStep">
+            <double>0.250000000000000</double>
+           </property>
+           <property name="value">
+            <double>5.000000000000000</double>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QCheckBox" name="requestInfiniteCheckBox">
+           <property name="text">
+            <string>Infinite</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="requestButton">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text">
+            <string>Request
+Selected
+Objects</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
     </widget>
    </item>
   </layout>
diff --git a/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.cpp b/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.cpp
index 9c97a261eec0c4aadb303ac8e2f61607202bbf75..e4373f379e851fbf053fa798be629db19510ec9a 100644
--- a/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.cpp
+++ b/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.cpp
@@ -41,9 +41,19 @@ namespace armarx
         widget.objectsTable->setColumnCount(header.size());
         widget.objectsTable->setHorizontalHeaderLabels(header);
 
+
+        header = QStringList{"Dataset", "ClassName", "Type", "Provider", "Request"};
+        widget.requestTable->setColumnCount(header.size());
+        widget.requestTable->setHorizontalHeaderLabels(header);
+
+
         using This = ObjectPoseGuiWidgetController;
 
-        connect(widget.updateObjectsButton, &QPushButton::clicked, this, &This::updateObjects);
+        connect(widget.updateButton, &QPushButton::pressed, this, &This::updateTab);
+        connect(widget.tabWidget, &QTabWidget::currentChanged, this, &This::updateTab);
+
+        connect(widget.requestButton, &QPushButton::pressed, this, &This::requestSelectedObjects);
+
         // QTimer* timer = new QTimer(this,);
     }
 
@@ -66,7 +76,7 @@ namespace armarx
 
     QString ObjectPoseGuiWidgetController::GetWidgetName()
     {
-        return "ObjectPoseGui";
+        return "VisionX.ObjectPoseGui";
     }
 
     static const std::string CONFIG_KEY_OBJECT_POSE_OBSERVER = "ObjectPoseObserver";
@@ -105,19 +115,40 @@ namespace armarx
         }
     }
 
-    void ObjectPoseGuiWidgetController::updateObjects()
+    void ObjectPoseGuiWidgetController::onDisconnectComponent()
+    {
+        objectPoseObserver = nullptr;
+    }
+
+    void ObjectPoseGuiWidgetController::updateTab()
+    {
+        if (widget.tabWidget->currentWidget() == widget.tabObjects)
+        {
+            updateObjectsTab();
+        }
+        else if (widget.tabWidget->currentWidget() == widget.tabRequest)
+        {
+            updateRequestTab();
+        }
+    }
+
+    void ObjectPoseGuiWidgetController::updateObjectsTab()
     {
         if (!objectPoseObserver)
         {
+            ARMARX_WARNING << "No object pose observer.";
             return;
         }
 
-        ARMARX_INFO << "Get object poses...";
+        IceUtil::Time start = IceUtil::Time::now();
+        ARMARX_INFO << "Getting object poses...";
         // const objpose::ObjectPoseSeq objectPoses = objpose::fromIce(objectPoseObserver->getObjectPoses());
 
         const objpose::data::ObjectPoseSeq objectPoses = objectPoseObserver->getObjectPoses();
-        ARMARX_INFO << "Got " << objectPoses.size() << " object poses.";
+        ARMARX_INFO << "Got " << objectPoses.size() << " object poses. "
+                    << "(Took " << (IceUtil::Time::now() - start).toMilliSeconds() << " ms.)";
 
+        start = IceUtil::Time::now();
         widget.objectsTable->setRowCount(int(objectPoses.size()));
 
         for (int i = 0; i < int(objectPoses.size()); ++i)
@@ -135,7 +166,80 @@ namespace armarx
                 i, col++, new QTableWidgetItem(pose.providerName.c_str()));
             widget.objectsTable->setItem(
                 i, col++, new QTableWidgetItem(objpose::ObjectTypeEnumNames.to_name(pose.objectType).c_str()));
+        }
+        ARMARX_INFO << "Gui update took " << (IceUtil::Time::now() - start).toMilliSeconds() << " ms.";
 
+    }
+
+    void ObjectPoseGuiWidgetController::updateRequestTab()
+    {
+        if (!objectPoseObserver)
+        {
+            ARMARX_WARNING << "No object pose observer.";
+            return;
+        }
+
+        IceUtil::Time start = IceUtil::Time::now();
+        objpose::ProviderInfoMap availableProvidersInfo = objectPoseObserver->getAvailableProvidersInfo();
+        ARMARX_INFO << "Got infos of " << availableProvidersInfo.size() << " object poses. "
+                    << "(Took " << (IceUtil::Time::now() - start).toMilliSeconds() << " ms.)";
+
+        start = IceUtil::Time::now();
+        int row = 0;
+        for (const auto& [providerName, info] : availableProvidersInfo)
+        {
+            for (const auto& id : info.supportedObjects)
+            {
+                int col = 0;
+
+                // header = QStringList{"Dataset", "ClassName", "Type", "Provider", "Request"};
+                /*
+                if (row < widget.requestTable->rowCount())
+                {
+                    widget.requestTable->item(row, col++)->setText(id.dataset.c_str());
+                    widget.requestTable->item(row, col++)->setText(id.className.c_str());
+                    widget.requestTable->item(row, col++)->setText(objpose::ObjectTypeEnumNames.to_name(info.objectType).c_str());
+                    widget.requestTable->item(row, col++)->setText(providerName.c_str());
+                    widget.requestTable->item(row, col++)->setText(id.dataset.c_str());
+                    QCheckBox* requestCheckBox = new QCheckBox();
+                    widget.requestTable->setCellWidget(row, col++, requestCheckBox);
+                }
+                else
+                */
+                widget.requestTable->setItem(
+                    row, col++, new QTableWidgetItem(id.dataset.c_str()));
+                widget.requestTable->setItem(
+                    row, col++, new QTableWidgetItem(id.className.c_str()));
+                widget.requestTable->setItem(
+                    row, col++, new QTableWidgetItem(objpose::ObjectTypeEnumNames.to_name(info.objectType).c_str()));
+                widget.requestTable->setItem(
+                    row, col++, new QTableWidgetItem(providerName.c_str()));
+                QCheckBox* requestCheckBox = new QCheckBox();
+                widget.requestTable->setCellWidget(row, col++, requestCheckBox);
+
+                ++row;
+            }
+        }
+
+        ARMARX_INFO << "Gui update took " << (IceUtil::Time::now() - start).toMilliSeconds() << " ms.";
+    }
+
+    void ObjectPoseGuiWidgetController::requestSelectedObjects()
+    {
+        objpose::RequestObjectsInput requests;
+
+        QTableWidget* table = widget.requestTable;
+        for (int row = 0; row < table->rowCount(); ++row)
+        {
+            QCheckBox* selected = dynamic_cast<QCheckBox*>(table->cellWidget(row, table->columnCount() - 1));
+            ARMARX_CHECK_NOT_NULL(selected);
+            if (selected->isChecked())
+            {
+                objpose::ObjectID id;
+                id.dataset = table->item(row, 0)->text().toStdString();
+                id.className = table->item(row, 1)->text().toStdString();
+                requests.objectIDs.emplace_back(id);
+            }
         }
     }
 
diff --git a/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.h b/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.h
index d9b716d7cc4186cbbff58858aaf25088726fa283..26767131953cdd7f756951fdf011597d7716426b 100644
--- a/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.h
+++ b/source/RobotAPI/gui-plugins/ObjectPoseGui/ObjectPoseGuiWidgetController.h
@@ -53,7 +53,7 @@ namespace armarx
      * Detailed description
      */
     class ARMARXCOMPONENT_IMPORT_EXPORT
-        ObjectPoseGuiWidgetController:
+        ObjectPoseGuiWidgetController :
         public armarx::ArmarXComponentWidgetControllerTemplate < ObjectPoseGuiWidgetController >
     {
         Q_OBJECT
@@ -85,11 +85,19 @@ namespace armarx
         /// @see armarx::Component::onConnectComponent()
         void onConnectComponent() override;
 
+        /// @see armarx::Component::onConnectComponent()
+        void onDisconnectComponent() override;
+
 
     public slots:
         /* QT slot declarations */
 
-        void updateObjects();
+        /// Update the currently opened tab.
+        void updateTab();
+        void updateObjectsTab();
+        void updateRequestTab();
+
+        void requestSelectedObjects();
 
 
     signals:
@@ -102,7 +110,6 @@ namespace armarx
 
         QPointer<SimpleConfigDialog> configDialog;
 
-
         std::string objectPoseObserverName;
         armarx::objpose::ObjectPoseObserverInterfacePrx objectPoseObserver;