diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/manifest_headers.cmake b/Plugins/org.mitk.gui.qt.viewnavigator/manifest_headers.cmake
index 5fcab65742..b2b03c1ba2 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/manifest_headers.cmake
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/manifest_headers.cmake
@@ -1,5 +1,9 @@
 set(Plugin-Name "View Navigator")
 set(Plugin-Version "0.1")
 set(Plugin-Vendor "German Cancer Research Center (DKFZ)")
 set(Plugin-ContactAddress "")
-set(Require-Plugin org.mitk.gui.qt.common)
+
+set(Require-Plugin
+  org.mitk.gui.qt.application
+  org.mitk.gui.qt.common
+)
diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.cpp b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.cpp
index 4b47385e14..a5e9a5d6b2 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.cpp
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.cpp
@@ -1,47 +1,59 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #include "QmitkCategoryItem.h"
 #include "QmitkViewItem.h"
 
 #include <berryIViewDescriptor.h>
 
 QmitkCategoryItem::QmitkCategoryItem(const QString& category)
   : QStandardItem(category)
 {
   auto font = this->font();
   font.setPointSizeF(font.pointSizeF() * 1.25);
   this->setFont(font);
+
+  this->SetVisible(true);
 }
 
 QmitkCategoryItem::~QmitkCategoryItem()
 {
 }
 
 bool QmitkCategoryItem::HasMatch(const QRegularExpression& re) const
 {
   if (!this->hasChildren())
     return false;
 
   const int rowCount = this->rowCount();
 
   for (int row = 0; row < rowCount; ++row)
   {
     if (const auto* viewItem = dynamic_cast<QmitkViewItem*>(this->child(row)); viewItem != nullptr)
     {
       if (viewItem->Match(re))
         return true;
     }
   }
 
   return false;
 }
+
+bool QmitkCategoryItem::GetVisible() const
+{
+  return this->data().toBool();
+}
+
+void QmitkCategoryItem::SetVisible(bool visible)
+{
+  this->setData(visible);
+}
diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.h b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.h
index a1765b0491..b872d74701 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.h
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkCategoryItem.h
@@ -1,32 +1,40 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #ifndef QmitkCategoryItem_h
 #define QmitkCategoryItem_h
 
 #include <QRegularExpression>
 #include <QStandardItem>
 
 class QmitkCategoryItem : public QStandardItem
 {
 public:
   explicit QmitkCategoryItem(const QString& category);
   ~QmitkCategoryItem() override;
 
   /** \brief Check if any view item child of this category item matches the given regular expression.
    *
    * \sa QmitkViewItem::Match()
    */
   bool HasMatch(const QRegularExpression& re) const;
+
+  /** \brief Get visibility of this item including its children.
+   */
+  bool GetVisible() const;
+
+  /** \brief Enable or disable visibility of this item including its children.
+   */
+  void SetVisible(bool visible);
 };
 
 #endif
diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.cpp b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.cpp
index 8250f4af2e..0eb0ae1219 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.cpp
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.cpp
@@ -1,142 +1,165 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #include "QmitkViewNavigatorView.h"
 
+#include "QmitkCategoryItem.h"
 #include "QmitkViewItem.h"
 #include "QmitkViewModel.h"
 #include "QmitkViewProxyModel.h"
 
+#include <QmitkApplicationConstants.h>
+
+#include <mitkCoreServices.h>
+#include <mitkIPreferencesService.h>
+#include <mitkIPreferences.h>
+
 #include <berryUIException.h>
 
 #include <ui_QmitkViewNavigatorView.h>
 
 QmitkViewNavigatorView::QmitkViewNavigatorView()
   : m_Ui(new Ui::QmitkViewNavigatorView),
     m_Model(nullptr),
     m_ProxyModel(nullptr)
 {
 }
 
 QmitkViewNavigatorView::~QmitkViewNavigatorView()
 {
   this->GetPartService()->RemovePartListener(this);
 }
 
 void QmitkViewNavigatorView::CreateQtPartControl(QWidget* parent)
 {
   m_Ui->setupUi(parent);
 
   m_Model = new QmitkViewModel(parent);
 
   m_ProxyModel = new QmitkViewProxyModel(parent);
   m_ProxyModel->setSourceModel(m_Model);
 
   m_Ui->viewTreeView->setModel(m_ProxyModel);
-  m_Ui->viewTreeView->expandAll();
 
   connect(m_Ui->filterLineEdit, &QLineEdit::textChanged, this, &QmitkViewNavigatorView::OnFilterTextChanged);
   connect(m_Ui->viewTreeView, &QTreeView::doubleClicked, this, &QmitkViewNavigatorView::OnItemDoubleClicked);
 
   this->GetPartService()->AddPartListener(this); // The part service is not available earlier (e.g. in the constructor).
 }
 
 void QmitkViewNavigatorView::SetFocus()
 {
   m_Ui->filterLineEdit->setFocus();
 }
 
+mitk::IPreferences* QmitkViewNavigatorView::GetPreferences() const
+{
+  auto prefService = mitk::CoreServices::GetPreferencesService();
+  return prefService->GetSystemPreferences()->Node(QmitkApplicationConstants::TOOL_BARS_PREFERENCES);
+}
+
+void QmitkViewNavigatorView::OnPreferencesChanged(const mitk::IPreferences* prefs)
+{
+  for (const auto& category : prefs->Keys())
+  {
+    if (auto* categoryItem = m_Model->GetCategoryItem(QString::fromStdString(category)); categoryItem != nullptr)
+      categoryItem->SetVisible(prefs->GetBool(category, true));
+  }
+
+  m_Ui->viewTreeView->expandAll();
+}
+
 berry::IWorkbenchPage* QmitkViewNavigatorView::GetActivePage() const
 {
   if (auto site = this->GetSite(); site.IsNotNull())
   {
     if (auto workbenchWindow = site->GetWorkbenchWindow(); workbenchWindow.IsNotNull())
       return workbenchWindow->GetActivePage().GetPointer();
   }
 
   return nullptr;
 }
 
 berry::IPartService* QmitkViewNavigatorView::GetPartService() const
 {
   if (auto site = this->GetSite(); site.IsNotNull())
   {
     if (auto workbenchWindow = site->GetWorkbenchWindow(); workbenchWindow.IsNotNull())
       return workbenchWindow->GetPartService();
   }
 
   return nullptr;
 }
 
 void QmitkViewNavigatorView::OnFilterTextChanged(const QString& filter)
 {
   m_ProxyModel->setFilterFixedString(filter);
   m_Ui->viewTreeView->expandAll();
 }
 
 void QmitkViewNavigatorView::OnItemDoubleClicked(const QModelIndex& index)
 {
   auto viewItem = dynamic_cast<QmitkViewItem*>(m_Model->itemFromIndex(m_ProxyModel->mapToSource(index)));
 
   if (viewItem != nullptr)
   {
     if (auto activePage = this->GetActivePage(); activePage != nullptr)
     {
       try
       {
         activePage->ShowView(viewItem->data().toString());
       }
       catch (const berry::PartInitException& e)
       {
         MITK_ERROR << e.what();
       }
     }
   }
 }
 
 berry::IPartListener::Events::Types QmitkViewNavigatorView::GetPartEventTypes() const
 {
   return Events::OPENED | Events::CLOSED;
 }
 
 void QmitkViewNavigatorView::PartOpened(const berry::IWorkbenchPartReference::Pointer& partRef)
 {
   if (partRef->GetId() != "org.mitk.views.viewnavigator")
   {
     auto viewItem = m_Model->GetViewItemFromId(partRef->GetId());
 
     if (viewItem != nullptr)
       viewItem->SetBoldFont(true);
   }
   else if (auto activePage = this->GetActivePage(); activePage != nullptr)
   {
     // The active page is not available during view initialization. Hence, we hook
     // into PartOpened() for the View Navigator itself, which is called shortly after,
     // to initialize the state of all views.
 
     for (const auto& view : activePage->GetViews())
     {
       auto viewItem = m_Model->GetViewItemFromId(view->GetSite()->GetId());
 
       if (viewItem != nullptr)
         viewItem->SetBoldFont(true);
     }
   }
 }
 
 void QmitkViewNavigatorView::PartClosed(const berry::IWorkbenchPartReference::Pointer& partRef)
 {
   auto viewItem = m_Model->GetViewItemFromId(partRef->GetId());
 
   if (viewItem != nullptr)
     viewItem->SetBoldFont(false);
 }
diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.h b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.h
index 0707968b67..911440e1f7 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.h
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewNavigatorView.h
@@ -1,60 +1,62 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #ifndef QmitkViewNavigatorView_h
 #define QmitkViewNavigatorView_h
 
 #include <berryIPartListener.h>
 #include <QmitkAbstractView.h>
 
 class QmitkViewModel;
 class QmitkViewProxyModel;
 
 namespace berry
 {
   struct IPartService;
   struct IWorkbenchPage;
 }
 
 namespace Ui
 {
   class QmitkViewNavigatorView;
 }
 
 class QmitkViewNavigatorView : public QmitkAbstractView, public berry::IPartListener
 {
   Q_OBJECT
 
 public:
   QmitkViewNavigatorView();
   ~QmitkViewNavigatorView() override;
 
 private:
   void CreateQtPartControl(QWidget* parent) override;
   void SetFocus() override;
+  mitk::IPreferences* GetPreferences() const override;
+  void OnPreferencesChanged(const mitk::IPreferences* prefs) override;
 
   Events::Types GetPartEventTypes() const override;
   void PartOpened(const berry::IWorkbenchPartReference::Pointer& partRef) override;
   void PartClosed(const berry::IWorkbenchPartReference::Pointer& partRef) override;
 
   berry::IWorkbenchPage* GetActivePage() const;
   berry::IPartService* GetPartService() const;
 
   void OnFilterTextChanged(const QString& filter);
   void OnItemDoubleClicked(const QModelIndex& index);
 
   Ui::QmitkViewNavigatorView* m_Ui;
   QmitkViewModel* m_Model;
   QmitkViewProxyModel* m_ProxyModel;
 };
 
 #endif
diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewProxyModel.cpp b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewProxyModel.cpp
index dd0d2e99f3..c34d600409 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewProxyModel.cpp
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/src/QmitkViewProxyModel.cpp
@@ -1,67 +1,77 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #include "QmitkViewProxyModel.h"
 
 #include "QmitkCategoryItem.h"
 #include "QmitkViewItem.h"
 
 #include <QStandardItemModel>
 
 QmitkViewProxyModel::QmitkViewProxyModel(QObject* parent)
   : QSortFilterProxyModel(parent)
 {
   this->setFilterCaseSensitivity(Qt::CaseInsensitive);
   this->setSortCaseSensitivity(Qt::CaseInsensitive);
 }
 
 QmitkViewProxyModel::~QmitkViewProxyModel()
 {
 }
 
 bool QmitkViewProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const
 {
-  // Primarily filter view items. Include their parent category items, though.
+  // Primarily filter view items. Include their parent category items, though. Consider only
+  // views of visible categories.
 
   auto model = dynamic_cast<QStandardItemModel*>(this->sourceModel());
 
   if (model == nullptr)
     return true;
 
   const auto re = this->filterRegularExpression();
 
   auto index = model->index(sourceRow, 0, sourceParent);
   const auto* item = model->itemFromIndex(index);
 
   if (auto viewItem = dynamic_cast<const QmitkViewItem*>(item); viewItem != nullptr)
   {
+    if (auto categoryItem = dynamic_cast<const QmitkCategoryItem*>(viewItem->parent()); categoryItem != nullptr)
+    {
+      if (!categoryItem->GetVisible())
+        return false;
+    }
+
     return viewItem->Match(re);
   }
   else if (auto categoryItem = dynamic_cast<const QmitkCategoryItem*>(item); categoryItem != nullptr)
   {
+    if (!categoryItem->GetVisible())
+      return false;
+
     return categoryItem->HasMatch(re);
   }
 
   return true;
 }
 
 bool QmitkViewProxyModel::lessThan(const QModelIndex& left, const QModelIndex& right) const
 {
   // Sort by item text in ascending order.
 
   auto model = this->sourceModel();
   auto leftText = model->data(left).toString();
   auto rightText = model->data(right).toString();
   auto caseSensitivity = this->sortCaseSensitivity();
 
   return leftText.compare(rightText, caseSensitivity) > 0;
 }
diff --git a/Plugins/org.mitk.gui.qt.viewnavigator/src/internal/mitkPluginActivator.cpp b/Plugins/org.mitk.gui.qt.viewnavigator/src/internal/mitkPluginActivator.cpp
index b22855c5e3..e0fd3cac1d 100644
--- a/Plugins/org.mitk.gui.qt.viewnavigator/src/internal/mitkPluginActivator.cpp
+++ b/Plugins/org.mitk.gui.qt.viewnavigator/src/internal/mitkPluginActivator.cpp
@@ -1,23 +1,28 @@
 /*============================================================================
 
 The Medical Imaging Interaction Toolkit (MITK)
 
 Copyright (c) German Cancer Research Center (DKFZ)
 All rights reserved.
 
 Use of this source code is governed by a 3-clause BSD license that can be
 found in the LICENSE file.
 
 ============================================================================*/
 
 #include "mitkPluginActivator.h"
+
 #include <QmitkViewNavigatorView.h>
 
+#include <usModuleInitialization.h>
+
+US_INITIALIZE_MODULE
+
 void mitk::PluginActivator::start(ctkPluginContext* context)
 {
   BERRY_REGISTER_EXTENSION_CLASS(QmitkViewNavigatorView, context)
 }
 
 void mitk::PluginActivator::stop(ctkPluginContext*)
 {
 }