diff --git a/src/python/OBis/obis/dm/config.py b/src/python/OBis/obis/dm/config.py
index 8912000b7caf637ecadd3846b69e7a7c9cbf5030..8ae82b284d35711eced67d68e8ff6fae85d18058 100644
--- a/src/python/OBis/obis/dm/config.py
+++ b/src/python/OBis/obis/dm/config.py
@@ -309,14 +309,13 @@ class ConfigResolver(object):
 
 class SettingsResolver(object):
     """ This class functions as a wrapper since we have multiple config resolvers. """
-
+    # TODO make sure all methods work with this and individual resolvers
     def __init__(self, location_resolver=None):
         self.repository_resolver = ConfigResolver(location_resolver=location_resolver, env=RepositoryEnv(), config_file='repository.json')
         self.data_set_resolver = ConfigResolver(location_resolver=location_resolver, env=DataSetEnv(), config_file='data_set.json')
         self.object_resolver = ConfigResolver(location_resolver=location_resolver, env=ObjectEnv(), config_file='object.json')
         self.collection_resolver = ConfigResolver(location_resolver=location_resolver, env=CollectionEnv(), config_file='collection.json')
         self.config_resolver = ConfigResolver(location_resolver=location_resolver, env=ConfigEnv())
-        # TODO remove self.resolvers and all methods
         self.resolvers = []
         self.resolvers.append(self.repository_resolver)
         self.resolvers.append(self.data_set_resolver)
diff --git a/src/python/OBis/obis/scripts/cli.py b/src/python/OBis/obis/scripts/cli.py
index 2762c9fa08e267ab71117a6b9a158a286706372b..d60aa66f2475585e8cf7b527852ec0606c075c0c 100644
--- a/src/python/OBis/obis/scripts/cli.py
+++ b/src/python/OBis/obis/scripts/cli.py
@@ -161,6 +161,7 @@ class SettingsSet(click.ParamType):
 
     def convert(self, value, param, ctx):
         try:
+            value = self._encode_json(value)
             settings = {}
             split = list(filter(lambda term: len(term) > 0, value.split(',')))
             for setting in split:
@@ -169,11 +170,30 @@ class SettingsSet(click.ParamType):
                     self._fail(param)
                 key = setting_split[0]
                 value = setting_split[1]
-                settings[key] = value
+                settings[key] = self._decode_json(value)
             return settings
         except:
             self._fail(param)
 
+    def _encode_json(self, value):
+        encoded = ''
+        SEEK = 0
+        ENCODE = 1
+        mode = SEEK
+        for char in value:
+            if char == '{':
+                mode = ENCODE
+            elif char == '}':
+                mode = SEEK
+            if mode == SEEK:
+                encoded += char
+            elif mode == ENCODE:
+                encoded += char.replace(',', '|')
+        return encoded
+
+    def _decode_json(self, value):
+        return value.replace('|', ',')
+
     def _fail(self, param):
             self.fail(param=param, message='Settings must be in the format: key1=value1, key2=value2, ...')
 
@@ -251,14 +271,20 @@ def _get(ctx, settings):
 @click.pass_context
 def settings(ctx, is_global):
     ctx.obj['is_global'] = is_global
-    ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj)
-    ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver
 
 
 @settings.command('get')
 @click.pass_context
 def settings_get(ctx):
-    _get(ctx, [])
+    data_mgmt = shared_data_mgmt(ctx.obj)
+    settings = {}
+    for resolver in data_mgmt.settings_resolver.resolvers:
+        if ctx.obj['is_global']:
+            resolver.set_location_search_order(['global'])
+        key = resolver.config_file.split('.')[0]
+        settings[key] = resolver.config_dict()
+    settings_str = json.dumps(settings, indent=4, sort_keys=True)
+    click.echo("{}".format(settings_str))
 
 
 ## repository: repository_id, external_dms_id, data_set_id