diff --git a/src/mol-model/structure/structure/unit/rings.ts b/src/mol-model/structure/structure/unit/rings.ts
index b7e17943380cc7e4ead59d074c27530bad1d196e..0d5437773aa953568cd391a1279c3864be29b353 100644
--- a/src/mol-model/structure/structure/unit/rings.ts
+++ b/src/mol-model/structure/structure/unit/rings.ts
@@ -41,20 +41,23 @@ namespace UnitRings {
 
     export function create(unit: Unit.Atomic): UnitRings {
         const rings = computeRings(unit);
-        const byFingerprint = new Map<string, Index[]>();
-
-        let idx = 0 as Index;
-        for (const r of rings) {
-            const fp = getRingFingerprint(unit, r);
-            if (byFingerprint.has(fp)) byFingerprint.get(fp)!.push(idx);
-            else byFingerprint.set(fp, [idx]);
-            idx++;
-        }
 
+        let _byFingerprint: Map<string, Index[]> | undefined = void 0;
         let _index: UnitRings['index'] | undefined = void 0;
         return {
             all: rings,
-            byFingerprint,
+            get byFingerprint() {
+                if (_byFingerprint) return _byFingerprint;
+                _byFingerprint = new Map();
+                let idx = 0 as Index;
+                for (const r of rings) {
+                    const fp = getRingFingerprint(unit, r);
+                    if (_byFingerprint.has(fp)) _byFingerprint.get(fp)!.push(idx);
+                    else _byFingerprint.set(fp, [idx]);
+                    idx++;
+                }
+                return _byFingerprint;
+            },
             get index() {
                 if (_index) return _index;
                 _index = createIndex(rings);