diff --git a/lib/yaml/__init__.py b/lib/yaml/__init__.py
index 9ec8610..c8546de 100644
--- a/lib/yaml/__init__.py
+++ b/lib/yaml/__init__.py
@@ -48,7 +48,7 @@
     finally:
         loader.dispose()
 
-def compose(stream, Loader=Loader):
+def compose(stream, Loader=Loader, reuse_anchors=False):
     """
     Parse the first YAML document in a stream
     and produce the corresponding representation tree.
diff --git a/lib/yaml/cyaml.py b/lib/yaml/cyaml.py
index 0c21345..fd28a1c 100644
--- a/lib/yaml/cyaml.py
+++ b/lib/yaml/cyaml.py
@@ -15,36 +15,36 @@
 
 class CBaseLoader(CParser, BaseConstructor, BaseResolver):
 
-    def __init__(self, stream):
-        CParser.__init__(self, stream)
+    def __init__(self, stream, reuse_anchors=False):
+        CParser.__init__(self, stream, reuse_anchors=reuse_anchors)
         BaseConstructor.__init__(self)
         BaseResolver.__init__(self)
 
 class CSafeLoader(CParser, SafeConstructor, Resolver):
 
-    def __init__(self, stream):
-        CParser.__init__(self, stream)
+    def __init__(self, stream, reuse_anchors=False):
+        CParser.__init__(self, stream, reuse_anchors=reuse_anchors)
         SafeConstructor.__init__(self)
         Resolver.__init__(self)
 
 class CFullLoader(CParser, FullConstructor, Resolver):
 
-    def __init__(self, stream):
-        CParser.__init__(self, stream)
+    def __init__(self, stream, reuse_anchors=False):
+        CParser.__init__(self, stream, reuse_anchors=reuse_anchors)
         FullConstructor.__init__(self)
         Resolver.__init__(self)
 
 class CUnsafeLoader(CParser, UnsafeConstructor, Resolver):
 
-    def __init__(self, stream):
-        CParser.__init__(self, stream)
+    def __init__(self, stream, reuse_anchors=False):
+        CParser.__init__(self, stream, reuse_anchors=reuse_anchors)
         UnsafeConstructor.__init__(self)
         Resolver.__init__(self)
 
 class CLoader(CParser, Constructor, Resolver):
 
-    def __init__(self, stream):
-        CParser.__init__(self, stream)
+    def __init__(self, stream, reuse_anchors=False):
+        CParser.__init__(self, stream, reuse_anchors=reuse_anchors)
         Constructor.__init__(self)
         Resolver.__init__(self)
 
diff --git a/tests/data/duplicate-anchor-1.loader-error b/tests/data/duplicate-anchor-1.loader-error
new file mode 100644
index 0000000..906cf29
--- /dev/null
+++ b/tests/data/duplicate-anchor-1.loader-error
@@ -0,0 +1,3 @@
+- &foo bar
+- &bar bar
+- &foo bar
diff --git a/tests/data/override-anchor-1.code b/tests/data/override-anchor-1.reuse-anchors-code
similarity index 100%
rename from tests/data/override-anchor-1.code
rename to tests/data/override-anchor-1.reuse-anchors-code
diff --git a/tests/data/override-anchor-1.data b/tests/data/override-anchor-1.reuse-anchors-data
similarity index 100%
rename from tests/data/override-anchor-1.data
rename to tests/data/override-anchor-1.reuse-anchors-data
diff --git a/tests/data/override-anchor-2.code b/tests/data/override-anchor-2.reuse-anchors-code
similarity index 100%
rename from tests/data/override-anchor-2.code
rename to tests/data/override-anchor-2.reuse-anchors-code
diff --git a/tests/data/override-anchor-2.data b/tests/data/override-anchor-2.reuse-anchors-data
similarity index 100%
rename from tests/data/override-anchor-2.data
rename to tests/data/override-anchor-2.reuse-anchors-data
diff --git a/tests/lib/test_constructor.py b/tests/lib/test_constructor.py
index f7d1995..968db71 100644
--- a/tests/lib/test_constructor.py
+++ b/tests/lib/test_constructor.py
@@ -258,7 +258,7 @@
     native2 = None
     try:
         with open(data_filename, 'rb') as file:
-            native1 = list(yaml.load_all(file, Loader=MyLoader, reuse_anchors=True))
+            native1 = list(yaml.load_all(file, Loader=MyLoader))
         if len(native1) == 1:
             native1 = native1[0]
         with open(code_filename, 'rb') as file:
@@ -296,6 +296,34 @@
 
 test_subclass_blacklist_types.unittest = ['.subclass_blacklist']
 
+def test_reuse_anchors(data_filename, code_filename, verbose=False):
+    try:
+        with open(data_filename, 'rb') as file:
+            native1 = list(yaml.load_all(file, Loader=yaml.SafeLoader, reuse_anchors=True))
+        if len(native1) == 1:
+            native1 = native1[0]
+        with open(code_filename, 'rb') as file:
+            native2 = _load_code(file.read())
+        try:
+            if native1 == native2:
+                return
+        except TypeError:
+            pass
+        if verbose:
+            print("SERIALIZED NATIVE1:")
+            print(_serialize_value(native1))
+            print("SERIALIZED NATIVE2:")
+            print(_serialize_value(native2))
+        assert _serialize_value(native1) == _serialize_value(native2), (native1, native2)
+    finally:
+        if verbose:
+            print("NATIVE1:")
+            pprint.pprint(native1)
+            print("NATIVE2:")
+            pprint.pprint(native2)
+
+test_reuse_anchors.unittest = ['.reuse-anchors-data', '.reuse-anchors-code']
+
 if __name__ == '__main__':
     import sys, test_constructor
     sys.modules['test_constructor'] = sys.modules['__main__']
diff --git a/tests/lib/test_yaml_ext.py b/tests/lib/test_yaml_ext.py
index e1c4bb8..2a2916f 100644
--- a/tests/lib/test_yaml_ext.py
+++ b/tests/lib/test_yaml_ext.py
@@ -18,28 +18,28 @@
     return old_parse(stream, Loader)
 
 old_compose = yaml.compose
-def new_compose(stream, Loader=yaml.CLoader):
-    return old_compose(stream, Loader)
+def new_compose(stream, Loader=yaml.CLoader, reuse_anchors=False):
+    return old_compose(stream, Loader, reuse_anchors=reuse_anchors)
 
 old_compose_all = yaml.compose_all
-def new_compose_all(stream, Loader=yaml.CLoader):
-    return old_compose_all(stream, Loader)
+def new_compose_all(stream, Loader=yaml.CLoader, reuse_anchors=False):
+    return old_compose_all(stream, Loader, reuse_anchors=reuse_anchors)
 
 old_load = yaml.load
-def new_load(stream, Loader=yaml.CLoader):
-    return old_load(stream, Loader)
+def new_load(stream, Loader=yaml.CLoader, reuse_anchors=False):
+    return old_load(stream, Loader, reuse_anchors=reuse_anchors)
 
 old_load_all = yaml.load_all
-def new_load_all(stream, Loader=yaml.CLoader):
-    return old_load_all(stream, Loader)
+def new_load_all(stream, Loader=yaml.CLoader, reuse_anchors=False):
+    return old_load_all(stream, Loader, reuse_anchors=reuse_anchors)
 
 old_safe_load = yaml.safe_load
-def new_safe_load(stream):
-    return old_load(stream, yaml.CSafeLoader)
+def new_safe_load(stream, reuse_anchors=False):
+    return old_load(stream, yaml.CSafeLoader, reuse_anchors=reuse_anchors)
 
 old_safe_load_all = yaml.safe_load_all
-def new_safe_load_all(stream):
-    return old_load_all(stream, yaml.CSafeLoader)
+def new_safe_load_all(stream, reuse_anchors=False):
+    return old_load_all(stream, yaml.CSafeLoader, reuse_anchors=reuse_anchors)
 
 old_emit = yaml.emit
 def new_emit(events, stream=None, Dumper=yaml.CDumper, **kwds):
diff --git a/yaml/_yaml.pyx b/yaml/_yaml.pyx
index e3e93e2..01e9814 100644
--- a/yaml/_yaml.pyx
+++ b/yaml/_yaml.pyx
@@ -256,7 +256,8 @@
     cdef int stream_cache_pos
     cdef int unicode_source
 
-    def __init__(self, stream):
+    def __init__(self, stream, reuse_anchors=False):
+        self.reuse_anchors=reuse_anchors
         cdef is_readable
         if yaml_parser_initialize(&self.parser) == 0:
             raise MemoryError
@@ -714,7 +715,7 @@
                 and self.parsed_event.data.mapping_start.anchor != NULL:
             anchor = PyUnicode_FromYamlString(self.parsed_event.data.mapping_start.anchor)
         if anchor is not None:
-            if anchor in self.anchors:
+            if anchor in self.anchors and not self.reuse_anchors:
                 mark = Mark(self.stream_name,
                         self.parsed_event.start_mark.index,
                         self.parsed_event.start_mark.line,
