diff --git a/psrdada_cpp/effelsberg/edd/FftSpectrometer.cuh b/psrdada_cpp/effelsberg/edd/FftSpectrometer.cuh
index 465e33b9042aa0483ef59a6f4bbe0144f9875578..d70a438779b3beeec098742a8a22d4bb75f94a59 100644
--- a/psrdada_cpp/effelsberg/edd/FftSpectrometer.cuh
+++ b/psrdada_cpp/effelsberg/edd/FftSpectrometer.cuh
@@ -28,8 +28,6 @@ public:
         std::size_t fft_length,
         std::size_t naccumulate,
         std::size_t nbits,
-        float input_level,
-        float output_level,
 
         HandlerType& handler);
     ~FftSpectrometer();
diff --git a/psrdada_cpp/effelsberg/edd/detail/FftSpectrometer.cu b/psrdada_cpp/effelsberg/edd/detail/FftSpectrometer.cu
index 6166bfb31d700600ed5832943cbfe5e35176755e..2e825b535419ea24c20528d89e4674b8b64f78a2 100644
--- a/psrdada_cpp/effelsberg/edd/detail/FftSpectrometer.cu
+++ b/psrdada_cpp/effelsberg/edd/detail/FftSpectrometer.cu
@@ -15,8 +15,6 @@ FftSpectrometer<HandlerType>::FftSpectrometer(
     std::size_t fft_length,
     std::size_t naccumulate,
     std::size_t nbits,
-    float input_level,
-    float output_level,
     HandlerType& handler)
     : _buffer_bytes(buffer_bytes)
     , _fft_length(fft_length)
@@ -180,7 +178,8 @@ bool FftSpectrometer<HandlerType>::operator()(RawBytes& block)
     // The handler can't do anything asynchronously without a copy here
     // as it would be unsafe (given that it does not own the memory it
     // is being passed).
-    return _handler(bytes);
+    _handler(bytes);
+    return false;
 }
 
 } //edd
diff --git a/psrdada_cpp/effelsberg/edd/src/fft_spectrometer_cli.cu b/psrdada_cpp/effelsberg/edd/src/fft_spectrometer_cli.cu
index 412653c33961bd690a9d190fef838addccc09bdb..aace99b85c6afdced8896d98eefe9dad4b9bc3ca 100644
--- a/psrdada_cpp/effelsberg/edd/src/fft_spectrometer_cli.cu
+++ b/psrdada_cpp/effelsberg/edd/src/fft_spectrometer_cli.cu
@@ -33,9 +33,10 @@ int main(int argc, char** argv)
 
         std::time_t now = std::time(NULL);
         std::tm * ptm = std::localtime(&now);
-        char buffer[32];
-        std::strftime(buffer, 32, "%Y-%m-%d-%H:%M:%S.bp", ptm);
-        std::string filename(buffer);
+        char default_filename[32];
+        std::strftime(default_filename, 32, "%Y-%m-%d-%H:%M:%S.bp", ptm);
+        std::string filename(default_filename);
+        std::string output_type;
 
         /** Define and parse the program options
         */
@@ -65,12 +66,12 @@ int main(int argc, char** argv)
             "The number of bits per sample in the packetiser output (8, 10, or 12)");
 
         desc.add_options()(
-            "output_type", po::value<std::string>(&ip.output_type)->default_value("file"),
+            "output_type", po::value<std::string>(&output_type)->default_value("file"),
             "output type [dada, file, profile]. Default is file. Profile executes the "
             " spectrometer 10x on random data and passes the ouput to a null sink."
         );
         desc.add_options()(
-            "output_key,o", po::value<std::string>(&ip.filename)->default_value(default_filename),
+            "output_key,o", po::value<std::string>(&filename)->default_value(default_filename),
             "The key of the output bnuffer / name of the output file to write spectra "
             "to");
 
@@ -94,9 +95,9 @@ int main(int argc, char** argv)
                 return SUCCESS;
             }
             po::notify(vm);
-            if (vm.count("output_type") && (!(ip.output_type == "dada" || ip.output_type == "file" || ip.output_type== "profile") ))
+            if (vm.count("output_type") && (!(output_type == "dada" || output_type == "file" || output_type== "profile") ))
             {
-              throw po::validation_error(po::validation_error::invalid_option_value, "output_type", ip.output_type);
+              throw po::validation_error(po::validation_error::invalid_option_value, "output_type", output_type);
             }
 
         }
@@ -114,20 +115,25 @@ int main(int argc, char** argv)
         std::size_t buffer_bytes = client.data_buffer_size();
 
 
-        if (i.output_type == "file"){
+        if (output_type == "file"){
 
             SimpleFileWriter sink(filename);
             //NullSink sink;
-            effelsberg::edd::FftSpectrometer<decltype(sink)> spectrometer(buffer_bytes, fft_length, naccumulate, nbits, input_level, output_level, sink);
-        } else if (i.output_type == "dada"){
-            DadaOutputStream sink(string_to_key(i.filename), log);
+            effelsberg::edd::FftSpectrometer<decltype(sink)> spectrometer(buffer_bytes, fft_length, naccumulate, nbits, sink);
 
-            effelsberg::edd::FftSpectrometer<decltype(sink)> spectrometer(buffer_bytes, fft_length, naccumulate, nbits, input_level, output_level, sink);
+            DadaInputStream<decltype(spectrometer)> istream(input_key, log, spectrometer);
+            istream.start();
+        } else if (output_type == "dada"){
+            DadaOutputStream sink(string_to_key(filename), log);
 
-        } else if (i.output_type == "profile") {
+            effelsberg::edd::FftSpectrometer<decltype(sink)> spectrometer(buffer_bytes, fft_length, naccumulate, nbits, sink);
+
+            DadaInputStream<decltype(spectrometer)> istream(input_key, log, spectrometer);
+            istream.start();
+        } else if (output_type == "profile") {
 
             NullSink sink;
-            effelsberg::edd::FftSpectrometer<decltype(sink)> spectrometer(buffer_bytes, fft_length, naccumulate, nbits, input_level, output_level, sink);
+            effelsberg::edd::FftSpectrometer<decltype(sink)> spectrometer(buffer_bytes, fft_length, naccumulate, nbits, sink);
             std::vector<char> buffer(fft_length * naccumulate * nbits / 8);
             cudaHostRegister(buffer.data(), buffer.size(), cudaHostRegisterPortable);
             RawBytes ib(buffer.data(), buffer.size(), buffer.size());
@@ -138,13 +144,10 @@ int main(int argc, char** argv)
               spectrometer(ib);
             }
 
-
-
-
+            DadaInputStream<decltype(spectrometer)> istream(input_key, log, spectrometer);
+            istream.start();
          }
 
-        DadaInputStream<decltype(spectrometer)> istream(input_key, log, spectrometer);
-        istream.start();
         /**
          * End of application code
          */
diff --git a/psrdada_cpp/effelsberg/edd/test/src/FftSpectrometerTester.cu b/psrdada_cpp/effelsberg/edd/test/src/FftSpectrometerTester.cu
index c82f3ebe9e5efa5ca7b82ff4d8ceb67e592b5be1..3f0cad292485521d14a5d388d7d995c8224535a1 100644
--- a/psrdada_cpp/effelsberg/edd/test/src/FftSpectrometerTester.cu
+++ b/psrdada_cpp/effelsberg/edd/test/src/FftSpectrometerTester.cu
@@ -31,18 +31,18 @@ void FftSpectrometerTester::TearDown()
 }
 
 void FftSpectrometerTester::performance_test(
-    std::size_t fft_length, std::size_t tscrunch, 
+    std::size_t fft_length, std::size_t tscrunch,
     std::size_t nsamps_out, std::size_t nbits)
 {
     std::size_t input_block_bytes = tscrunch * fft_length * nsamps_out * nbits/8;
-   
+
     DoublePinnedHostBuffer<char> input_block;
-    input_block.resize(input_block_bytes);	
+    input_block.resize(input_block_bytes);
     RawBytes input_raw_bytes(input_block.a_ptr(), input_block_bytes, input_block_bytes);
     std::vector<char> header_block(4096);
     RawBytes header_raw_bytes(header_block.data(), 4096, 4096);
     NullSink null_sink;
-    FftSpectrometer<NullSink> spectrometer(input_block_bytes, fft_length, tscrunch, nbits, 16.0f, 16.0f, null_sink);
+    FftSpectrometer<NullSink> spectrometer(input_block_bytes, fft_length, tscrunch, nbits, null_sink);
     spectrometer.init(header_raw_bytes);
     for (int ii = 0; ii < 100; ++ii)
     {