diff --git a/src/main/org/openscience/cdk/io/MDLV2000Reader.java b/src/main/org/openscience/cdk/io/MDLV2000Reader.java
index <HASH>..<HASH> 100644
--- a/src/main/org/openscience/cdk/io/MDLV2000Reader.java
+++ b/src/main/org/openscience/cdk/io/MDLV2000Reader.java
@@ -242,7 +242,6 @@ public class MDLV2000Reader extends DefaultChemObjectReader {
         try {
             IAtomContainer m;
             while ((m = readAtomContainer(builder.newInstance(IAtomContainer.class))) != null) {
-                readNonStructuralData(input, m);
                 sequence.addChemModel(newModel(m));
             }
         } catch (CDKException e) {
@@ -955,6 +954,9 @@ public class MDLV2000Reader extends DefaultChemObjectReader {
                 }
             }
 
+            // read potential SD file data between M  END and $$$$
+            readNonStructuralData(input, outputContainer);
+
             if (interpretHydrogenIsotopes.isSet()) {
                 fixHydrogenIsotopes(molecule, isotopeFactory);
             }
Read the non-structure data with the container - although the data makes it an SD file rather than a V<I> it is useful as if an SD file is completely V<I> successive calls to read(AtomContainer) will correctly load the contents. This is faster than the IteratingSDFReader which copies into a temporary buffer before parsing it to the V<I> reader.