diff --git a/src/python/OBis/integration_tests/integration_tests.py b/src/python/OBis/integration_tests/integration_tests.py
index 8ac9012a8cfd56a60c31193f1e305ae3c724ecf2..4d9aaa390d78af71ff18c6626284ae2ccf52c70e 100644
--- a/src/python/OBis/integration_tests/integration_tests.py
+++ b/src/python/OBis/integration_tests/integration_tests.py
@@ -79,7 +79,7 @@ def test_obis(tmpdir):
             assert "Created data set {}.".format(settings['repository']['data_set_id']) in result
             result = cmd('git annex info big_file')
             assert 'file: big_file' in result
-            assert 'key: MD5-s1000000--879f4bba57ed37c9ec5e5aedf9864698' in result
+            assert 'key: SHA256E-s1000000--d29751f2649b32ff572b5e0a9f541ea660a50f94ff0beedfb0b692b924cc8025' in result
             assert 'present: true' in result
             data_set = o.get_dataset(settings['repository']['data_set_id']).data
             assert_matching(settings, data_set, tmpdir, 'obis_data/data1')
@@ -273,15 +273,15 @@ def test_obis(tmpdir):
         with cd('data10'):
             cmd('touch file')
             cmd('obis object set id=/DEFAULT/DEFAULT')
-            # use MD5 form git annex by default
+            # use SHA256 form git annex by default
             result = cmd('obis commit -m \'commit-message\'')
             settings = get_settings()
             search_result = o.search_files(settings['repository']['data_set_id'])
             files = list(filter(lambda file: file['fileLength'] > 0, search_result['objects']))
             assert len(files) == 5
             for file in files:
-                assert file['checksumType'] == "MD5"
-                assert len(file['checksum']) == 32
+                assert file['checksumType'] == "SHA256"
+                assert len(file['checksum']) == 64
             # don't use git annex hash - use default CRC32
             cmd('obis config set git_annex_hash_as_checksum=false')
             result = cmd('obis commit -m \'commit-message\'')
@@ -294,6 +294,17 @@ def test_obis(tmpdir):
                 assert file['checksum'] is None
                 assert file['checksumCRC32'] != 0
 
+        output_buffer = '=================== 19. Clearing settings ===================\n'
+        cmd('obis init data11')
+        with cd('data11'):
+            assert get_settings()['repository'] == {'id': None, 'external_dms_id': None, 'data_set_id': None}
+            cmd('obis repository set id=0, external_dms_id=1, data_set_id=2')
+            assert get_settings()['repository'] == {'id': '0', 'external_dms_id': '1', 'data_set_id': '2'}
+            cmd('obis repository clear external_dms_id, data_set_id')
+            assert get_settings()['repository'] == {'id': '0', 'external_dms_id': None, 'data_set_id': None}
+            cmd('obis repository clear')
+            assert get_settings()['repository'] == {'id': None, 'external_dms_id': None, 'data_set_id': None}
+
         output_buffer = '=================== 16. User switch ===================\n'
         cmd('obis init data9')
         with cd('data9'):
diff --git a/src/python/OBis/obis/scripts/cli.py b/src/python/OBis/obis/scripts/cli.py
index 59c04bb9fc4ae342418f94f9cf9f040e15397f15..f851972656015d7650c86ced48f547f8f98d87f4 100644
--- a/src/python/OBis/obis/scripts/cli.py
+++ b/src/python/OBis/obis/scripts/cli.py
@@ -143,6 +143,10 @@ class SettingsGet(click.ParamType):
             self.fail(param=param, message='Settings must be in the format: key1, key2, ...')
 
 
+class SettingsClear(SettingsGet):
+    pass
+
+
 class SettingsSet(click.ParamType):
     name = 'settings_set'
 
@@ -200,7 +204,22 @@ def _join_settings_get(setting_lists):
     return joined
 
 
-def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, value):
+def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop=None, value=None, set=False, get=False, clear=False):
+    if set == True:
+        assert get == False
+        assert clear == False
+        assert prop is not None
+        assert value is not None
+    elif get == True:
+        assert set == False
+        assert clear == False
+        assert value is None
+    elif clear == True:
+        assert get == False
+        assert set == False
+        assert value is None
+
+    assert set == True or get == True or clear == True
     if is_global:
         resolver.set_location_search_order(['global'])
     else:
@@ -214,44 +233,60 @@ def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop,
     config_dict = resolver.config_dict()
     if is_data_set_property:
         config_dict = config_dict['properties']
-    if not prop:
-        config_str = json.dumps(config_dict, indent=4, sort_keys=True)
-        click.echo("{}".format(config_str))
-    elif not value:
-        if not prop in config_dict:
-            raise ValueError("Unknown setting {} for {}.".format(prop, resolver.categoty))
-        little_dict = {prop: config_dict[prop]}
-        config_str = json.dumps(little_dict, indent=4, sort_keys=True)
-        click.echo("{}".format(config_str))
-    else:
+    if get == True:
+        if prop is None:
+            config_str = json.dumps(config_dict, indent=4, sort_keys=True)
+            click.echo("{}".format(config_str))
+        else:
+            if not prop in config_dict:
+                raise ValueError("Unknown setting {} for {}.".format(prop, resolver.categoty))
+            little_dict = {prop: config_dict[prop]}
+            config_str = json.dumps(little_dict, indent=4, sort_keys=True)
+            click.echo("{}".format(config_str))            
+    elif set == True:
         return check_result("config", set_property(data_mgmt, resolver, prop, value, is_global, is_data_set_property))
+    elif clear == True:
+        if prop is None:
+            returncode = 0
+            for prop in config_dict.keys():
+                returncode += check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property))
+            return returncode
+        else:
+            return check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property))
 
 
-def _set(ctx, settings):
+def _access_settings(ctx, prop=None, value=None, set=False, get=False, clear=False):
     is_global = ctx.obj['is_global']
     data_mgmt = ctx.obj['data_mgmt']
     resolver = ctx.obj['resolver']
     is_data_set_property = False
     if 'is_data_set_property' in ctx.obj:
         is_data_set_property = ctx.obj['is_data_set_property']
+    config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop=prop, value=value, set=set, get=get, clear=clear)
+
+
+def _set(ctx, settings):
     settings_dict = _join_settings_set(settings)
     for prop, value in settings_dict.items():
-        config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, value)
+        _access_settings(ctx, prop=prop, value=value, set=True)
     return CommandResult(returncode=0, output='')
 
 
 def _get(ctx, settings):
-    is_global = ctx.obj['is_global']
-    data_mgmt = ctx.obj['data_mgmt']
-    resolver = ctx.obj['resolver']
-    is_data_set_property = False
-    if 'is_data_set_property' in ctx.obj:
-        is_data_set_property = ctx.obj['is_data_set_property']
     settings_list = _join_settings_get(settings)
     if len(settings_list) == 0:
         settings_list = [None]
     for prop in settings_list:
-        config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, None)
+        _access_settings(ctx, prop=prop, get=True)
+    return CommandResult(returncode=0, output='')
+
+
+def _clear(ctx, settings):
+    settings_list = _join_settings_get(settings)
+    if len(settings_list) == 0:
+        settings_list = [None]
+    for prop in settings_list:
+        _access_settings(ctx, prop=prop, clear=True)
     return CommandResult(returncode=0, output='')
 
 
@@ -302,6 +337,13 @@ def repository_get(ctx, settings):
     return check_result("repository_get", run(lambda: _get(ctx, settings)))
 
 
+@repository.command('clear')
+@click.argument('settings', type=SettingsClear(), nargs=-1)
+@click.pass_context
+def repository_clear(ctx, settings):
+    return check_result("repository_clear", run(lambda: _clear(ctx, settings)))
+
+
 ## data_set: type, properties
 
 
@@ -332,6 +374,13 @@ def data_set_get(ctx, settings):
     return check_result("data_set_get", run(lambda: _get(ctx, settings)))
 
 
+@data_set.command('clear')
+@click.argument('settings', type=SettingsClear(), nargs=-1)
+@click.pass_context
+def data_set_clear(ctx, settings):
+    return check_result("data_set_clear", run(lambda: _clear(ctx, settings)))
+
+
 ## object: object_id
 
 
@@ -360,6 +409,13 @@ def object_get(ctx, settings):
     return check_result("object_get", run(lambda: _get(ctx, settings)))
 
 
+@object.command('clear')
+@click.argument('settings', type=SettingsClear(), nargs=-1)
+@click.pass_context
+def object_clear(ctx, settings):
+    return check_result("object_clear", run(lambda: _clear(ctx, settings)))
+
+
 ## collection: collection_id
 
 
@@ -388,6 +444,13 @@ def collection_get(ctx, settings):
     return check_result("collection_get", run(lambda: _get(ctx, settings)))
 
 
+@collection.command('clear')
+@click.argument('settings', type=SettingsClear(), nargs=-1)
+@click.pass_context
+def collection_clear(ctx, settings):
+    return check_result("collection_clear", run(lambda: _clear(ctx, settings)))
+
+
 ## config: fileservice_url, git_annex_hash_as_checksum, hostname, openbis_url, user, verify_certificates
 
 
@@ -416,6 +479,13 @@ def config_get(ctx, settings):
     return check_result("config_get", run(lambda: _get(ctx, settings)))
 
 
+@config.command('clear')
+@click.argument('settings', type=SettingsClear(), nargs=-1)
+@click.pass_context
+def config_clear(ctx, settings):
+    return check_result("config_clear", run(lambda: _clear(ctx, settings)))
+
+
 # repository commands: status, sync, commit, init, addref, removeref, init_analysis
 
 ## commit