diff --git a/CHANGES b/CHANGES
index b26f575813bc8f92505b1384b84cdae6347c36f5..5eee6daeb7ad059c56525d41ff05fef4fa71b15b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,7 @@ handling for the given expression.
 usage is like:  ${data | encoding('utf-8', errors='strict')}
 - removed textmate tmbundle from contrib and into separate SVN location; windows users
 cant handle those files, setuptools not very good at "pruning" certain directories
+- fix so that "cache_timeout" parameter is propigated
 
 0.1.0
 
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index a0bc70ac1008b53d82cc8ab77dfef83aa5d6993e..0496614a8ff86dcaeba53531e740530a2a41cbe6 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -344,15 +344,22 @@ class _GenerateRenderMethod(object):
         self.printer.writeline("__%s = %s" % (name, name))
         cachekey = node_or_pagetag.parsed_attributes.get('cache_key', repr(name))
         cacheargs = {}
-        for arg in (('cache_type', 'type'), ('cache_dir', 'data_dir')):
+        print node_or_pagetag
+        for arg in (('cache_type', 'type'), ('cache_dir', 'data_dir'), ('cache_timeout', 'timeout')):
             val = node_or_pagetag.parsed_attributes.get(arg[0], None)
             if val is not None:
-                cacheargs[arg[1]] = val
+                if arg[1] == 'timeout':
+                    cacheargs[arg[1]] = int(eval(val))
+                else:
+                    cacheargs[arg[1]] = val
             else:
                 if self.compiler.pagetag is not None:
                     val = self.compiler.pagetag.parsed_attributes.get(arg[0], None)
                     if val is not None:
-                        cacheargs[arg[1]] = val
+                        if arg[1] == 'timeout':
+                            cacheargs[arg[1]] == int(eval(val))
+                        else:
+                            cacheargs[arg[1]] = val
             
         self.printer.writeline("def %s(context, *args, **kwargs):" % name)
 
diff --git a/test/cache.py b/test/cache.py
index 345f6fe88d51c27c61dd21d001386ea3e874e88c..de5374383d7d7a30b35be3aecd5da0d1e8032067 100644
--- a/test/cache.py
+++ b/test/cache.py
@@ -144,6 +144,27 @@ class CacheTest(unittest.TestCase):
         ]
         assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'dbm'}
 
+    def test_args_complete(self):
+        t = Template("""
+        <%def name="foo()" cached="True" cache_timeout="30" cache_dir="./test_htdocs" cache_type="file" cache_key='somekey'>
+            this is foo
+        </%def>
+
+        ${foo()}
+""")
+        m = self._install_mock_cache(t)
+        t.render()
+        assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file', 'timeout':30}
+        
+        
+        t2 = Template("""
+        <%page cached="True" cache_timeout="30" cache_dir="./test_htdocs" cache_type="file" cache_key='somekey'/>
+        hi
+        """)
+        m = self._install_mock_cache(t2)
+        t2.render()
+        assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file', 'timeout':30}
+
     def test_fileargs_lookup(self):
         l = lookup.TemplateLookup(cache_dir='./test_htdocs', cache_type='file')
         l.put_string("test","""