diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
index adfdad325908174f7b00b18eccd3c95ef6bd4bb6..06c0e5087194f4298f98ad2edd81e27d58d190a2 100644
--- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
+++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.cpp
@@ -112,7 +112,7 @@ ArmarXMainWindow::ArmarXMainWindow(const armarx::ManagedIceObjectRegistryInterfa
 
     ui = new ::Ui::ArmarXMainWindow();
     mutex3d.reset(new boost::recursive_mutex);
-    ArmarXWidgetInfoPtr viewerWidgetInfo(new ArmarXWidgetInfo(ArmarXWidgetController::createInstance<Viewer3DWidget>, QIcon(), QIcon()));
+    ArmarXWidgetInfoPtr viewerWidgetInfo(new ArmarXWidgetInfo(ArmarXWidgetController::createInstance<Viewer3DWidget>, Viewer3DWidget().getWidgetIcon(), QIcon()));
     availableWidgets[ARMARX_VIEWER_NAME] = viewerWidgetInfo;
 
     guiWindowBaseName = ARMARX_GUI_APPLICATION_NAME;
@@ -140,7 +140,7 @@ ArmarXMainWindow::ArmarXMainWindow(const armarx::ManagedIceObjectRegistryInterfa
     // plugins
     QSet<QString> pluginDirs;
 
-    for (const std::string& packageName : packages)
+    for (const std::string & packageName : packages)
     {
         ARMARX_INFO << "Looking for gui plugins in package " << packageName;
         splashSceen->showMessage(splashscreenPrefix + QString::fromStdString(packageName),
@@ -183,7 +183,7 @@ ArmarXMainWindow::ArmarXMainWindow(const armarx::ManagedIceObjectRegistryInterfa
     else
     {
         QStringList defaultWidgets = {"Meta.LogViewer"};
-        for (auto& widgetName : defaultWidgets)
+        for (auto & widgetName : defaultWidgets)
         {
             if (existsWidget(widgetName))
             {
@@ -320,7 +320,7 @@ void ArmarXMainWindow::loadPlugins(const QSet<QString>& pluginDirs, bool searchR
     QList<QDir> directoriesToCheck;
     QStringList allFileNames;
 
-    for (const auto& pluginDir : pluginDirs)
+    for (const auto & pluginDir : pluginDirs)
     {
         directoriesToCheck.push_back(QDir(pluginDir));
 
@@ -341,7 +341,7 @@ void ArmarXMainWindow::loadPlugins(const QSet<QString>& pluginDirs, bool searchR
 
             QStringList fileNames = currentPluginDir.entryList(filters, QDir::Files);
 
-            for (auto& fileName : fileNames)
+            for (auto & fileName : fileNames)
             {
                 fileName = currentPluginDir.absoluteFilePath(fileName);
             }
@@ -831,7 +831,13 @@ ArmarXWidgetControllerPtr ArmarXMainWindow::createArmarXWidget(QString widgetNam
         ArmarXWidgetController::showMessageBox("Could not find widget with Name: " + widgetName);
         return NULL;
     }
-
+    auto widgetUsage = mainSettings.value("WidgetUsageHistory").toList();
+    widgetUsage.push_back(widgetName);
+    if (widgetUsage.size() > 40)
+    {
+        widgetUsage.pop_front();
+    }
+    mainSettings.setValue("WidgetUsageHistory", widgetUsage);
     ArmarXWidgetControllerPtr w = it->second->createInstance();
     w->setMainWindow(this);
     w->setInstanceName(customInstanceName);
@@ -1079,7 +1085,7 @@ QMenu* ArmarXMainWindow::getCategoryMenu(const std::string& categoryString, QMen
 
     auto actions = menu->actions();
 
-    for (QAction* action : actions)
+    for (QAction * action : actions)
     {
         if (action->text().toStdString() == *items.begin())
         {
@@ -1107,19 +1113,29 @@ QMenu* ArmarXMainWindow::getCategoryMenu(const std::string& categoryString, QMen
 void ArmarXMainWindow::updateAvailableWidgetList()
 {
     ui->menuAdd_Widget->clear();
-    QWidgetAction* editAction = new QWidgetAction(ui->menuAdd_Widget);
+
+    //    QWidgetAction* editAction = new QWidgetAction(ui->menuAdd_Widget);
     QLineEdit* searchField = new QLineEdit(ui->menuAdd_Widget);
+    searchField->setMaximumWidth(250);
     searchField->setPlaceholderText("Widget Search");
-    editAction->setDefaultWidget(searchField);
-    ui->menuAdd_Widget->addAction(editAction);
+    //    editAction->setDefaultWidget(searchField);
+    //    ui->menuAdd_Widget->addAction(editAction);
     QStringList widgetNameList;
+
+    ui->toolBar->clear();
+
+
+    QStringList mainWidgets = QStringList() << "Meta.LogViewer" << "Statecharts.StatechartEditor" << "Meta.SystemStateMonitor" << "Meta.ScenarioManager" << "MemoryX.WorkingMemoryGui";
+
+    QMap<QString, QAction*> actionList;
+
     for (std::pair<QString, ArmarXWidgetInfoPtr> pair : availableWidgets)
     {
         if (!pair.second)
         {
             continue;
         }
-
+        QString fullWidgetName = pair.first;
         QString widgetName = pair.first;
         widgetName = widgetName.remove(0, widgetName.lastIndexOf(".") + 1);
         widgetNameList << pair.first;
@@ -1132,6 +1148,11 @@ void ArmarXMainWindow::updateAvailableWidgetList()
         action->setData(pair.first);
         menu->addAction(action);
 
+        if (mainWidgets.contains(fullWidgetName))
+        {
+            ui->toolBar->addAction(action);
+        }
+        actionList[fullWidgetName] = action;
         connect(action, SIGNAL(triggered()), action, SLOT(addArmarXWidget()), Qt::UniqueConnection);
         connect(action, SIGNAL(clicked(QString, QString)), this, SLOT(createArmarXWidget(QString, QString)), Qt::UniqueConnection);
 
@@ -1140,10 +1161,47 @@ void ArmarXMainWindow::updateAvailableWidgetList()
     InfixCompleter* completer = new InfixCompleter(widgetNameList, searchField);
     connect(searchField, SIGNAL(textEdited(QString)), completer, SLOT(setCompletionInfix(QString)));
 
+
     connect(completer, SIGNAL(activated(QString)), completerAction, SLOT(triggered(QString)));
     connect(completerAction, SIGNAL(clicked(QString, QString)), this, SLOT(createArmarXWidget(QString, QString)), Qt::UniqueConnection);
     searchField->setCompleter(completer);
 
+    ui->toolBar->addSeparator();
+    ui->toolBar->addWidget(searchField);
+    ui->toolBar->addSeparator();
+    ui->toolBar->addWidget(new QLabel("Favorites:"));
+
+    auto widgetUsageHistory = mainSettings.value("WidgetUsageHistory").toList();
+    std::map<QString, int> widgetUsage;
+    for (auto & widgetName : widgetUsageHistory)
+    {
+        if (widgetUsage.count(widgetName.toString()) == 0)
+        {
+            widgetUsage[widgetName.toString()] = 1;
+        }
+        else
+        {
+            widgetUsage[widgetName.toString()] += 1;
+        }
+    }
+    std::multimap<int, QString> ranking;
+    for (auto it = widgetUsage.begin(); it != widgetUsage.end(); it++)
+    {
+        ranking.insert(std::make_pair(it->second, it->first));
+    }
+    int i = 0;
+    int favCount = mainSettings.value("FavoriteWidgetCount", 6).toInt();
+    mainSettings.setValue("FavoriteWidgetCount", favCount);
+    for (auto it = ranking.rbegin(); it != ranking.rend() && i < favCount ; it++)
+    {
+        auto& widgetName = it->second;
+        if (actionList.contains(widgetName) && !mainWidgets.contains(widgetName))
+        {
+            ui->toolBar->addAction(actionList[it->second]);
+            i++;
+        }
+    }
+
 }
 
 void ArmarXMainWindow::updateOpenWidgetList()
@@ -1177,7 +1235,7 @@ void ArmarXMainWindow::updateRecentlyOpenedFileList()
     QMenu* menu = ui->menuRecently_Opened_Files;
     auto actions = menu->actions();
 
-    for (QAction* action : actions)
+    for (QAction * action : actions)
     {
         if (!action->isCheckable() && !action->isSeparator())
         {
diff --git a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.ui b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.ui
index 06f8db4ec4bb989be28b551b6fcf46acc024a073..d639323dd0b3e35ccda8f8b34110256756079c53 100644
--- a/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.ui
+++ b/source/ArmarXGui/applications/ArmarXGui/ArmarXMainWindow.ui
@@ -42,7 +42,7 @@
      <x>0</x>
      <y>0</y>
      <width>1062</width>
-     <height>31</height>
+     <height>33</height>
     </rect>
    </property>
    <widget class="QMenu" name="menuFile">
@@ -87,6 +87,17 @@
    <addaction name="menu"/>
   </widget>
   <widget class="QStatusBar" name="statusbar"/>
+  <widget class="QToolBar" name="toolBar">
+   <property name="windowTitle">
+    <string>toolBar</string>
+   </property>
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>false</bool>
+   </attribute>
+  </widget>
   <action name="actionSplitter">
    <property name="checkable">
     <bool>true</bool>