diff --git a/streaming_recording_backend.cpp b/streaming_recording_backend.cpp
index 5893486545aebd8f87ae4352e83dea57236fba43..6b5cac34341ee95691245f6c2d89f1889f4acbeb 100644
--- a/streaming_recording_backend.cpp
+++ b/streaming_recording_backend.cpp
@@ -23,6 +23,8 @@
 #include "streaming_recording_backend.h"
 
 #include "recording_device.h"
+#include "nesci/producer/nest_multimeter.hpp"
+#include "nesci/producer/spike_detector.hpp"
 
 #include <iostream>
 #include <memory>
@@ -70,23 +72,37 @@ void StreamingRecordingBackend::enroll(
     long_parameter_names.push_back(value_name.toString());
   }
 
-  if (device.get_type() == nest::RecordingDevice::Type::MULTIMETER) {
-    devices_[std::this_thread::get_id()][device.get_name()] =
-        std::make_unique<nesci::producer::NestMultimeter>(
-            device.get_name(), double_parameter_names, long_parameter_names);
-  }
-
-  std::cout << std::this_thread::get_id() << ' ';
-  std::cout << device.get_name() << ' ';
-  std::cout << "double_value_names: ";
-  for (const auto &name : double_value_names) {
-    std::cout << name << ' ';
-  }
-  std::cout << ", long_value_names: ";
-  for (const auto &name : long_value_names) {
-    std::cout << name << ' ';
+  switch (device.get_type()) {
+    case nest::RecordingDevice::Type::MULTIMETER:
+      devices_[std::this_thread::get_id()][device.get_name()] =
+          std::make_unique<nesci::producer::NestMultimeter>(
+              device.get_name(), double_parameter_names, long_parameter_names);
+      std::cout << "Thread " << std::this_thread::get_id()
+                << ": enrolled multimeter `" << device.get_name()
+                << "` recording ";
+      for (const auto &double_value : double_value_names) {
+        std::cout << '`' << double_value << "` ";
+      }
+      for (const auto &long_value : long_value_names) {
+        std::cout << '`' << long_value << "` ";
+      }
+      std::cout << std::endl;
+      break;
+
+    case nest::RecordingDevice::Type::SPIKE_DETECTOR:
+      devices_[std::this_thread::get_id()][device.get_name()] =
+          std::make_unique<nesci::producer::SpikeDetector>(device.get_name());
+      std::cout << "Thread " << std::this_thread::get_id()
+                << ": enrolled spike detector `" << device.get_name() << "`"
+                << std::endl;
+      std::cout << std::endl;
+      break;
+
+    default:
+      std::cerr << "Invalid recording device type for " << device.get_name()
+                << std::endl;
+      break;
   }
-  std::cout << std::endl;
 }
 
 void StreamingRecordingBackend::write(const nest::RecordingDevice &device,
@@ -113,6 +129,15 @@ void StreamingRecordingBackend::write(const nest::RecordingDevice &device,
         static_cast<nesci::producer::NestMultimeter *>(nesci_device.get());
     multimeter->Record(event.get_stamp().get_ms(), event.get_sender_gid(),
                        double_values.data(), long_values.data());
+  } else if (device.get_type() == nest::RecordingDevice::Type::SPIKE_DETECTOR) {
+    auto spike_detector =
+        static_cast<nesci::producer::SpikeDetector *>(nesci_device.get());
+    nesci::producer::SpikeDetector::Datum datum{event.get_stamp().get_ms(),
+                                                event.get_sender_gid()};
+    spike_detector->Record(datum);
+  } else {
+    std::cerr << "Error: no device registered for `" << device.get_name() << '`'
+              << std::endl;
   }
 }
 
@@ -125,12 +150,13 @@ void StreamingRecordingBackend::synchronize() {
   }
 
   for (const auto &device : thread_devices->second) {
+    const auto node = device.second->node();
+    // TODO: check if node is empty
     {
       std::lock_guard<std::mutex> lock_guard(relay_mutex_);
-      relay_.Send(device.second->node(), false);
+      relay_.Send(node, false);
     }
-    static_cast<nesci::producer::NestMultimeter *>(device.second.get())
-        ->Clear();
+    device.second->Clear();
   }
 }
 
diff --git a/streaming_recording_backend.h b/streaming_recording_backend.h
index 52643d7fa67e200790f95395de1f5cde5625784a..e78cccadaa879e90bdf5e372937a93fad193713f 100644
--- a/streaming_recording_backend.h
+++ b/streaming_recording_backend.h
@@ -36,7 +36,6 @@
 #include "contra/relay.hpp"
 #include "contra/shared_memory/shared_memory_transport.hpp"
 #include "nesci/producer/device.hpp"
-#include "nesci/producer/nest_multimeter.hpp"
 
 namespace streamingnest {