diff --git a/configmanager/managers.py b/configmanager/managers.py
index 1b03f33..9679217 100644
--- a/configmanager/managers.py
+++ b/configmanager/managers.py
@@ -46,8 +46,10 @@ class Config(BaseSection):
     cm__configparser_factory = configparser.ConfigParser
 
     def __new__(cls, config_declaration=None, item_cls=None, configparser_factory=None):
-        instance = super(Config, cls).__new__(cls)
+        if config_declaration and isinstance(config_declaration, cls):
+            return copy.deepcopy(config_declaration)
 
+        instance = super(Config, cls).__new__(cls)
         instance._cm__section = None
         instance._cm__section_alias = None
         instance._cm__configs = collections.OrderedDict()

diff --git a/tests/test_config.py b/tests/test_config.py
index a51c096..29f62e3 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -460,3 +460,21 @@ def test_config_item_value_can_be_unicode_str(tmpdir):
     config2.configparser.load(path)
     assert config2.name.value == u'Jānis Bērziņš'
     assert config1.to_dict(with_defaults=True) == config2.to_dict(with_defaults=True)
+
+
+def test_config_of_config_is_a_deep_copy_of_original_config():
+    config1 = Config({'uploads': {'enabled': True, 'db': {'user': 'root'}}})
+    config1.uploads.enabled.value = False
+
+    config2 = Config(config1)
+    assert config1 is not config2
+    assert config1.to_dict() == config2.to_dict()
+    assert config1.to_dict(with_defaults=True) == config2.to_dict(with_defaults=True)
+
+    config1.uploads.enabled.value = True
+    config1.uploads.db.read_dict({'user': 'admin'})
+
+    assert config2.to_dict(with_defaults=True) == {'uploads': {'enabled': False, 'db': {'user': 'root'}}}
+
+    config2.uploads.db.user.default = 'default-user'
+    assert config1.uploads.db.user.default == 'root'

Allow deep-copying of Config with config2 = Config(config1)
tests/test_config.py::test_config_of_config_is_a_deep_copy_of_original_config
tests/test_config.py::test_items_are_created_using_cm_create_item_method tests/test_config.py::test_reset_resets_values_to_defaults tests/test_config.py::test_repr_of_config tests/test_config.py::test_assigning_nameless_item_directly_to_config_should_set_its_name tests/test_config.py::test_assigning_item_with_name_directly_to_config_should_preserve_its_name tests/test_config.py::test_item_name_and_alias_must_be_a_string tests/test_config.py::test_section_name_must_be_a_string tests/test_config.py::test_to_dict_should_not_include_items_with_no_usable_value tests/test_config.py::test_read_dict_recursively_loads_values_from_a_dictionary tests/test_config.py::test_read_dict_as_defaults_loads_default_values_from_a_dictionary tests/test_config.py::test_declaration_parser_does_not_modify_config tests/test_config.py::test_allows_iteration_over_all_items tests/test_config.py::test_forbids_accidental_item_overwrite_via_setitem tests/test_config.py::test_allows_iteration_over_sections tests/test_config.py::test_attribute_read_access tests/test_config.py::test_attribute_write_access tests/test_config.py::test_forbids_accidental_item_overwrite_via_setattr tests/test_config.py::test_to_dict tests/test_config.py::test_can_inspect_config_contents tests/test_config.py::test_can_have_a_dict_as_a_config_value_if_wrapped_inside_item tests/test_config.py::test_len_of_config_returns_number_of_items_in_it tests/test_config.py::test__getitem__handles_paths_to_sections_and_items_and_so_does__contains__ tests/test_config.py::test_can_use__setitem__to_create_new_deep_paths tests/test_config.py::test_section_knows_its_alias tests/test_config.py::test_config_item_value_can_be_unicode_str