Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.cpp	(revision 76995)
@@ -438,4 +438,26 @@
 }
 
+QList<QTreeWidgetItem*> QITreeWidget::filterItems(const QITreeWidgetItemFilter &filter, QTreeWidgetItem* pParent /* = 0 */)
+{
+    QList<QTreeWidgetItem*> filteredItemList;
+    if (!pParent)
+        filterItemsInternal(filter, invisibleRootItem(), filteredItemList);
+    else
+        filterItemsInternal(filter, pParent, filteredItemList);
+    return filteredItemList;
+}
+
+void QITreeWidget::filterItemsInternal(const QITreeWidgetItemFilter &filter,
+                                           QTreeWidgetItem* pParent, QList<QTreeWidgetItem*> &filteredItemList)
+{
+    if (!pParent)
+        return;
+    if (filter(pParent))
+        filteredItemList.append(pParent);
+
+    for (int i = 0; i < pParent->childCount(); ++i)
+        filterItemsInternal(filter, pParent->child(i), filteredItemList);
+}
+
 void QITreeWidget::paintEvent(QPaintEvent *pEvent)
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extensions/QITreeWidget.h	(revision 76995)
@@ -32,4 +32,14 @@
 class QITreeWidget;
 
+/** A functor base to be passed to QITabWidget::filterItems(..). Overload operator()(..) to filter out
+ *  tree items. */
+class SHARED_LIBRARY_STUFF QITreeWidgetItemFilter
+{
+ public:
+    virtual bool operator()(QTreeWidgetItem*) const
+    {
+        return true;
+    }
+};
 
 /** QTreeWidgetItem subclass extending standard functionality. */
@@ -99,4 +109,7 @@
     QITreeWidgetItem *childItem(int iIndex) const;
     QModelIndex itemIndex(QTreeWidgetItem *pItem);
+    /** Recurses thru the subtree with a root pParent and returns a list of tree items filtered by @a filter.
+     *  When @a pParent is null than QTreeWidget::invisibleRootItem() is used as the root item. */
+    QList<QTreeWidgetItem*> filterItems(const QITreeWidgetItemFilter &filter, QTreeWidgetItem* pParent = 0);
 
 protected:
@@ -106,4 +119,10 @@
     /** Handles resize @a pEvent. */
     void resizeEvent(QResizeEvent *pEvent);
+
+ private:
+
+    /* Recurses thru the tree and append filtered items to @a filteredItemList. */
+    void filterItemsInternal(const QITreeWidgetItemFilter &filter, QTreeWidgetItem* pParent,
+                             QList<QTreeWidgetItem*> &filteredItemList);
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 76995)
@@ -100,4 +100,5 @@
 /* Virtual Media Manager: */
 const char *UIExtraDataDefs::GUI_VirtualMediaManager_Details_Expanded = "GUI/VirtualMediaManager/Details/Expanded";
+const char *UIExtraDataDefs::GUI_VirtualMediaManager_Search_Widget_Expanded = "GUI/VirtualMediaManager/SearchWidget/Expanded";
 
 /* Host Network Manager: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 76995)
@@ -191,4 +191,6 @@
         /** Holds whether Virtual Media Manager details expanded. */
         SHARED_LIBRARY_STUFF extern const char *GUI_VirtualMediaManager_Details_Expanded;
+        /** Holds whether Virtual Media Manager search widget expanded. */
+        SHARED_LIBRARY_STUFF extern const char *GUI_VirtualMediaManager_Search_Widget_Expanded;
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 76995)
@@ -2975,4 +2975,16 @@
 }
 
+bool UIExtraDataManager::virtualMediaManagerSearchWidgetExpanded()
+{
+    /* 'False' unless feature allowed: */
+    return isFeatureAllowed(GUI_VirtualMediaManager_Search_Widget_Expanded);
+}
+
+void UIExtraDataManager::setVirtualMediaManagerSearchWidgetExpanded(bool fExpanded)
+{
+    /* 'True' if feature allowed, null-string otherwise: */
+    return setExtraDataString(GUI_VirtualMediaManager_Search_Widget_Expanded, toFeatureAllowed(fExpanded));
+}
+
 bool UIExtraDataManager::hostNetworkManagerDetailsExpanded()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 76995)
@@ -370,4 +370,8 @@
         /** Defines whether Virtual Media Manager details @a fExpanded. */
         void setVirtualMediaManagerDetailsExpanded(bool fExpanded);
+        /** Returns whether Virtual Media Manager search widget expanded. */
+        bool virtualMediaManagerSearchWidgetExpanded();
+        /** Defines whether Virtual Media Manager search widget @a fExpanded. */
+        void setVirtualMediaManagerSearchWidgetExpanded(bool fExpanded);
     /** @} */
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.cpp	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.cpp	(revision 76995)
@@ -2042,4 +2042,48 @@
         setStatusTip(QApplication::translate("UIActionPool", "Open pane with selected disk image file properties"));
         setToolTip(QApplication::translate("UIActionPool", "Open Disk Image File Properties (%1)").arg(shortcut().toString()));
+    }
+};
+
+/** Toggle action extension, used as 'Toggle Search Pane' action class. */
+class UIActionMenuSelectorMediumToggleSearch : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    /** Constructs action passing @a pParent to the base-class. */
+    UIActionMenuSelectorMediumToggleSearch(UIActionPool *pParent)
+        : UIActionToggle(pParent)
+    {
+        setShortcutContext(Qt::WidgetWithChildrenShortcut);
+        setIcon(0, UIIconPool::iconSetFull(":/hd_modify_32px.png",          ":/hd_modify_16px.png",
+                                           ":/hd_modify_disabled_32px.png", ":/hd_modify_disabled_16px.png"));
+        setIcon(1, UIIconPool::iconSetFull(":/cd_modify_32px.png",          ":/cd_modify_16px.png",
+                                           ":/cd_modify_disabled_32px.png", ":/cd_modify_disabled_16px.png"));
+        setIcon(2, UIIconPool::iconSetFull(":/fd_modify_32px.png",          ":/fd_modify_16px.png",
+                                           ":/fd_modify_disabled_32px.png", ":/fd_modify_disabled_16px.png"));
+    }
+
+protected:
+
+    /** Returns shortcut extra-data ID. */
+    virtual QString shortcutExtraDataID() const /* override */
+    {
+        return QString("ToggleMediumSearch");
+    }
+
+    /** Returns default shortcut. */
+    virtual QKeySequence defaultShortcut(UIActionPoolType) const /* override */
+    {
+        return QKeySequence("");
+    }
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */
+    {
+        setName(QApplication::translate("UIActionPool", "&Search"));
+        setShortcutScope(QApplication::translate("UIActionPool", "Media Manager"));
+        setStatusTip(QApplication::translate("UIActionPool", "Open the medium search pane"));
+        setToolTip(QApplication::translate("UIActionPool", "Open Medium Search Pane (%1)").arg(shortcut().toString()));
     }
 };
@@ -2619,4 +2663,5 @@
     m_pool[UIActionIndexST_M_Medium_S_Release] = new UIActionMenuSelectorMediumPerformRelease(this);
     m_pool[UIActionIndexST_M_Medium_T_Details] = new UIActionMenuSelectorMediumToggleProperties(this);
+    m_pool[UIActionIndexST_M_Medium_T_Search] = new UIActionMenuSelectorMediumToggleSearch(this);
     m_pool[UIActionIndexST_M_Medium_S_Refresh] = new UIActionMenuSelectorMediumPerformRefresh(this);
 
@@ -3087,4 +3132,6 @@
     /* 'Properties' action: */
     fSeparator = addAction(pMenu, action(UIActionIndexST_M_Medium_T_Details)) || fSeparator;
+    /* 'Search' action: */
+    fSeparator = addAction(pMenu, action(UIActionIndexST_M_Medium_T_Search)) || fSeparator;
 
     /* Separator? */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIActionPoolManager.h	(revision 76995)
@@ -138,4 +138,5 @@
     UIActionIndexST_M_Medium_S_Release,
     UIActionIndexST_M_Medium_T_Details,
+    UIActionIndexST_M_Medium_T_Search,
     UIActionIndexST_M_Medium_S_Refresh,
 
@@ -247,3 +248,2 @@
 
 #endif /* !FEQT_INCLUDED_SRC_globals_UIActionPoolManager_h */
-
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumItem.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumItem.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumItem.h	(revision 76995)
@@ -72,6 +72,9 @@
     KMediumState state() const { return m_guiMedium.state(); }
 
-    /** Returns QString <i>ID</i> of the wrapped UIMedium. */
+    /** Returns QUuid <i>ID</i> of the wrapped UIMedium. */
     QUuid id() const { return m_guiMedium.id(); }
+    /** Returns QString <i>name</i> of the wrapped UIMedium. */
+    QString name() const { return m_guiMedium.name(); }
+
     /** Returns QString <i>location</i> of the wrapped UIMedium. */
     QString location() const { return m_guiMedium.location(); }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp	(revision 76995)
@@ -37,4 +37,5 @@
 #include "UIMediumItem.h"
 #include "UIMediumManager.h"
+#include "UIMediumSearchWidget.h"
 #include "UIWizardCloneVD.h"
 #include "UIMessageCenter.h"
@@ -161,4 +162,5 @@
     , m_pToolBar(0)
     , m_pProgressBar(0)
+    , m_pSearchWidget(0)
 {
     /* Prepare: */
@@ -562,4 +564,13 @@
 }
 
+void UIMediumManagerWidget::sltToggleMediumSearchVisibility(bool fVisible)
+{
+    /* Save the setting: */
+    //gEDataManager->setVirtualMediaManagerSea(fVisible);
+    /* Toggle medium details visibility: */
+    if (m_pSearchWidget)
+        m_pSearchWidget->setVisible(fVisible);
+}
+
 void UIMediumManagerWidget::sltRefreshAll()
 {
@@ -620,8 +631,10 @@
         menu.addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Release));
         menu.addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Details));
+        menu.addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Search));
     }
     else
     {
         menu.addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Add));
+        menu.addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Search));
         menu.addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Refresh));
     }
@@ -653,4 +666,40 @@
             pTreeWidget->header()->resizeSection(0, iSize0);
     }
+}
+
+void UIMediumManagerWidget::sltHandlePerformSearch()
+{
+    if (!m_pSearchWidget || !m_pTabWidget)
+        return;
+
+    QITreeWidget *pTreeWidget = treeWidget(static_cast<UIMediumDeviceType>(m_pTabWidget->currentIndex()));
+    if (!pTreeWidget)
+        return;
+    m_pSearchWidget->search(pTreeWidget);
+
+    // printf("size %d\n", matchedList.size());
+    // m_pSearchWidget->searchItems(pTreeWidget->invisibleRootItem(), matchedList);
+
+
+
+    //     SearchType searchType() const;
+    // QString searchTerm() const;
+
+
+    // foreach (const QUuid &id, vboxGlobal().mediumIDs())
+    // {
+    //     UIMedium medium = vboxGlobal().medium(id);
+    //     /** Only search among the types of the tab widget's current page: */
+    //     if (static_cast<UIMediumDeviceType>(m_pTabWidget->currentIndex()) != medium.type())
+    //         continue;
+    //     if (m_pSearchWidget->searchType() == UIMediumSearchWidget::SearchByName &&
+    //         medium.name().contains(m_pSearchWidget->searchTerm(), Qt::CaseInsensitive))
+    //         matchedMediumList << medium;
+    //     else if (m_pSearchWidget->searchType() == UIMediumSearchWidget::SearchByUUID &&
+    //              medium.id().toString().contains(m_pSearchWidget->searchTerm(), Qt::CaseInsensitive))
+    //         matchedMediumList << medium;
+    // }
+    // printf("search %s -- %d\n", qPrintable(m_pSearchWidget->searchTerm()), matchedMediumList.size());
+
 }
 
@@ -711,4 +760,5 @@
     addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Release));
     addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Details));
+    addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Search));
     addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Refresh));
 
@@ -726,4 +776,6 @@
     connect(m_pActionPool->action(UIActionIndexST_M_Medium_T_Details), &QAction::toggled,
             this, &UIMediumManagerWidget::sltToggleMediumDetailsVisibility);
+    connect(m_pActionPool->action(UIActionIndexST_M_Medium_T_Search), &QAction::toggled,
+            this, &UIMediumManagerWidget::sltToggleMediumSearchVisibility);
     connect(m_pActionPool->action(UIActionIndexST_M_Medium_S_Refresh), &QAction::triggered,
             this, &UIMediumManagerWidget::sltRefreshAll);
@@ -754,4 +806,6 @@
         /* Prepare details-widget: */
         prepareDetailsWidget();
+        /* Prepare search-widget: */
+        prepareSearchWidget();
     }
 }
@@ -776,4 +830,5 @@
         m_pToolBar->addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Release));
         m_pToolBar->addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Details));
+        m_pToolBar->addAction(m_pActionPool->action(UIActionIndexST_M_Medium_T_Search));
         m_pToolBar->addSeparator();
         m_pToolBar->addAction(m_pActionPool->action(UIActionIndexST_M_Medium_S_Refresh));
@@ -901,4 +956,20 @@
 }
 
+void UIMediumManagerWidget::prepareSearchWidget()
+{
+    m_pSearchWidget = new UIMediumSearchWidget(this);
+    AssertPtrReturnVoid(m_pSearchWidget);
+    {
+        m_pSearchWidget->setVisible(false);
+        m_pSearchWidget->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
+        connect(m_pSearchWidget, &UIMediumSearchWidget::sigPerformSearch,
+                this, &UIMediumManagerWidget::sltHandlePerformSearch);
+
+        /* Add into layout: */
+        layout()->addWidget(m_pSearchWidget);
+    }
+
+}
+
 void UIMediumManagerWidget::loadSettings()
 {
@@ -906,4 +977,8 @@
     m_pActionPool->action(UIActionIndexST_M_Medium_T_Details)->setChecked(gEDataManager->virtualMediaManagerDetailsExpanded());
     sltToggleMediumDetailsVisibility(m_pActionPool->action(UIActionIndexST_M_Medium_T_Details)->isChecked());
+
+    /* Search action/widget: */
+    m_pActionPool->action(UIActionIndexST_M_Medium_T_Search)->setChecked(gEDataManager->virtualMediaManagerDetailsExpanded());
+    sltToggleMediumSearchVisibility(m_pActionPool->action(UIActionIndexST_M_Medium_T_Search)->isChecked());
 }
 
@@ -1644,2 +1719,41 @@
     return qobject_cast<UIMediumManagerWidget*>(QIManagerDialog::widget());
 }
+
+void UIMediumManagerWidget::markUnmarkSearchMatchedItems(bool fMark)
+{
+    /* Unmark the whole tree: */
+    if (!fMark)
+    {
+        QITreeWidget *pTreeWidget = treeWidget(static_cast<UIMediumDeviceType>(m_pTabWidget->currentIndex()));
+        if (!pTreeWidget)
+            return;
+        QList<UIMediumItem*> itemList;
+
+        getItems(pTreeWidget->invisibleRootItem(), itemList);
+    }
+    //QList<UIMedium> m_matchedMediumList;
+    // for (int i = 0; i < m_mediumItemList.size(); ++i)
+    // {
+    //     for (int j = 0; j < m_pTreeWidget->columnCount(); ++j)
+    //     {
+    //         if (m_mediumItemList[i])
+    //             m_mediumItemList[i]->setData(j, Qt::ForegroundRole, m_defaultItemForeground);
+    //     }
+    // }
+
+}
+
+void UIMediumManagerWidget::getItems(QTreeWidgetItem *pParentItem, QList<UIMediumItem*> outList)
+{
+    if (!pParentItem)
+        return;
+    if (pParentItem->type() == QITreeWidgetItem::ItemType)
+    {
+        UIMediumItem* pItem = static_cast<UIMediumItem*>(pParentItem);
+        if (pItem)
+            outList.append(pItem);
+    }
+
+    for (int iChildIndex = 0; iChildIndex < pParentItem->childCount(); ++iChildIndex)
+        getItems(pParentItem->child(iChildIndex), outList);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h	(revision 76995)
@@ -40,4 +40,5 @@
 class UIMediumDetailsWidget;
 class UIMediumItem;
+class UIMediumSearchWidget;
 class UIToolBar;
 
@@ -177,4 +178,6 @@
         /** Handles command to make medium details @a fVisible. */
         void sltToggleMediumDetailsVisibility(bool fVisible);
+        /** Handles command to make medium search pane @a fVisible. */
+        void sltToggleMediumSearchVisibility(bool fVisible);
         /** Handles command to refresh medium. */
         void sltRefreshAll();
@@ -195,4 +198,10 @@
         /** Adjusts tree-widgets according content. */
         void sltPerformTablesAdjustment();
+    /** @} */
+
+   /** @name Medium search stuff.
+      * @{ */
+        /** Adjusts tree-widgets according content. */
+        void sltHandlePerformSearch();
     /** @} */
 
@@ -219,4 +228,6 @@
         /** Prepares details-widget. */
         void prepareDetailsWidget();
+        /** Prepares search-widget. */
+        void prepareSearchWidget();
         /** Load settings: */
         void loadSettings();
@@ -285,4 +296,5 @@
                                         const CheckIfSuitableBy &condition,
                                         CheckIfSuitableBy *pException = 0);
+
 
         /** Checks if @a action can be used for @a pItem. */
@@ -351,4 +363,11 @@
         UIEnumerationProgressBar *m_pProgressBar;
     /** @} */
+
+    /** @name Search-widget variables.
+      * @{ */
+        /** Holds the medium details-widget instance. */
+        UIMediumSearchWidget *m_pSearchWidget;
+    /** @} */
+
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.cpp	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.cpp	(revision 76995)
@@ -25,6 +25,8 @@
 #include "QIDialogButtonBox.h"
 #include "QIToolButton.h"
+#include "QITreeWidget.h"
 #include "UIFDCreationDialog.h"
 #include "UIIconPool.h"
+#include "UIMediumItem.h"
 #include "UIMediumSearchWidget.h"
 #include "UIToolBar.h"
@@ -33,4 +35,37 @@
 # include "UIWindowMenuManager.h"
 #endif /* VBOX_WS_MAC */
+
+
+class FilterByNameUUID : public QITreeWidgetItemFilter
+{
+
+public:
+
+    FilterByNameUUID(UIMediumSearchWidget::SearchType enmSearchType, const QString &strSearchTerm)
+        : m_enmSearchType(enmSearchType)
+        , m_strSearchTerm(strSearchTerm){}
+
+    virtual bool operator()(QTreeWidgetItem *pItem) const
+    {
+        if (!pItem || m_strSearchTerm.isEmpty())
+            return false;
+        if (pItem->type() != QITreeWidgetItem::ItemType)
+            return false;
+
+        UIMediumItem *pMediumItem = static_cast<UIMediumItem*>(pItem);
+        if (!pMediumItem)
+            return false;
+        if (m_enmSearchType == UIMediumSearchWidget::SearchByUUID && !pMediumItem->id().toString().contains(m_strSearchTerm))
+            return false;
+        if (m_enmSearchType == UIMediumSearchWidget::SearchByName && !pMediumItem->name().contains(m_strSearchTerm))
+            return false;
+        return true;
+    }
+
+private:
+
+    UIMediumSearchWidget::SearchType m_enmSearchType;
+    QString m_strSearchTerm;
+};
 
 UIMediumSearchWidget::UIMediumSearchWidget(QWidget *pParent)
@@ -40,4 +75,6 @@
     , m_pShowNextMatchButton(0)
     , m_pShowPreviousMatchButton(0)
+    , m_pTreeWidget(0)
+    , m_iScrollToIndex(0)
 {
     prepareWidgets();
@@ -78,4 +115,6 @@
         m_pShowPreviousMatchButton->setIcon(UIIconPool::iconSet(":/log_viewer_search_backward_16px.png", ":/log_viewer_search_backward_disabled_16px.png"));
         connect(m_pShowPreviousMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget::sigShowPreviousMatchingItem);
+        connect(m_pShowPreviousMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget::sltShowPreviousMatchingItem);
+
         pLayout->addWidget(m_pShowPreviousMatchButton);
     }
@@ -85,4 +124,6 @@
         m_pShowNextMatchButton->setIcon(UIIconPool::iconSet(":/log_viewer_search_forward_16px.png", ":/log_viewer_search_forward_disabled_16px.png"));
         connect(m_pShowNextMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget:: sigShowNextMatchingItem);
+        connect(m_pShowNextMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget:: sltShowNextMatchingItem);
+
         pLayout->addWidget(m_pShowNextMatchButton);
     }
@@ -103,4 +144,22 @@
         return QString();
     return m_pSearchTermLineEdit->text();
+}
+
+void UIMediumSearchWidget::search(QITreeWidget* pTreeWidget)
+{
+    if (!pTreeWidget)
+        return;
+
+    m_pTreeWidget = pTreeWidget;
+    QList<QTreeWidgetItem*> allItems = pTreeWidget->filterItems(QITreeWidgetItemFilter());
+    markUnmarkItems(allItems, false);
+
+    m_matchedItemList = pTreeWidget->filterItems(FilterByNameUUID(searchType(), searchTerm()));
+    markUnmarkItems(m_matchedItemList, true);
+    if (!m_matchedItemList.isEmpty())
+    {
+        m_iScrollToIndex = 0;
+        pTreeWidget->scrollTo(pTreeWidget->itemIndex(m_matchedItemList[m_iScrollToIndex]), QAbstractItemView::PositionAtCenter);
+    }
 }
 
@@ -120,2 +179,47 @@
         m_pShowNextMatchButton->setToolTip("Show the next item matching the search term");
 }
+
+void UIMediumSearchWidget::showEvent(QShowEvent *pEvent)
+{
+    if (m_pSearchTermLineEdit)
+        m_pSearchTermLineEdit->setFocus();
+    QIWithRetranslateUI<QWidget>::showEvent(pEvent);
+}
+
+void UIMediumSearchWidget::markUnmarkItems(QList<QTreeWidgetItem*> &itemList, bool fMark)
+{
+    foreach (QTreeWidgetItem* pItem, itemList)
+    {
+        if (pItem->type() != QITreeWidgetItem::ItemType)
+            continue;
+        UIMediumItem *pMediumItem = static_cast<UIMediumItem*>(pItem);
+        if (!pMediumItem)
+            continue;
+        QFont font = pMediumItem->font(0);
+        font.setBold(fMark);
+        pMediumItem->setFont(0, font);
+    }
+}
+
+void UIMediumSearchWidget::sltShowNextMatchingItem()
+{
+    if (!m_pTreeWidget)
+        return;
+    if (++m_iScrollToIndex >= m_matchedItemList.size())
+        m_iScrollToIndex = 0;
+    if (!m_matchedItemList[m_iScrollToIndex])
+        return;
+    m_pTreeWidget->scrollTo(m_pTreeWidget->itemIndex(m_matchedItemList[m_iScrollToIndex]), QAbstractItemView::PositionAtCenter);
+}
+
+void UIMediumSearchWidget::sltShowPreviousMatchingItem()
+{
+    if (!m_pTreeWidget)
+        return;
+    if (--m_iScrollToIndex <= 0)
+        m_iScrollToIndex = m_matchedItemList.size() - 1;
+    if (!m_matchedItemList[m_iScrollToIndex])
+        return;
+    m_pTreeWidget->scrollTo(m_pTreeWidget->itemIndex(m_matchedItemList[m_iScrollToIndex]), QAbstractItemView::PositionAtCenter);
+
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.h	(revision 76994)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.h	(revision 76995)
@@ -27,8 +27,12 @@
 /* Forward declarations: */
 class QAction;
+class QTreeWidgetItem;
 class QLineEdit;
 class QIComboBox;
 class QIDialogButtonBox;
 class QIToolButton;
+class QITreeWidget;
+class UIMediumItem;
+
 
 /** QWidget extension providing a simple way to enter a earch term and search type for medium searching
@@ -58,16 +62,29 @@
     SearchType searchType() const;
     QString searchTerm() const;
+    void    search(QITreeWidget* pTreeWidget);
 
-protected:
+ protected:
 
     void retranslateUi() /* override */;
+    virtual void showEvent(QShowEvent *pEvent) /* override */;
+
+ private slots:
+
+    void sltShowNextMatchingItem();
+    void sltShowPreviousMatchingItem();
 
 private:
 
-    void              prepareWidgets();
+    void    prepareWidgets();
+    void    markUnmarkItems(QList<QTreeWidgetItem*> &itemList, bool fMark);
+
     QIComboBox       *m_pSearchComboxBox;
     QLineEdit        *m_pSearchTermLineEdit;
     QIToolButton     *m_pShowNextMatchButton;
     QIToolButton     *m_pShowPreviousMatchButton;
+
+    QList<QTreeWidgetItem*> m_matchedItemList;
+    QITreeWidget           *m_pTreeWidget;
+    int                     m_iScrollToIndex;
 };
 
