<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -80,25 +80,7 @@ Of course you can update a single parameter n levels deep as well:
   configatron.email.pop.address # =&gt; &quot;pop2.example.com&quot;
   configatron.email.smtp.address # =&gt; &quot;smtp.example.com&quot;
 
-===Misc.
-
-Even if parameters haven't been set, you can still call them, but you'll get a &lt;tt&gt;Configatron::Store&lt;/tt&gt; object back. The Configatron::Store class, however, will respond true to &lt;tt&gt;.nil?&lt;/tt&gt; if there are no parameters configured on it.
-
-  configatron.i.dont.exist.nil? # =&gt; true
-  configatron.i.dont.exist # =&gt; Configatron::Store
-
-If you want to get back an actual &lt;tt&gt;nil&lt;/tt&gt; then you can use the &lt;tt&gt;retrieve&lt;/tt&gt; method:
-
-  configatron.i.do.exist = [:some, :array]
-  configatron.i.dont.retrieve(:exist, nil) # =&gt; nil
-  configatron.i.do.retrieve(:exist, :foo) # =&gt; [:some, :array]
-
-You can set 'default' values for parameters. If there is already a setting, it won't be replaced. This is useful if you've already done your 'configuration' and you call a library, that needs to have parameters set. The library can set its defaults, without worrying that it might have overridden your custom settings.
-
-  configatron.set_default(:name, 'Mark Bates')
-  configatron.name # =&gt; 'Mark Bates'
-  configatron.set_default(:name, 'Me')
-  configatron.name # =&gt; 'Mark Bates'
+===Temp Configurations
 
 Sometimes in testing, or other situations, you want to temporarily change some settings. You can do this with the &lt;tt&gt;temp&lt;/tt&gt; method:
 
@@ -134,6 +116,70 @@ You can also pass in an optional Hash to the &lt;tt&gt;temp&lt;/tt&gt;:
   configatron.letters.b # =&gt; 'B'
   configatron.letters.c # =&gt; nil
 
+===Delayed and Dynamic Configurations
+
+There are times when you want to refer to one configuration setting in another configuration setting. Let's look at a fairly contrived example:
+
+  configatron.memcached.servers = ['127.0.0.1:11211']
+  configatron.page_caching.servers = configatron.memcached.servers
+  configatron.object_caching.servers = configatron.memcached.servers
+
+  if RAILS_ENV == 'production'
+    configatron.memcached.servers = ['192.168.0.1:11211']
+    configatron.page_caching.servers = configatron.memcached.servers
+    configatron.object_caching.servers = configatron.memcached.servers
+  elsif RAILS_ENV == 'staging'
+    configatron.memcached.servers = ['192.168.0.2:11211']
+    configatron.page_caching.servers = configatron.memcached.servers
+    configatron.object_caching.servers = configatron.memcached.servers
+  end
+
+Now, we could've written that slightly differently, but it helps to illustrate the point. With Configatron you can create &lt;code&gt;Delayed&lt;/code&gt; and &lt;code&gt;Dynamic&lt;/code&gt; settings. 
+
+====Delayed
+
+With &lt;code&gt;Delayed&lt;/code&gt; settings execution of the setting doesn't happen until the first time it is executed. 
+
+  configatron.memcached.servers = ['127.0.0.1:11211']
+  configatron.page_caching.servers = Configatron::Delayed.new {configatron.memcached.servers}
+  configatron.object_caching.servers = Configatron::Delayed.new {configatron.memcached.servers}
+
+  if RAILS_ENV == 'production'
+    configatron.memcached.servers = ['192.168.0.1:11211']
+  elsif RAILS_ENV == 'staging'
+    configatron.memcached.servers = ['192.168.0.2:11211']
+  end
+
+Execution occurs once and after that the result of that execution is returned. So in our case the first time someone calls the setting &lt;code&gt;configatron.page_caching.servers&lt;/code&gt; it will find the &lt;code&gt;configatron.memcached.servers&lt;/code&gt; setting and return that. After that point if the &lt;code&gt;configatron.memcached.servers&lt;/code&gt; setting is changed, the original settings are returned by &lt;code&gt;configatron.page_caching.servers&lt;/code&gt;.
+
+====Dynamic
+
+&lt;code&gt;Dynamic&lt;/code&gt; settings are very similar to &lt;code&gt;Delayed&lt;/code&gt; settings, but with one big difference. Every time you call a &lt;code&gt;Dynamic&lt;/code&gt; setting is executed. Take this example:
+
+  configatron.current.time = Configatron::Dynamic.new {Time.now}
+
+Each time you call &lt;code&gt;configatron.current.time&lt;/code&gt; it will return a new value to you. While this seems a bit useless, it is pretty useful if you have ever changing configurations.
+
+===Misc.
+
+Even if parameters haven't been set, you can still call them, but you'll get a &lt;tt&gt;Configatron::Store&lt;/tt&gt; object back. The Configatron::Store class, however, will respond true to &lt;tt&gt;.nil?&lt;/tt&gt; if there are no parameters configured on it.
+
+  configatron.i.dont.exist.nil? # =&gt; true
+  configatron.i.dont.exist # =&gt; Configatron::Store
+
+If you want to get back an actual &lt;tt&gt;nil&lt;/tt&gt; then you can use the &lt;tt&gt;retrieve&lt;/tt&gt; method:
+
+  configatron.i.do.exist = [:some, :array]
+  configatron.i.dont.retrieve(:exist, nil) # =&gt; nil
+  configatron.i.do.retrieve(:exist, :foo) # =&gt; [:some, :array]
+
+You can set 'default' values for parameters. If there is already a setting, it won't be replaced. This is useful if you've already done your 'configuration' and you call a library, that needs to have parameters set. The library can set its defaults, without worrying that it might have overridden your custom settings.
+
+  configatron.set_default(:name, 'Mark Bates')
+  configatron.name # =&gt; 'Mark Bates'
+  configatron.set_default(:name, 'Me')
+  configatron.name # =&gt; 'Mark Bates'
+
 Enjoy!
 
 ==Contact</diff>
      <filename>README</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ require 'gemstub'
 Gemstub.test_framework = :rspec
 
 Gemstub.gem_spec do |s|
-  s.version = &quot;2.4.2&quot;
+  s.version = &quot;2.5.0&quot;
   s.summary = &quot;A powerful Ruby configuration system.&quot;
   s.rubyforge_project = &quot;magrathea&quot;
   s.add_dependency('yamler', '&gt;=0.1.0')</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -2,11 +2,11 @@
 
 Gem::Specification.new do |s|
   s.name = %q{configatron}
-  s.version = &quot;2.4.2.20090909154619&quot;
+  s.version = &quot;2.5.0.20090910111951&quot;
 
   s.required_rubygems_version = Gem::Requirement.new(&quot;&gt;= 0&quot;) if s.respond_to? :required_rubygems_version=
   s.authors = [&quot;markbates&quot;]
-  s.date = %q{2009-09-09}
+  s.date = %q{2009-09-10}
   s.description = %q{configatron was developed by: markbates}
   s.email = %q{mark@markbates.com}
   s.extra_rdoc_files = [&quot;README&quot;, &quot;LICENSE&quot;]</diff>
      <filename>configatron.gemspec</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8a5f61d85f163147d2de70e6a67c857994b37491</id>
    </parent>
  </parents>
  <author>
    <name>Mark Bates</name>
    <email>mark@markbates.com</email>
  </author>
  <url>http://github.com/markbates/configatron/commit/d8475cd8f3dceb654fbbb7c826b3bb4b655b9001</url>
  <id>d8475cd8f3dceb654fbbb7c826b3bb4b655b9001</id>
  <committed-date>2009-09-10T08:19:54-07:00</committed-date>
  <authored-date>2009-09-10T08:19:54-07:00</authored-date>
  <message>Version 2.5.0.</message>
  <tree>063bb63924a4c36b6fb0ae00b2ed06f400ae2ee3</tree>
  <committer>
    <name>Mark Bates</name>
    <email>mark@markbates.com</email>
  </committer>
</commit>
