diff --git a/librestash/cmd.py b/librestash/cmd.py
index 80e8a1532336053e95a82489a570537bce21e78e..8da4645d954fa0a493ab744f0a6c1d32d1715b93 100644
--- a/librestash/cmd.py
+++ b/librestash/cmd.py
@@ -5,9 +5,9 @@ import logging
 
 from .lib.adaptors.gpx import GpxImporter
 from .lib.exporters.caches import CacheExporter
-from .lib.exporters.formatters import caches_to_csv, caches_to_html, caches_to_json
+from .lib.exporters import formatters as exporters_formatters
 from .lib.stats import all_stats
-from .lib.stats.formatters import stats_to_html, stats_to_json
+from .lib.stats import formatters as stats_formatters
 from .lib.config import get_default_config_path, get_config
 from .lib.model import get_db
 
@@ -49,12 +49,11 @@ def export_caches():
     exporter = CacheExporter(config, database)
     data = exporter.export(found_by=args.found_by)
 
-    if args.format == 'json':
-        print(caches_to_json(data))
-    elif args.format == 'csv':
-        print(caches_to_csv(data))
-    elif args.format == 'html':
-        print(caches_to_html(data, title=args.title))
+    formatter = getattr(exporters_formatters, 'caches_to_%s' % args.format, None)
+    if formatter:
+        print(formatter(data, title=args.title))
+    else:
+        raise RuntimeError('Formatter %s not found.' % args.format)
 
 def stats():
     """ Command for all kinds of statistics """
@@ -71,7 +70,8 @@ def stats():
 
     data = all_stats(database, geocacher_name=args.geocacher)
 
-    if args.format == 'json':
-        print(stats_to_json(data))
-    elif args.format == 'html':
-        print(stats_to_html(data))
+    formatter = getattr(stats_formatters, 'stats_to_%s' % args.format, None)
+    if formatter:
+        print(formatter(data))
+    else:
+        raise RuntimeError('Formatter %s not found.' % args.format)
diff --git a/librestash/lib/exporters/formatters.py b/librestash/lib/exporters/formatters.py
index 88a74dbf5c3cc695d6a738a3eb9e8220c55cdf07..9aa991dcaf07d07585db2f9b85ce3cd5bdb2bed8 100644
--- a/librestash/lib/exporters/formatters.py
+++ b/librestash/lib/exporters/formatters.py
@@ -10,10 +10,10 @@ except ImportError:
 
 from ..util import flatten_dict, json_serialise
 
-def caches_to_json(data):
+def caches_to_json(data, **kwargs):
     return json.dumps(data, default=json_serialise)
 
-def caches_to_csv(data):
+def caches_to_csv(data, **kwargs):
     with io.StringIO() as csv_file:
         # Get top-level field names
         fieldnames = flatten_dict(data[0]).keys()
@@ -26,7 +26,7 @@ def caches_to_csv(data):
 
         return csv_file.getvalue()
 
-def caches_to_html(data, main_template='simple', title=None):
+def caches_to_html(data, main_template='simple', title=None, **kwargs):
     if not _HAVE_JINJA:
         return '<html><body>Jinja2 could not be imported.</body></html>'
 
diff --git a/librestash/lib/stats/formatters.py b/librestash/lib/stats/formatters.py
index b716eccf14b085cef25aff808a51031b2f6882ed..b4c0d756fbacd3078c224b11cc3926f0c18a78ef 100644
--- a/librestash/lib/stats/formatters.py
+++ b/librestash/lib/stats/formatters.py
@@ -1,4 +1,5 @@
 import json
+from pprint import pformat
 
 try:
     import jinja2
@@ -8,6 +9,9 @@ except ImportError:
 
 from ..util import json_serialise
 
+def stats_to_pprint(data):
+    return pformat(data)
+
 def stats_to_json(data):
     return json.dumps(data, default=json_serialise)