diff --git a/Modules/ModuleList.cmake b/Modules/ModuleList.cmake
index 89d0588465..b027952284 100644
--- a/Modules/ModuleList.cmake
+++ b/Modules/ModuleList.cmake
@@ -1,77 +1,78 @@
 # The entries in the mitk_modules list must be
 # ordered according to their dependencies.
 
 set(MITK_MODULES
   Log
   Core
   CommandLine
   CoreCmdApps
   AppUtil
   LegacyIO
   DataTypesExt
   Annotation
   LegacyGL
   AlgorithmsExt
   MapperExt
   DICOM
   DICOMQI
   DICOMTesting
   SceneSerializationBase
   PlanarFigure
   ImageDenoising
   ImageExtraction
   SceneSerialization
   Gizmo
   GraphAlgorithms
   Multilabel
   Chart
   ImageStatistics
   ContourModel
   SurfaceInterpolation
   Segmentation
   QtWidgets
   QtWidgetsExt
   ImageStatisticsUI
   SegmentationUI
   MatchPointRegistration
   MatchPointRegistrationUI
   Classification
   OpenIGTLink
   IGTBase
   IGT
   CameraCalibration
   OpenCL
   OpenCVVideoSupport
   QtOverlays
   ToFHardware
   ToFProcessing
   ToFUI
   US
   USUI
   DICOMUI
   Remeshing
   Python
   QtPython
   Persistence
   OpenIGTLinkUI
   IGTUI
   RT
   RTUI
   IOExt
   XNAT
   TubeGraph
   BoundingShape
   RenderWindowManagerUI
   SemanticRelations
   SemanticRelationsUI
   CEST
   BasicImageProcessing
   ModelFit
   ModelFitUI
   Pharmacokinetics
   PharmacokineticsUI
   DICOMPM
   REST
   RESTService
   DICOMweb
+  ROI
 )
diff --git a/Modules/ROI/CMakeLists.txt b/Modules/ROI/CMakeLists.txt
new file mode 100644
index 0000000000..147dcf0fcf
--- /dev/null
+++ b/Modules/ROI/CMakeLists.txt
@@ -0,0 +1,5 @@
+mitk_create_module(
+  DEPENDS MitkCore
+)
+
+add_subdirectory(autoload/IO)
diff --git a/Modules/ROI/autoload/IO/CMakeLists.txt b/Modules/ROI/autoload/IO/CMakeLists.txt
new file mode 100644
index 0000000000..984bfe1eaa
--- /dev/null
+++ b/Modules/ROI/autoload/IO/CMakeLists.txt
@@ -0,0 +1,5 @@
+mitk_create_module(ROIIO
+  DEPENDS PUBLIC MitkROI MitkSceneSerialization
+  PACKAGE_DEPENDS PRIVATE nlohmann_json
+  AUTOLOAD_WITH MitkCore
+)
diff --git a/Modules/ROI/autoload/IO/files.cmake b/Modules/ROI/autoload/IO/files.cmake
new file mode 100644
index 0000000000..cd11c12ddf
--- /dev/null
+++ b/Modules/ROI/autoload/IO/files.cmake
@@ -0,0 +1,13 @@
+set(H_FILES
+  include/mitkROIIOMimeTypes.h
+  src/mitkROIIO.h
+  src/mitkROIIOModuleActivator.h
+  src/mitkROISerializer.h
+)
+
+set(CPP_FILES
+  mitkROIIO.cpp
+  mitkROIIOMimeTypes.cpp
+  mitkROIIOModuleActivator.cpp
+  mitkROISerializer.cpp
+)
diff --git a/Modules/ROI/autoload/IO/include/mitkROIIOMimeTypes.h b/Modules/ROI/autoload/IO/include/mitkROIIOMimeTypes.h
new file mode 100644
index 0000000000..75bdad237e
--- /dev/null
+++ b/Modules/ROI/autoload/IO/include/mitkROIIOMimeTypes.h
@@ -0,0 +1,38 @@
+/*============================================================================
+
+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 mitkROIIOMimeTypes_h
+#define mitkROIIOMimeTypes_h
+
+#include <mitkCustomMimeType.h>
+#include <MitkROIIOExports.h>
+
+namespace mitk
+{
+  namespace MitkROIIOMimeTypes
+  {
+    class MITKROIIO_EXPORT MitkROIMimeType : public CustomMimeType
+    {
+    public:
+      MitkROIMimeType();
+
+      bool AppliesTo(const std::string& path) const override;
+      MitkROIMimeType* Clone() const override;
+    };
+
+    MITKROIIO_EXPORT MitkROIMimeType ROI_MIMETYPE();
+    MITKROIIO_EXPORT std::string ROI_MIMETYPE_NAME();
+    MITKROIIO_EXPORT std::vector<CustomMimeType*> Get();
+  }
+}
+
+#endif
diff --git a/Modules/ROI/autoload/IO/src/mitkROIIO.cpp b/Modules/ROI/autoload/IO/src/mitkROIIO.cpp
new file mode 100644
index 0000000000..0354b844dc
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROIIO.cpp
@@ -0,0 +1,36 @@
+/*============================================================================
+
+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 "mitkROIIO.h"
+#include <mitkROI.h>
+#include <mitkROIIOMimeTypes.h>
+
+mitk::ROIIO::ROIIO()
+  : AbstractFileIO(ROI::GetStaticNameOfClass(), MitkROIIOMimeTypes::ROI_MIMETYPE(), "MITK ROI")
+{
+  this->RegisterService();
+}
+
+std::vector<mitk::BaseData::Pointer> mitk::ROIIO::DoRead()
+{
+  std::vector<BaseData::Pointer> result;
+  return result;
+}
+
+void mitk::ROIIO::Write()
+{
+}
+
+mitk::ROIIO* mitk::ROIIO::IOClone() const
+{
+  return new ROIIO(*this);
+}
diff --git a/Modules/ROI/autoload/IO/src/mitkROIIO.h b/Modules/ROI/autoload/IO/src/mitkROIIO.h
new file mode 100644
index 0000000000..dee6434802
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROIIO.h
@@ -0,0 +1,36 @@
+/*============================================================================
+
+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 mitkROIIO_h
+#define mitkROIIO_h
+
+#include <mitkAbstractFileIO.h>
+
+namespace mitk
+{
+  class ROIIO : public AbstractFileIO
+  {
+  public:
+    ROIIO();
+
+    using AbstractFileReader::Read;
+    void Write() override;
+
+  protected:
+    std::vector<BaseData::Pointer> DoRead() override;
+
+  private:
+    ROIIO* IOClone() const override;
+  };
+}
+
+#endif
diff --git a/Modules/ROI/autoload/IO/src/mitkROIIOMimeTypes.cpp b/Modules/ROI/autoload/IO/src/mitkROIIOMimeTypes.cpp
new file mode 100644
index 0000000000..91b8032fe5
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROIIOMimeTypes.cpp
@@ -0,0 +1,75 @@
+/*============================================================================
+
+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 <mitkROIIOMimeTypes.h>
+#include <mitkIOMimeTypes.h>
+
+#include <filesystem>
+#include <fstream>
+
+#include <nlohmann/json.hpp>
+
+mitk::MitkROIIOMimeTypes::MitkROIMimeType::MitkROIMimeType()
+  : CustomMimeType(ROI_MIMETYPE_NAME())
+{
+  this->AddExtension("json");
+  this->SetCategory("MITK ROI");
+  this->SetComment("MITK ROI");
+}
+
+bool mitk::MitkROIIOMimeTypes::MitkROIMimeType::AppliesTo(const std::string& path) const
+{
+  bool result = CustomMimeType::AppliesTo(path);
+
+  if (!std::filesystem::exists(path)) // T18572
+    return result;
+
+  std::ifstream file(path);
+
+  if (!file.is_open())
+    return false;
+
+  auto json = nlohmann::json::parse(file, nullptr, false);
+
+  if (json.is_discarded() || !json.is_object())
+    return false;
+
+  if ("MITK ROI" != json.value("FileFormat", ""))
+    return false;
+
+  if (1 != json.value<int>("Version", 0))
+    return false;
+
+  return true;
+}
+
+mitk::MitkROIIOMimeTypes::MitkROIMimeType* mitk::MitkROIIOMimeTypes::MitkROIMimeType::Clone() const
+{
+  return new MitkROIMimeType(*this);
+}
+
+mitk::MitkROIIOMimeTypes::MitkROIMimeType mitk::MitkROIIOMimeTypes::ROI_MIMETYPE()
+{
+  return MitkROIMimeType();
+}
+
+std::string mitk::MitkROIIOMimeTypes::ROI_MIMETYPE_NAME()
+{
+  return IOMimeTypes::DEFAULT_BASE_NAME() + ".roi";
+}
+
+std::vector<mitk::CustomMimeType*> mitk::MitkROIIOMimeTypes::Get()
+{
+  std::vector<CustomMimeType*> mimeTypes;
+  mimeTypes.push_back(ROI_MIMETYPE().Clone());
+  return mimeTypes;
+}
diff --git a/Modules/ROI/autoload/IO/src/mitkROIIOModuleActivator.cpp b/Modules/ROI/autoload/IO/src/mitkROIIOModuleActivator.cpp
new file mode 100644
index 0000000000..2c9304f004
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROIIOModuleActivator.cpp
@@ -0,0 +1,37 @@
+/*============================================================================
+
+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 "mitkROIIOModuleActivator.h"
+
+#include <mitkROIIOMimeTypes.h>
+#include "mitkROIIO.h"
+
+#include <usModuleContext.h>
+
+US_EXPORT_MODULE_ACTIVATOR(mitk::ROIIOModuleActivator)
+
+void mitk::ROIIOModuleActivator::Load(us::ModuleContext* context)
+{
+  auto mimeTypes = MitkROIIOMimeTypes::Get();
+
+  us::ServiceProperties props;
+  props[us::ServiceConstants::SERVICE_RANKING()] = 10;
+
+  for (auto mimeType : mimeTypes)
+    context->RegisterService(mimeType, props);
+
+  m_FileIOs.push_back(std::make_shared<ROIIO>());
+}
+
+void mitk::ROIIOModuleActivator::Unload(us::ModuleContext*)
+{
+}
diff --git a/Modules/ROI/autoload/IO/src/mitkROIIOModuleActivator.h b/Modules/ROI/autoload/IO/src/mitkROIIOModuleActivator.h
new file mode 100644
index 0000000000..d5412c1c7f
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROIIOModuleActivator.h
@@ -0,0 +1,35 @@
+/*============================================================================
+
+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 <usModuleActivator.h>
+#include <memory>
+
+namespace mitk
+{
+  class AbstractFileIO;
+
+  class ROIIOModuleActivator : public us::ModuleActivator
+  {
+  public:
+    ROIIOModuleActivator() = default;
+    ~ROIIOModuleActivator() override = default;
+
+    ROIIOModuleActivator(const ROIIOModuleActivator&) = delete;
+    ROIIOModuleActivator& operator=(const ROIIOModuleActivator&) = delete;
+
+    void Load(us::ModuleContext* context) override;
+    void Unload(us::ModuleContext*) override;
+
+  private:
+    std::vector<std::shared_ptr<AbstractFileIO>> m_FileIOs;
+  };
+}
diff --git a/Modules/ROI/autoload/IO/src/mitkROISerializer.cpp b/Modules/ROI/autoload/IO/src/mitkROISerializer.cpp
new file mode 100644
index 0000000000..6148f54324
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROISerializer.cpp
@@ -0,0 +1,55 @@
+/*============================================================================
+
+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 "mitkROISerializer.h"
+
+#include <mitkROI.h>
+#include <mitkIOUtil.h>
+
+MITK_REGISTER_SERIALIZER(ROISerializer)
+
+mitk::ROISerializer::ROISerializer()
+{
+}
+
+mitk::ROISerializer::~ROISerializer()
+{
+}
+
+std::string mitk::ROISerializer::Serialize()
+{
+  auto roi = dynamic_cast<const ROI*>(m_Data.GetPointer());
+
+  if (nullptr == roi)
+  {
+    MITK_ERROR << "Object at " << (const void*)this->m_Data << " is not an mitk::ROI. Cannot serialize as MITK ROI.";
+    return "";
+  }
+
+  auto filename = this->GetUniqueFilenameInWorkingDirectory();
+  filename += "_" + m_FilenameHint + ".json";
+
+  std::string path = m_WorkingDirectory;
+  path += IOUtil::GetDirectorySeparator() + filename;
+
+  try
+  {
+    IOUtil::Save(roi, path);
+  }
+  catch (std::exception& e)
+  {
+    MITK_ERROR << "Error serializing object at " << (const void*)this->m_Data << " to " << path << ": " << e.what();
+    return "";
+  }
+
+  return filename;
+}
diff --git a/Modules/ROI/autoload/IO/src/mitkROISerializer.h b/Modules/ROI/autoload/IO/src/mitkROISerializer.h
new file mode 100644
index 0000000000..0daf876a01
--- /dev/null
+++ b/Modules/ROI/autoload/IO/src/mitkROISerializer.h
@@ -0,0 +1,34 @@
+/*============================================================================
+
+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 mitkROISerializer_h
+#define mitkROISerializer_h
+
+#include <mitkBaseDataSerializer.h>
+
+namespace mitk
+{
+  class ROISerializer : public BaseDataSerializer
+  {
+  public:
+    mitkClassMacro(ROISerializer, BaseDataSerializer)
+    itkFactorylessNewMacro(Self)
+
+    std::string Serialize() override;
+
+  protected:
+    ROISerializer();
+    ~ROISerializer() override;
+  };
+}
+
+#endif
diff --git a/Modules/ROI/files.cmake b/Modules/ROI/files.cmake
new file mode 100644
index 0000000000..8526fe310a
--- /dev/null
+++ b/Modules/ROI/files.cmake
@@ -0,0 +1,13 @@
+set(H_FILES
+  include/mitkROI.h
+  include/mitkROIMapper2D.h
+  include/mitkROIMapper3D.h
+  src/mitkROIObjectFactory.h
+)
+
+set(CPP_FILES
+  mitkROI.cpp
+  mitkROIMapper2D.cpp
+  mitkROIMapper3D.cpp
+  mitkROIObjectFactory.cpp
+)
diff --git a/Modules/ROI/include/mitkROI.h b/Modules/ROI/include/mitkROI.h
new file mode 100644
index 0000000000..8167f78cb9
--- /dev/null
+++ b/Modules/ROI/include/mitkROI.h
@@ -0,0 +1,42 @@
+/*============================================================================
+
+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 mitkROI_h
+#define mitkROI_h
+
+#include <mitkBaseData.h>
+#include <MitkROIExports.h>
+
+namespace mitk
+{
+  class MITKROI_EXPORT ROI : public BaseData
+  {
+  public:
+    mitkClassMacro(ROI, BaseData)
+    itkFactorylessNewMacro(Self)
+    itkCloneMacro(Self)
+
+    void SetRequestedRegionToLargestPossibleRegion() override;
+    bool RequestedRegionIsOutsideOfTheBufferedRegion() override;
+    bool VerifyRequestedRegion() override;
+    void SetRequestedRegion(const itk::DataObject* data) override;
+
+  protected:
+    mitkCloneMacro(Self)
+
+    ROI();
+    ROI(const Self& other);
+    ~ROI() override;
+  };
+}
+
+#endif
diff --git a/Modules/ROI/include/mitkROIMapper2D.h b/Modules/ROI/include/mitkROIMapper2D.h
new file mode 100644
index 0000000000..430302e761
--- /dev/null
+++ b/Modules/ROI/include/mitkROIMapper2D.h
@@ -0,0 +1,56 @@
+/*============================================================================
+
+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 mitkROIMapper2D_h
+#define mitkROIMapper2D_h
+
+#include <mitkLocalStorageHandler.h>
+#include <mitkVtkMapper.h>
+#include <MitkROIExports.h>
+
+#include <vtkPropAssembly.h>
+#include <vtkSmartPointer.h>
+
+namespace mitk
+{
+  class MITKROI_EXPORT ROIMapper2D : public VtkMapper
+  {
+    class LocalStorage : public Mapper::BaseLocalStorage
+    {
+    public:
+      LocalStorage();
+      ~LocalStorage() override;
+
+      vtkPropAssembly* GetPropAssembly() const;
+
+    protected:
+      vtkSmartPointer<vtkPropAssembly> m_PropAssembly;
+    };
+
+  public:
+    static void SetDefaultProperties(DataNode* node, BaseRenderer* renderer = nullptr, bool override = false);
+
+    mitkClassMacro(ROIMapper2D, VtkMapper)
+    itkFactorylessNewMacro(Self)
+
+    vtkProp *GetVtkProp(mitk::BaseRenderer *renderer) override;
+
+  protected:
+    ROIMapper2D();
+    ~ROIMapper2D() override;
+
+  private:
+    LocalStorageHandler<LocalStorage> m_LocalStorageHandler;
+  };
+}
+
+#endif
diff --git a/Modules/ROI/include/mitkROIMapper3D.h b/Modules/ROI/include/mitkROIMapper3D.h
new file mode 100644
index 0000000000..91a8a65918
--- /dev/null
+++ b/Modules/ROI/include/mitkROIMapper3D.h
@@ -0,0 +1,56 @@
+/*============================================================================
+
+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 mitkROIMapper3D_h
+#define mitkROIMapper3D_h
+
+#include <mitkLocalStorageHandler.h>
+#include <mitkVtkMapper.h>
+#include <MitkROIExports.h>
+
+#include <vtkPropAssembly.h>
+#include <vtkSmartPointer.h>
+
+namespace mitk
+{
+  class MITKROI_EXPORT ROIMapper3D : public VtkMapper
+  {
+    class LocalStorage : public Mapper::BaseLocalStorage
+    {
+    public:
+      LocalStorage();
+      ~LocalStorage() override;
+
+      vtkPropAssembly* GetPropAssembly() const;
+
+    protected:
+      vtkSmartPointer<vtkPropAssembly> m_PropAssembly;
+    };
+
+  public:
+    static void SetDefaultProperties(DataNode* node, BaseRenderer* renderer = nullptr, bool override = false);
+
+    mitkClassMacro(ROIMapper3D, VtkMapper)
+    itkFactorylessNewMacro(Self)
+
+    vtkProp *GetVtkProp(mitk::BaseRenderer *renderer) override;
+
+  protected:
+    ROIMapper3D();
+    ~ROIMapper3D() override;
+
+  private:
+    LocalStorageHandler<LocalStorage> m_LocalStorageHandler;
+  };
+}
+
+#endif
diff --git a/Modules/ROI/src/mitkROI.cpp b/Modules/ROI/src/mitkROI.cpp
new file mode 100644
index 0000000000..91b5d905e2
--- /dev/null
+++ b/Modules/ROI/src/mitkROI.cpp
@@ -0,0 +1,44 @@
+/*============================================================================
+
+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 <mitkROI.h>
+
+mitk::ROI::ROI()
+{
+}
+
+mitk::ROI::ROI(const Self& other)
+  : BaseData(other)
+{
+}
+
+mitk::ROI::~ROI()
+{
+}
+
+void mitk::ROI::SetRequestedRegionToLargestPossibleRegion()
+{
+}
+
+bool mitk::ROI::RequestedRegionIsOutsideOfTheBufferedRegion()
+{
+  return false;
+}
+
+bool mitk::ROI::VerifyRequestedRegion()
+{
+  return true;
+}
+
+void mitk::ROI::SetRequestedRegion(const itk::DataObject* data)
+{
+}
diff --git a/Modules/ROI/src/mitkROIMapper2D.cpp b/Modules/ROI/src/mitkROIMapper2D.cpp
new file mode 100644
index 0000000000..c2adedc3fc
--- /dev/null
+++ b/Modules/ROI/src/mitkROIMapper2D.cpp
@@ -0,0 +1,45 @@
+/*============================================================================
+
+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 <mitkROIMapper2D.h>
+
+mitk::ROIMapper2D::LocalStorage::LocalStorage()
+  : m_PropAssembly(vtkSmartPointer<vtkPropAssembly>::New())
+{
+}
+
+mitk::ROIMapper2D::LocalStorage::~LocalStorage()
+{
+}
+
+vtkPropAssembly* mitk::ROIMapper2D::LocalStorage::GetPropAssembly() const
+{
+  return m_PropAssembly;
+}
+
+void mitk::ROIMapper2D::SetDefaultProperties(DataNode* node, BaseRenderer* renderer, bool override)
+{
+  Superclass::SetDefaultProperties(node, renderer, override);
+}
+
+mitk::ROIMapper2D::ROIMapper2D()
+{
+}
+
+mitk::ROIMapper2D::~ROIMapper2D()
+{
+}
+
+vtkProp* mitk::ROIMapper2D::GetVtkProp(BaseRenderer* renderer)
+{
+  return m_LocalStorageHandler.GetLocalStorage(renderer)->GetPropAssembly();
+}
diff --git a/Modules/ROI/src/mitkROIMapper3D.cpp b/Modules/ROI/src/mitkROIMapper3D.cpp
new file mode 100644
index 0000000000..c3ff36625b
--- /dev/null
+++ b/Modules/ROI/src/mitkROIMapper3D.cpp
@@ -0,0 +1,45 @@
+/*============================================================================
+
+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 <mitkROIMapper3D.h>
+
+mitk::ROIMapper3D::LocalStorage::LocalStorage()
+  : m_PropAssembly(vtkSmartPointer<vtkPropAssembly>::New())
+{
+}
+
+mitk::ROIMapper3D::LocalStorage::~LocalStorage()
+{
+}
+
+vtkPropAssembly* mitk::ROIMapper3D::LocalStorage::GetPropAssembly() const
+{
+  return m_PropAssembly;
+}
+
+void mitk::ROIMapper3D::SetDefaultProperties(DataNode* node, BaseRenderer* renderer, bool override)
+{
+  Superclass::SetDefaultProperties(node, renderer, override);
+}
+
+mitk::ROIMapper3D::ROIMapper3D()
+{
+}
+
+mitk::ROIMapper3D::~ROIMapper3D()
+{
+}
+
+vtkProp* mitk::ROIMapper3D::GetVtkProp(BaseRenderer* renderer)
+{
+  return m_LocalStorageHandler.GetLocalStorage(renderer)->GetPropAssembly();
+}
diff --git a/Modules/ROI/src/mitkROIObjectFactory.cpp b/Modules/ROI/src/mitkROIObjectFactory.cpp
new file mode 100644
index 0000000000..cffe1fca6d
--- /dev/null
+++ b/Modules/ROI/src/mitkROIObjectFactory.cpp
@@ -0,0 +1,108 @@
+/*============================================================================
+
+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 "mitkROIObjectFactory.h"
+#include <mitkCoreObjectFactory.h>
+#include <mitkROI.h>
+#include <mitkROIMapper2D.h>
+#include <mitkROIMapper3D.h>
+
+mitk::ROIObjectFactory::ROIObjectFactory()
+{
+}
+
+mitk::ROIObjectFactory::~ROIObjectFactory()
+{
+}
+
+mitk::Mapper::Pointer mitk::ROIObjectFactory::CreateMapper(DataNode* node, MapperSlotId slotId)
+{
+  Mapper::Pointer mapper;
+
+  if (node != nullptr)
+  {
+    auto* roi = dynamic_cast<ROI*>(node->GetData());
+
+    if (roi != nullptr)
+    {
+      if (slotId == BaseRenderer::Standard2D)
+      {
+        mapper = ROIMapper2D::New();
+      }
+      else if (slotId == BaseRenderer::Standard3D)
+      {
+        mapper = ROIMapper3D::New();
+      }
+
+      if (mapper.IsNotNull())
+        mapper->SetDataNode(node);
+    }
+  }
+
+  return mapper;
+}
+
+void mitk::ROIObjectFactory::SetDefaultProperties(DataNode* node)
+{
+  if (node == nullptr)
+    return;
+
+  auto* roi = dynamic_cast<ROI*>(node->GetData());
+
+  if (roi == nullptr)
+    return;
+
+  ROIMapper2D::SetDefaultProperties(node);
+  ROIMapper3D::SetDefaultProperties(node);
+}
+
+std::string mitk::ROIObjectFactory::GetFileExtensions()
+{
+  return "";
+}
+
+mitk::ROIObjectFactory::MultimapType mitk::ROIObjectFactory::GetFileExtensionsMap()
+{
+  return {};
+}
+
+std::string mitk::ROIObjectFactory::GetSaveFileExtensions()
+{
+  return "";
+}
+
+mitk::ROIObjectFactory::MultimapType mitk::ROIObjectFactory::GetSaveFileExtensionsMap()
+{
+  return {};
+}
+
+namespace mitk
+{
+  class RegisterROIObjectFactory
+  {
+  public:
+    RegisterROIObjectFactory()
+      : m_Factory(ROIObjectFactory::New())
+    {
+      CoreObjectFactory::GetInstance()->RegisterExtraFactory(m_Factory);
+    }
+
+    ~RegisterROIObjectFactory()
+    {
+    }
+
+  private:
+    ROIObjectFactory::Pointer m_Factory;
+  };
+}
+
+static mitk::RegisterROIObjectFactory registerROIObjectFactory;
diff --git a/Modules/ROI/src/mitkROIObjectFactory.h b/Modules/ROI/src/mitkROIObjectFactory.h
new file mode 100644
index 0000000000..75ac43fc92
--- /dev/null
+++ b/Modules/ROI/src/mitkROIObjectFactory.h
@@ -0,0 +1,39 @@
+/*============================================================================
+
+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 mitkROIObjectFactory_h
+#define mitkROIObjectFactory_h
+
+#include <mitkCoreObjectFactoryBase.h>
+
+namespace mitk
+{
+  class ROIObjectFactory : public CoreObjectFactoryBase
+  {
+  public:
+    mitkClassMacro(ROIObjectFactory, CoreObjectFactoryBase)
+    itkFactorylessNewMacro(Self)
+
+    Mapper::Pointer CreateMapper(DataNode* node, MapperSlotId slotId) override;
+    void SetDefaultProperties(DataNode *node) override;
+    std::string GetFileExtensions() override;
+    MultimapType GetFileExtensionsMap() override;
+    std::string GetSaveFileExtensions() override;
+    MultimapType GetSaveFileExtensionsMap() override;
+
+  protected:
+    ROIObjectFactory();
+    ~ROIObjectFactory() override;
+  };
+}
+
+#endif