diff --git a/src/apps/structure-info/model.ts b/src/apps/structure-info/model.ts
index c06c66e4eeb80a6655db82a9511f0a6c1c1cdcde..6a8ce63093eedd9d2c305346fbc74f06cdb75e08 100644
--- a/src/apps/structure-info/model.ts
+++ b/src/apps/structure-info/model.ts
@@ -196,7 +196,7 @@ async function run(mmcif: mmCIF_Database) {
     //printIHMModels(models[0]);
     printUnits(structure);
     //printRings(structure);
-    printLinks(structure, true, true);
+    //printLinks(structure, true, true);
     //printModRes(models[0]);
     //printSecStructure(models[0]);
 }
diff --git a/src/mol-model/structure/structure/structure.ts b/src/mol-model/structure/structure/structure.ts
index 22666fb137319710faae97b12058c3861003ecaf..78ef1b4703407f526c2f9844385e92232f8d14b1 100644
--- a/src/mol-model/structure/structure/structure.ts
+++ b/src/mol-model/structure/structure/structure.ts
@@ -94,25 +94,27 @@ namespace Structure {
 
     export function create(units: ReadonlyArray<Unit>): Structure { return new Structure(units); }
 
+    /**
+     * Construct a Structure from a model.
+     *
+     * Generally, a single unit corresponds to a single chain, with the exception
+     * of consecutive "single atom chains".
+     */
     export function ofModel(model: Model): Structure {
         const chains = model.atomicHierarchy.chainSegments;
         const builder = new StructureBuilder();
 
-        const { residueSegments: { segmentMap: residueIndex } } = model.atomicHierarchy;
-
         for (let c = 0; c < chains.count; c++) {
             const start = chains.segments[c];
-            let end = chains.segments[c + 1];
 
-            let rStart = residueIndex[start], rEnd = residueIndex[end - 1];
-            while (rEnd - rStart <= 1 && c + 1 < chains.count) {
+            // merge all consecutive "single atom chains"
+            while (c + 1 < chains.count
+                && chains.segments[c + 1] - chains.segments[c] === 1
+                && chains.segments[c + 2] - chains.segments[c + 1] === 1) {
                 c++;
-                end = chains.segments[c + 1];
-                rStart = rEnd;
-                rEnd = residueIndex[end - 1];
             }
 
-            const elements = SortedArray.ofBounds(start, end);
+            const elements = SortedArray.ofBounds(start, chains.segments[c + 1]);
             builder.addUnit(Unit.Kind.Atomic, model, SymmetryOperator.Default, elements);
         }