diff --git a/CHANGES.txt b/CHANGES.txt
index b40c3c4428125a2c97070ff4ca5cf8c573ba2ed6..c3347196324a062653cca676a7f83abceda23298 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -14,6 +14,11 @@ Config
 
 * Added shared namelist settings ([[namelist_a, namelist_b]])
 
+Templates
+---------
+
+* Allow use of iterators with 'list' and 'join' filters
+
 Release 1.2.0
 =============
 
diff --git a/mkexp b/mkexp
index 5ed63f441b0a46ebd7cc47cb805fca174a04f53a..84cdb0759d4ca5c09da517ce8a08dc5f27f31d04 100755
--- a/mkexp
+++ b/mkexp
@@ -7,6 +7,7 @@
 
 from __future__ import print_function
 
+from collections.abc import Iterator
 import io
 import os
 import re
@@ -358,7 +359,7 @@ def list_singleton(eval_ctx, x, keep_empty=False, *args, **kwargs):
     # Workaround for 2.8 bug when applied to literals
     if isinstance(x, jinja2.nodes.EvalContext):
         (eval_ctx, x) = (x, eval_ctx)
-    if isinstance(x, (list, tuple)):
+    if isinstance(x, (list, tuple, Iterator)):
         if getattr(list_original, 'evalcontextfilter', getattr(list_original, 'jinja_pass_arg', False)):
             return list_original(eval_ctx, x, *args, **kwargs)
         return list_original(x, *args, **kwargs)
@@ -374,7 +375,7 @@ def join_singleton(eval_ctx, x, *args, **kwargs):
     # Workaround for 2.8 bug when applied to literals
     if isinstance(x, jinja2.nodes.EvalContext):
         (eval_ctx, x) = (x, eval_ctx)
-    if isinstance(x, (list, tuple)):
+    if isinstance(x, (list, tuple, Iterator)):
         return join_original(eval_ctx, x, *args, **kwargs)
     return x
 template_env.filters['join'] = join_singleton
diff --git a/test.py b/test.py
index f490fc1a350d428599ada69cf63fc5629a4b6c22..0a1be0ad707753ef635d8ee458ad10292fdce0fe 100644
--- a/test.py
+++ b/test.py
@@ -1118,6 +1118,13 @@ class ListTestCase(MkexpSimpleTestCase):
              ['first', 'second', 'third']
         """)
 
+    def test_list_on_iterator(self):
+        self.run_test(u"""
+            %{('first', 'second', 'third')|reverse|list}
+        """, u"""
+             ['third', 'second', 'first']
+        """)
+
 class JoinTestCase(MkexpSimpleTestCase):
 
     def test_join_on_string(self):
@@ -1154,6 +1161,13 @@ class JoinTestCase(MkexpSimpleTestCase):
              first, second, third
         """)
 
+    def test_join_on_iterator(self):
+        self.run_test(u"""
+            %{('first', 'second', 'third')|reverse|join(', ')}
+        """, u"""
+             third, second, first
+        """)
+
 class IsSetTestCase(MkexpSimpleTestCase):
 
     def test_empty_string(self):