diff --git a/lib/chamber/settings.rb b/lib/chamber/settings.rb
index <HASH>..<HASH> 100644
--- a/lib/chamber/settings.rb
+++ b/lib/chamber/settings.rb
@@ -107,8 +107,15 @@ class   Settings
     self.namespaces  == other.namespaces
   end
 
+  ###
+  # Internal: Returns the Settings data as a Hash for easy manipulation.
+  # Changes made to the hash will *not* be reflected in the original Settings
+  # object.
+  #
+  # Returns a Hash
+  #
   def to_hash
-    data
+    data.dup
   end
 
   def method_missing(name, *args)
diff --git a/spec/lib/chamber/settings_spec.rb b/spec/lib/chamber/settings_spec.rb
index <HASH>..<HASH> 100644
--- a/spec/lib/chamber/settings_spec.rb
+++ b/spec/lib/chamber/settings_spec.rb
@@ -140,5 +140,14 @@ describe  Settings do
 
     expect(settings.to_hash).to eql('my_encrypted_setting' => 'hello')
   end
+
+  it 'does not allow manipulation of the internal setting hash when converted to a Hash' do
+    settings = Settings.new(settings: {setting: 'value'})
+
+    settings_hash = settings.to_hash
+    settings_hash[:setting] = 'foo'
+
+    expect(settings.setting).to eql 'value'
+  end
 end
 end
Always duplicate the settings hash before returning it so that we don't have inadvertent modifications