Index: bottle-0.12.9/bottle.py
===================================================================
--- bottle-0.12.9.orig/bottle.py
+++ bottle-0.12.9/bottle.py
@@ -1721,8 +1721,10 @@ class JSONPlugin(object):
     name = 'json'
     api  = 2
 
-    def __init__(self, json_dumps=json_dumps):
+    def __init__(self, json_dumps=json_dumps, **kw):
         self.json_dumps = json_dumps
+        self.json_kw = { x:y for x,y in kw.iteritems() \
+                     if x in ['indent','sort_keys'] }
 
     def apply(self, callback, route):
         dumps = self.json_dumps
@@ -1735,12 +1737,12 @@ class JSONPlugin(object):
 
             if isinstance(rv, dict):
                 #Attempt to serialize, raises exception on failure
-                json_response = dumps(rv)
+                json_response = dumps(rv, **self.json_kw)
                 #Set content type only if serialization succesful
                 response.content_type = 'application/json'
                 return json_response
             elif isinstance(rv, HTTPResponse) and isinstance(rv.body, dict):
-                rv.body = dumps(rv.body)
+                rv.body = dumps(rv.body, **self.json_kw)
                 rv.content_type = 'application/json'
             return rv
 
