diff --git a/geomagio/Controller.py b/geomagio/Controller.py
index 432f63f9f4d54d3451b7495d0c88e7b5625bde6c..f985c4fae44d9ebbb3224f4b7398854fdb3bb231 100644
--- a/geomagio/Controller.py
+++ b/geomagio/Controller.py
@@ -8,6 +8,7 @@ from typing import List, Optional, Tuple, Union
 from obspy.core import Stream, UTCDateTime
 
 from .algorithm import Algorithm, algorithms, AlgorithmException
+from .DerivedTimeseriesFactory import DerivedTimeseriesFactory
 from .PlotTimeseriesFactory import PlotTimeseriesFactory
 from .StreamTimeseriesFactory import StreamTimeseriesFactory
 from . import TimeseriesUtility, Util
@@ -543,7 +544,7 @@ def get_input_factory(args):
             input_factory = StreamTimeseriesFactory(
                 factory=input_factory, stream=input_stream
             )
-    return input_factory
+    return DerivedTimeseriesFactory(input_factory)
 
 
 def get_output_factory(args):
diff --git a/geomagio/api/ws/data.py b/geomagio/api/ws/data.py
index bec7e546e39d1b3452597d7e428d6afac3f3db2b..24f16b226acc8aa1e44913c622a202cf63b8c55b 100644
--- a/geomagio/api/ws/data.py
+++ b/geomagio/api/ws/data.py
@@ -5,7 +5,7 @@ from fastapi import APIRouter, Depends, Query
 from obspy import UTCDateTime, Stream
 from starlette.responses import Response
 
-from ... import TimeseriesFactory, TimeseriesUtility
+from ... import DerivedTimeseriesFactory, TimeseriesFactory, TimeseriesUtility
 from ...edge import EdgeFactory, MiniSeedFactory
 from ...iaga2002 import IAGA2002Writer
 from ...imfjson import IMFJSONWriter
@@ -35,15 +35,16 @@ def get_data_factory(
         SamplingPeriod.HOUR,
         SamplingPeriod.DAY,
     ]:
-        return MiniSeedFactory(
+        factory = MiniSeedFactory(
             host=host, port=int(os.getenv("DATA_MINISEED_PORT", "2061"))
         )
     elif sampling_period in [SamplingPeriod.SECOND, SamplingPeriod.MINUTE]:
-        return EdgeFactory(
+        factory = EdgeFactory(
             host=host, port=int(os.getenv("DATA_EARTHWORM_PORT", "2060"))
         )
     else:
         return None
+    return DerivedTimeseriesFactory(factory)
 
 
 def get_data_query(