diff --git a/pyzenkit/baseapp.py b/pyzenkit/baseapp.py
index 9f54c4f7ca09a9a51e6c317964f215aefdcad2cf..b3d0d4241c2b8321cf8f29cfe308b52048a81f09 100644
--- a/pyzenkit/baseapp.py
+++ b/pyzenkit/baseapp.py
@@ -1287,17 +1287,14 @@ class BaseApp:
         """
         Dump given data structure into JSON string.
         """
-        return json.dumps(data, sort_keys=True, indent=4, **kwargs)
+        return pyzenkit.jsonconf.json_dump(data, **kwargs)
 
     @staticmethod
     def json_save(json_file, data, **kwargs):
         """
         Save given data structure into given JSON file.
         """
-        mf = open(json_file, 'w')
-        json.dump(data, mf, sort_keys = True, **kwargs)
-        mf.close()
-        return True
+        return pyzenkit.jsonconf.json_save(json_file, data, **kwargs)
 
     @staticmethod
     def json_load(json_file, **kwargs):
diff --git a/pyzenkit/jsonconf.py b/pyzenkit/jsonconf.py
index 302d0687860046ec55ede59f777f4149d136883b..d138a4b623a3de523fe474b5d03c28b61f2bb471 100644
--- a/pyzenkit/jsonconf.py
+++ b/pyzenkit/jsonconf.py
@@ -49,6 +49,18 @@ def json_default(o):
 
 #-------------------------------------------------------------------------------
 
+def json_dump(data, **kwargs):
+    """
+    Dump given data structure into JSON string.
+    """
+    if not 'sort_keys' in kwargs:
+        kwargs['sort_keys'] = True
+    if not 'indent' in kwargs:
+        kwargs['indent'] = 4
+    if not 'default' in kwargs:
+        kwargs['default'] = _json_default
+    return json.dumps(data, **kwargs)
+
 def json_save(json_file, data, **kwargs):
     """
     Save data structure into given JSON configuration file.
@@ -61,6 +73,7 @@ def json_save(json_file, data, **kwargs):
         kwargs['default'] = json_default
     with open(json_file, "w") as f:
         json.dump(data, f, **kwargs)
+    return True
 
 def json_load(json_file):
     """
diff --git a/pyzenkit/zendaemon.py b/pyzenkit/zendaemon.py
index 4b9cc8cd8a4f26c5dcc47d1ae6013fddb41f0498..b31c70fb828b9b6f966cdba3b2bc931c6cec151f 100644
--- a/pyzenkit/zendaemon.py
+++ b/pyzenkit/zendaemon.py
@@ -44,7 +44,7 @@ def _json_default(o):
     elif callable(o):
         return "CALLBACK({}:{})".format(o.__self__.__class__.__name__, o.__name__)
     else:
-        raise TypeError(o)
+        return repr(o)
 
 class QueueEmptyException(Exception):
     """
@@ -474,7 +474,7 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
         if self.c(self.CONFIG_NODAEMON):
             self.state_dump(self._get_state())
         else:
-            self.state_save(self._get_state(), indent=4, default=_json_default)
+            self.state_save(self._get_state())
         return (self.FLAG_CONTINUE, None)
 
     def cbk_event_log_statistics(self, daemon, args):
@@ -585,7 +585,7 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
             statistics['components'][component.__class__.__name__] = component.get_statistics(self)
         return statistics
 
-    def state_dump(self, state, **kwargs):
+    def state_dump(self, state):
         """
         Dump current daemon state.
 
@@ -593,9 +593,9 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
         """
         # Dump current script state.
         #self.logger.debug("Current daemon state >>>\n{}".format(json.dumps(state, sort_keys=True, indent=4)))
-        print("Current daemon state >>>\n{}".format(self.json_dump(state, default=_json_default, **kwargs)))
+        print("Current daemon state >>>\n{}".format(self.json_dump(state, default=_json_default)))
 
-    def state_save(self, state, **kwargs):
+    def state_save(self, state):
         """
         Save current daemon state.
 
@@ -604,8 +604,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
         sfn = self.get_fn_state()
         self.dbgout("[STATUS] Saving current daemon state to file '{}'".format(sfn))
         pprint.pprint(state)
-        self.dbgout("[STATUS] Current daemon state:\n{}".format(self.json_dump(state, default=_json_default, **kwargs)))
-        self.json_save(sfn, state, default=_json_default, **kwargs)
+        self.dbgout("[STATUS] Current daemon state:\n{}".format(self.json_dump(state, default=_json_default)))
+        self.json_save(sfn, state, default=_json_default)
         self.logger.info("Current daemon state saved to file '{}'".format(sfn))
 
     def pidfiles_list(self, **kwargs):
diff --git a/setup.py b/setup.py
index 0a4a8e368bf17649d3b956295c77bd52f27b268e..33d82ce223c4d4c74f7b4372fd1746ae2f9720d2 100644
--- a/setup.py
+++ b/setup.py
@@ -23,7 +23,7 @@ with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
 
 setup(
     name = 'pyzenkit',
-    version = '0.16',
+    version = '0.20',
     description = 'Python 3 script and daemon toolkit',
     long_description = long_description,
     classifiers = [