diff --git a/geomagio/imfv283/IMFV283Factory.py b/geomagio/imfv283/IMFV283Factory.py
index 2dc9edc9a03d13c4bb23aac61477d75d270d26f0..a12e079d2af0851e460ee5961caaac7a72f0ac91 100644
--- a/geomagio/imfv283/IMFV283Factory.py
+++ b/geomagio/imfv283/IMFV283Factory.py
@@ -1,10 +1,8 @@
 """Factory that loads IAGA2002 Files."""
 
-import obspy.core
 import numpy
 from .. import ChannelConverter
 from ..TimeseriesFactory import TimeseriesFactory
-from ..Util import read_url
 from IMFV283Parser import IMFV283Parser
 from ..ObservatoryMetadata import ObservatoryMetadata
 
@@ -23,10 +21,8 @@ class IMFV283Factory(TimeseriesFactory):
     url/file reading.
     """
 
-    def __init__(self, urlTemplate, observatory=None, channels=None, type=None,
-            interval=None, observatoryMetadata=None):
-        TimeseriesFactory.__init__(self, observatory, channels, type,
-                interval, urlTemplate)
+    def __init__(self, observatoryMetadata=None, **kwargs):
+        TimeseriesFactory.__init__(self, **kwargs)
         self.observatoryMetadata = observatoryMetadata or ObservatoryMetadata()
 
     def get_timeseries(self, starttime, endtime, observatory=None,
@@ -57,24 +53,21 @@ class IMFV283Factory(TimeseriesFactory):
             if invalid values are requested, or errors occur while
             retrieving timeseries.
         """
+        timeseries = self._get_timeseries(
+                starttime=starttime,
+                endtime=endtime,
+                observatory=observatory,
+                channels=channels,
+                type=type,
+                interval=interval)
         observatory = observatory or self.observatory
-        channels = channels or self.channels
-        type = type or self.type
-        interval = interval or self.interval
-        timeseries = obspy.core.Stream()
-        url_id = self._get_url(observatory, obspy.core.UTCDateTime(),
-                type, interval)
-
-        imfV283File = read_url(url_id)
-        timeseries += self.parse_string(imfV283File)
-        # merge channel traces for multiple days
-        timeseries.merge()
-        # trim to requested start/end time
-        timeseries.trim(starttime, endtime)
-        self._post_process(timeseries)
         if observatory is not None:
             timeseries = timeseries.select(station=observatory)
-        return timeseries.select(station=observatory)
+        for trace in timeseries:
+            stats = trace.stats
+            self.observatoryMetadata.set_metadata(stats, stats.station,
+                    stats.channel, 'variation', 'minute')
+        return timeseries
 
     def parse_string(self, imfV283String):
         """Parse the contents of a string in the format of an IMFV283 file.
@@ -104,9 +97,3 @@ class IMFV283Factory(TimeseriesFactory):
                 trace.data = ChannelConverter.get_radians_from_minutes(
                     trace.data)
         return stream
-
-    def _post_process(self, timeseries):
-        for trace in timeseries:
-            stats = trace.stats
-            self.observatoryMetadata.set_metadata(stats, stats.station,
-                    stats.channel, 'variation', 'minute')
diff --git a/geomagio/imfv283/StreamIMFV283Factory.py b/geomagio/imfv283/StreamIMFV283Factory.py
index 1e56fb94c67894584d139fc9282ae908fb4d38f7..57e24c955cef534bacf60f9b2faa5209859157a0 100644
--- a/geomagio/imfv283/StreamIMFV283Factory.py
+++ b/geomagio/imfv283/StreamIMFV283Factory.py
@@ -17,10 +17,8 @@ class StreamIMFV283Factory(IMFV283Factory):
     IMFV283Factory
     Timeseriesfactory
     """
-    def __init__(self, stream, observatory=None, channels=None,
-            type=None, interval=None):
-        IMFV283Factory.__init__(self, None, observatory, channels,
-            type, interval)
+    def __init__(self, stream, **kwargs):
+        IMFV283Factory.__init__(self, **kwargs)
         self._stream = stream
 
     def get_timeseries(self, starttime, endtime, observatory=None,