diff --git a/diceware/wordlist.py b/diceware/wordlist.py
index b3fa1749065b4de3eb9c93ed928fa62bf2c840f9..e2308bb250a30abc6b2bd060deb3b9125da09f95 100644
--- a/diceware/wordlist.py
+++ b/diceware/wordlist.py
@@ -154,3 +154,8 @@ class WordList(object):
         else:
             self.fd = path_or_filelike
         self.signed = is_signed_wordlist(self.fd)
+
+    def __iter__(self):
+        self.fd.seek(0)
+        for line in self.fd:
+            yield refine_wordlist_entry(line, signed=self.signed)
diff --git a/tests/test_wordlist.py b/tests/test_wordlist.py
index 678c7be4a5d29842db924f3e7d049570c66fd391..29ccb3a742bb61025a82cad1dce1e99694cf1488 100644
--- a/tests/test_wordlist.py
+++ b/tests/test_wordlist.py
@@ -232,3 +232,10 @@ class TestWordList(object):
             os.path.dirname(__file__), "sample_signed_wordlist.asc")
         w_list = WordList(in_path)
         assert w_list.signed is True
+
+    def test_wordlists_are_generators(self, tmpdir):
+        # WordList instances act like generators.
+        in_file = tmpdir.mkdir("work").join("mywordlist")
+        in_file.write("foo\nbar\n")
+        w_list = WordList(str(in_file))
+        assert list(w_list) == ["foo", "bar"]