diff --git a/Modules/Multilabel/autoload/IO/CMakeLists.txt b/Modules/Multilabel/autoload/IO/CMakeLists.txt
index a61aebf0db..ae9c56dfe8 100644
--- a/Modules/Multilabel/autoload/IO/CMakeLists.txt
+++ b/Modules/Multilabel/autoload/IO/CMakeLists.txt
@@ -1,5 +1,5 @@
 mitk_create_module(MultilabelIO
   DEPENDS PUBLIC MitkMultilabel MitkSceneSerialization
-  PACKAGE_DEPENDS PRIVATE ITK|IONRRD
+  PACKAGE_DEPENDS PRIVATE ITK|IONRRD nlohmann_json
   AUTOLOAD_WITH MitkCore
 )
diff --git a/Modules/Multilabel/autoload/IO/files.cmake b/Modules/Multilabel/autoload/IO/files.cmake
index a5079ce423..d169777cb5 100644
--- a/Modules/Multilabel/autoload/IO/files.cmake
+++ b/Modules/Multilabel/autoload/IO/files.cmake
@@ -1,8 +1,13 @@
 set(CPP_FILES
   mitkLabelSetImageIO.cpp
   mitkLabelSetImageIO.h
   mitkLabelSetImageSerializer.cpp
   mitkLabelSetImageSerializer.h
   mitkMultilabelActivator.cpp
+  mitkMultilabelIOMimeTypes.cpp
+  mitkMultilabelIOMimeTypes.h
+  mitkSegmentationTaskIO.cpp
+  mitkSegmentationTaskIO.h
+  mitkSegmentationTaskSerializer.cpp
+  mitkSegmentationTaskSerializer.h
 )
-
diff --git a/Modules/Multilabel/autoload/IO/mitkMultilabelActivator.cpp b/Modules/Multilabel/autoload/IO/mitkMultilabelActivator.cpp
index f70ac539e2..e410ee225d 100644
--- a/Modules/Multilabel/autoload/IO/mitkMultilabelActivator.cpp
+++ b/Modules/Multilabel/autoload/IO/mitkMultilabelActivator.cpp
@@ -1,44 +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 <usGetModuleContext.h>
 #include <usModule.h>
 #include <usModuleActivator.h>
 #include <usModuleContext.h>
 
 #include "mitkLabelSetImageIO.h"
+#include "mitkMultilabelIOMimeTypes.h"
+#include "mitkSegmentationTaskIO.h"
 
 namespace mitk
 {
   /**
   \brief Registers services for multilabel module.
   */
   class MultilabelIOModuleActivator : public us::ModuleActivator
   {
     std::vector<AbstractFileIO *> m_FileIOs;
 
   public:
-    void Load(us::ModuleContext * /*context*/) override
+    void Load(us::ModuleContext *context) override
     {
+      auto mimeTypes = MitkMultilabelIOMimeTypes::Get();
+
+      us::ServiceProperties props;
+      props[us::ServiceConstants::SERVICE_RANKING()] = 10;
+
+      for (const auto &mimeType : mimeTypes)
+        context->RegisterService(mimeType, props);
+
       m_FileIOs.push_back(new LabelSetImageIO());
+      m_FileIOs.push_back(new SegmentationTaskIO);
     }
     void Unload(us::ModuleContext *) override
     {
       for (auto &elem : m_FileIOs)
       {
         delete elem;
       }
     }
   };
 }
 
 US_EXPORT_MODULE_ACTIVATOR(mitk::MultilabelIOModuleActivator)
diff --git a/Modules/Multilabel/autoload/IO/mitkMultilabelIOMimeTypes.cpp b/Modules/Multilabel/autoload/IO/mitkMultilabelIOMimeTypes.cpp
new file mode 100644
index 0000000000..f1293d2c32
--- /dev/null
+++ b/Modules/Multilabel/autoload/IO/mitkMultilabelIOMimeTypes.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 "mitkMultilabelIOMimeTypes.h"
+#include <mitkIOMimeTypes.h>
+
+#include <filesystem>
+#include <fstream>
+
+#include <nlohmann/json.hpp>
+
+mitk::MitkMultilabelIOMimeTypes::MitkSegmentationTaskMimeType::MitkSegmentationTaskMimeType()
+  : CustomMimeType(SEGMENTATIONTASK_MIMETYPE_NAME())
+{
+  this->AddExtension("json");
+  this->SetCategory("MITK Segmentation Task");
+  this->SetComment("MITK Segmentation Task");
+}
+
+bool mitk::MitkMultilabelIOMimeTypes::MitkSegmentationTaskMimeType::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 Segmentation Task" != json.value("FileFormat", ""))
+    return false;
+
+  if (1 != json.value<int>("Version", 0))
+    return false;
+
+  return true;
+}
+
+mitk::MitkMultilabelIOMimeTypes::MitkSegmentationTaskMimeType* mitk::MitkMultilabelIOMimeTypes::MitkSegmentationTaskMimeType::Clone() const
+{
+  return new MitkSegmentationTaskMimeType(*this);
+}
+
+mitk::MitkMultilabelIOMimeTypes::MitkSegmentationTaskMimeType mitk::MitkMultilabelIOMimeTypes::SEGMENTATIONTASK_MIMETYPE()
+{
+  return MitkSegmentationTaskMimeType();
+}
+
+std::string mitk::MitkMultilabelIOMimeTypes::SEGMENTATIONTASK_MIMETYPE_NAME()
+{
+  return IOMimeTypes::DEFAULT_BASE_NAME() + ".segmentationtask";
+}
+
+std::vector<mitk::CustomMimeType*> mitk::MitkMultilabelIOMimeTypes::Get()
+{
+  std::vector<CustomMimeType*> mimeTypes;
+  mimeTypes.push_back(SEGMENTATIONTASK_MIMETYPE().Clone());
+  return mimeTypes;
+}
diff --git a/Modules/Multilabel/autoload/IO/mitkMultilabelIOMimeTypes.h b/Modules/Multilabel/autoload/IO/mitkMultilabelIOMimeTypes.h
new file mode 100644
index 0000000000..8508964e43
--- /dev/null
+++ b/Modules/Multilabel/autoload/IO/mitkMultilabelIOMimeTypes.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 mitkMultilabelIOMimeTypes_h
+#define mitkMultilabelIOMimeTypes_h
+
+#include <mitkCustomMimeType.h>
+#include <MitkMultilabelIOExports.h>
+
+namespace mitk
+{
+  namespace MitkMultilabelIOMimeTypes
+  {
+    class MITKMULTILABELIO_EXPORT MitkSegmentationTaskMimeType : public CustomMimeType
+    {
+    public:
+      MitkSegmentationTaskMimeType();
+
+      bool AppliesTo(const std::string& path) const override;
+      MitkSegmentationTaskMimeType* Clone() const override;
+    };
+
+    MITKMULTILABELIO_EXPORT MitkSegmentationTaskMimeType SEGMENTATIONTASK_MIMETYPE();
+    MITKMULTILABELIO_EXPORT std::string SEGMENTATIONTASK_MIMETYPE_NAME();
+
+    MITKMULTILABELIO_EXPORT std::vector<CustomMimeType*> Get();
+  }
+}
+
+#endif
diff --git a/Modules/Multilabel/autoload/IO/mitkSegmentationTaskIO.cpp b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskIO.cpp
new file mode 100644
index 0000000000..0a8c63f9f8
--- /dev/null
+++ b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskIO.cpp
@@ -0,0 +1,106 @@
+/*============================================================================
+
+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 "mitkSegmentationTaskIO.h"
+#include "mitkMultilabelIOMimeTypes.h"
+
+#include <mitkSegmentationTask.h>
+
+#include <nlohmann/json.hpp>
+
+#include <filesystem>
+#include <fstream>
+
+mitk::SegmentationTaskIO::SegmentationTaskIO()
+  : AbstractFileIO(SegmentationTask::GetStaticNameOfClass(), MitkMultilabelIOMimeTypes::SEGMENTATIONTASK_MIMETYPE(), "MITK Segmentation Task")
+{
+  this->RegisterService();
+}
+
+std::vector<mitk::BaseData::Pointer> mitk::SegmentationTaskIO::DoRead()
+{
+  auto* stream = this->GetInputStream();
+  std::ifstream fileStream;
+
+  if (nullptr == stream)
+  {
+    auto filename = this->GetInputLocation();
+
+    if (filename.empty() || !std::filesystem::exists(filename))
+      mitkThrow() << "Invalid or nonexistent filename: \"" << filename << "\"!";
+
+    fileStream.open(filename);
+
+    if (!fileStream.is_open())
+      mitkThrow() << "Could not open file \"" << filename << "\" for reading!";
+
+    stream = &fileStream;
+  }
+
+  auto json = nlohmann::json::parse(*stream, nullptr, false);
+
+  if (json.is_discarded() || !json.is_object())
+    mitkThrow() << "Could not parse JSON!";
+
+  if ("MITK Segmentation Task" != json.value("FileFormat", ""))
+    mitkThrow() << "Unknown file format (expected \"MITK Segmentation Task\")!";
+
+  if (1 != json.value<int>("Version", 0))
+    mitkThrow() << "Unknown file format version (expected \"1\")!";
+
+  auto segmentationTask = SegmentationTask::New();
+
+  // TODO
+
+  std::vector<BaseData::Pointer> result;
+  result.push_back(segmentationTask.GetPointer());
+
+  return result;
+}
+
+void mitk::SegmentationTaskIO::Write()
+{
+  auto* stream = this->GetOutputStream();
+  std::ofstream fileStream;
+
+  if (nullptr == stream)
+  {
+    auto filename = this->GetOutputLocation();
+
+    if (filename.empty())
+      mitkThrow() << "Neither an output stream nor an output filename was specified!";
+
+    fileStream.open(filename);
+
+    if (!fileStream.is_open())
+      mitkThrow() << "Could not open file \"" << filename << "\" for writing!";
+
+    stream = &fileStream;
+  }
+
+  if (!stream->good())
+    mitkThrow() << "Stream for writing is not good!";
+
+  nlohmann::json json = {
+    { "FileFormat", "MITK Segmentation Task" },
+    { "Version", 1 }
+  };
+
+  // TODO
+
+  *stream << std::setw(2) << json << std::endl;
+}
+
+mitk::SegmentationTaskIO* mitk::SegmentationTaskIO::IOClone() const
+{
+  return new SegmentationTaskIO(*this);
+}
diff --git a/Modules/Multilabel/autoload/IO/mitkSegmentationTaskIO.h b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskIO.h
new file mode 100644
index 0000000000..9c7380bae4
--- /dev/null
+++ b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskIO.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 mitkSegmentationTaskIO_h
+#define mitkSegmentationTaskIO_h
+
+#include <mitkAbstractFileIO.h>
+
+namespace mitk
+{
+  class SegmentationTaskIO : public AbstractFileIO
+  {
+  public:
+    SegmentationTaskIO();
+
+    using AbstractFileReader::Read;
+    void Write() override;
+
+  protected:
+    std::vector<BaseData::Pointer> DoRead() override;
+
+  private:
+    SegmentationTaskIO* IOClone() const override;
+  };
+}
+
+#endif
diff --git a/Modules/Multilabel/autoload/IO/mitkSegmentationTaskSerializer.cpp b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskSerializer.cpp
new file mode 100644
index 0000000000..0d64b26bbb
--- /dev/null
+++ b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskSerializer.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 "mitkSegmentationTaskSerializer.h"
+#include "mitkSegmentationTask.h"
+
+#include <mitkIOUtil.h>
+
+MITK_REGISTER_SERIALIZER(SegmentationTaskSerializer)
+
+mitk::SegmentationTaskSerializer::SegmentationTaskSerializer()
+{
+}
+
+mitk::SegmentationTaskSerializer::~SegmentationTaskSerializer()
+{
+}
+
+std::string mitk::SegmentationTaskSerializer::Serialize()
+{
+  auto segmentationTask = dynamic_cast<const SegmentationTask*>(m_Data.GetPointer());
+
+  if (nullptr == segmentationTask)
+  {
+    MITK_ERROR << "Object at " << (const void*)this->m_Data << " is not an mitk::SegmentationTask. Cannot serialize as MITK Segmentation Task.";
+    return "";
+  }
+
+  auto filename = this->GetUniqueFilenameInWorkingDirectory();
+  filename += "_" + m_FilenameHint + ".json";
+
+  std::string path = m_WorkingDirectory;
+  path += IOUtil::GetDirectorySeparator() + filename;
+
+  try
+  {
+    IOUtil::Save(segmentationTask, 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/Multilabel/autoload/IO/mitkSegmentationTaskSerializer.h b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskSerializer.h
new file mode 100644
index 0000000000..96bbf49ccc
--- /dev/null
+++ b/Modules/Multilabel/autoload/IO/mitkSegmentationTaskSerializer.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 mitkSegmentationTaskSerializer_h
+#define mitkSegmentationTaskSerializer_h
+
+#include <mitkBaseDataSerializer.h>
+
+namespace mitk
+{
+  class SegmentationTaskSerializer : public BaseDataSerializer
+  {
+  public:
+    mitkClassMacro(SegmentationTaskSerializer, BaseDataSerializer)
+    itkFactorylessNewMacro(Self)
+
+    std::string Serialize() override;
+
+  protected:
+    SegmentationTaskSerializer();
+    ~SegmentationTaskSerializer() override;
+  };
+}
+
+#endif