diff --git a/geomagio/Controller.py b/geomagio/Controller.py
index 6d522516ccc7d6836c63791e819e76cf6f2d44d6..be4eb2d72662fb44e536ffa3741217217a23e14b 100644
--- a/geomagio/Controller.py
+++ b/geomagio/Controller.py
@@ -5,6 +5,7 @@ import argparse
 import sys
 from obspy.core import Stream, UTCDateTime
 from algorithm import algorithms
+from PlotTimeseriesFactory import PlotTimeseriesFactory
 import TimeseriesUtility
 
 import edge
@@ -368,6 +369,8 @@ def main(args):
                 locationCode=locationcode,
                 tag=args.output_edge_tag,
                 forceout=args.output_edge_forceout)
+    elif args.output_plot is not None:
+        outputfactory = PlotTimeseriesFactory()
     else:
             print >> sys.stderr, "Missing required output directive"
 
@@ -558,6 +561,10 @@ def parse_args(args):
             help='Example: file://./%%(obs)s%%(Y)s%%(j)s.%%(i)s')
     output_group.add_argument('--output-edge',
             help='Edge IP #. See --output-edge-* for other optional arguments')
+    output_group.add_argument('--output-plot',
+            action='store_true',
+            default=False,
+            help='Plot the algorithm output using matplotlib')
 
     # Algorithms group
     parser.add_argument('--algorithm',
diff --git a/geomagio/PlotTimeseriesFactory.py b/geomagio/PlotTimeseriesFactory.py
new file mode 100644
index 0000000000000000000000000000000000000000..0406872397785879e1772c15bb4075b938429c85
--- /dev/null
+++ b/geomagio/PlotTimeseriesFactory.py
@@ -0,0 +1,54 @@
+"""Abstract Timeseries Factory Interface."""
+from obspy.core import Stream
+from TimeseriesFactory import TimeseriesFactory
+
+
+class PlotTimeseriesFactory(TimeseriesFactory):
+    """TimeseriesFactory that generates a plot.
+    """
+    def __init__(self, *args, **kwargs):
+        TimeseriesFactory.__init__(self, *args, **kwargs)
+
+    def get_timeseries(self, starttime, endtime, observatory=None,
+            channels=None, type=None, interval=None):
+        """This factory does not support get_timeseries.
+        """
+        raise NotImplementedError('"get_timeseries" not implemented')
+
+    def put_timeseries(self, timeseries, starttime=None, endtime=None,
+            channels=None, type=None, interval=None):
+        """Store timeseries data.
+
+        Parameters
+        ----------
+        timeseries : obspy.core.Stream
+            stream containing traces to store.
+        starttime : UTCDateTime
+            time of first sample in timeseries to store.
+            uses first sample if unspecified.
+        endtime : UTCDateTime
+            time of last sample in timeseries to store.
+            uses last sample if unspecified.
+        channels : array_like
+            list of channels to store, optional.
+            uses default if unspecified.
+        type : {'definitive', 'provisional', 'quasi-definitive', 'variation'}
+            data type, optional.
+            uses default if unspecified.
+        interval : {'daily', 'hourly', 'minute', 'monthly', 'second'}
+            data interval, optional.
+            uses default if unspecified.
+        Raises
+        ------
+        TimeseriesFactoryException
+            if any errors occur.
+        """
+        if starttime is not None or endtime is not None:
+            timeseries = timeseries.copy()
+            timeseries.trim(starttime=starttime, endtime=endtime)
+        if channels is not None:
+            filtered = Stream()
+            for channel in channels:
+                filtered += timeseries.select(channel=channel)
+            timeseries = filtered
+        timeseries.plot()
diff --git a/geomagio/__init__.py b/geomagio/__init__.py
index 9e086ee633914218db2d191bafdd1a54bc6f4b4a..b61b5c801417c54956145f352c55a4c4377f4683 100644
--- a/geomagio/__init__.py
+++ b/geomagio/__init__.py
@@ -6,6 +6,7 @@ import StreamConverter
 
 from Controller import Controller
 from ObservatoryMetadata import ObservatoryMetadata
+from PlotTimeseriesFactory import PlotTimeseriesFactory
 from TimeseriesFactory import TimeseriesFactory
 from TimeseriesFactoryException import TimeseriesFactoryException
 import TimeseriesUtility
@@ -16,6 +17,7 @@ __all__ = [
     'Controller',
     'DeltaFAlgorithm',
     'ObservatoryMetadata',
+    'PlotTimeseriesFactory',
     'StreamConverter',
     'TimeseriesFactory',
     'TimeseriesFactoryException',