diff --git a/src/mol-model/structure/query/generators.ts b/src/mol-model/structure/query/generators.ts
index e8d8ab6469692124e43ac8eaf7a846b612e4ac2f..305488104df685fbfc81f9779cc712d0970e7bc2 100644
--- a/src/mol-model/structure/query/generators.ts
+++ b/src/mol-model/structure/query/generators.ts
@@ -45,7 +45,7 @@ function atomGroupsLinear(atomTest: Atom.Predicate): Query {
 
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
             const unitId = unitIds[i];
-            l.unit = units.get(unitId);
+            l.unit = units[unitId];
             const set = AtomSet.unitGetByIndex(atoms, i);
 
             builder.beginUnit();
@@ -69,7 +69,7 @@ function atomGroupsSegmented({ entityTest, chainTest, residueTest, atomTest }: A
 
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
             const unitId = unitIds[i];
-            const unit = units.get(unitId);
+            const unit = units[unitId];
             l.unit = unit;
             const set = AtomSet.unitGetByIndex(atoms, i);
 
@@ -160,7 +160,7 @@ function atomGroupsGrouped({ entityTest, chainTest, residueTest, atomTest, group
 
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
             const unitId = unitIds[i];
-            const unit = units.get(unitId);
+            const unit = units[unitId];
             l.unit = unit;
             const set = AtomSet.unitGetByIndex(atoms, i);
 
diff --git a/src/mol-model/structure/query/selection.ts b/src/mol-model/structure/query/selection.ts
index 54eef86038f21229801286ba6dd8c5628b808758..3f568b501a55d72bdf4d17bca5e2a2789e2a3552 100644
--- a/src/mol-model/structure/query/selection.ts
+++ b/src/mol-model/structure/query/selection.ts
@@ -6,7 +6,6 @@
 
 import Iterator from 'mol-data/iterator'
 import { HashSet } from 'mol-data/util'
-import { IntMap } from 'mol-data/int'
 import { Structure, Atom, AtomSet } from '../structure'
 
 type Selection =
@@ -116,19 +115,20 @@ namespace Selection {
 export default Selection
 
 function unionUnits(xs: Structure[]): Structure['units'] {
-    let prev = xs[0].units;
-    let sameUnits = true;
-    for (let i = 1, _i = xs.length; i < _i; i++) {
-        if (xs[i].units !== prev) sameUnits = false;
-    }
-    if (sameUnits) return prev;
-
-    const ret = IntMap.copy(prev);
-    for (let i = 1, _i = xs.length; i < _i; i++) {
-        const units = xs[i].units;
-        if (units !== prev) IntMap.addFrom(ret, units);
-        prev = units;
-    }
-
-    return ret;
+    return xs[0].units;
+//    let prev = xs[0].units;
+    // let sameUnits = true;
+    // for (let i = 1, _i = xs.length; i < _i; i++) {
+    //     if (xs[i].units !== prev) sameUnits = false;
+    // }
+    // if (sameUnits) return prev;
+
+    // const ret = [...prev];
+    // for (let i = 1, _i = xs.length; i < _i; i++) {
+    //     const units = xs[i].units;
+    //     if (units !== prev) IntMap.addFrom(ret, units);
+    //     prev = units;
+    // }
+
+    //return ret;
 }
diff --git a/src/mol-model/structure/structure/atom.ts b/src/mol-model/structure/structure/atom.ts
index 55a88dcb633af95e0242d38dae0750397e6c708a..217bbb1eb581c5d869c3c91f70d100e8c598fa8f 100644
--- a/src/mol-model/structure/structure/atom.ts
+++ b/src/mol-model/structure/structure/atom.ts
@@ -29,7 +29,7 @@ namespace Atom {
     export interface Predicate extends Property<boolean> { }
 
     export function updateLocation(structure: Structure, l: Location, atom: Atom) {
-        l.unit = structure.units.get(unit(atom));
+        l.unit = structure.units[unit(atom)];
         l.atom = index(atom);
         return l;
     }
diff --git a/src/mol-model/structure/structure/structure.ts b/src/mol-model/structure/structure/structure.ts
index da8546c2cf24c4d8d6ec76ac2cdc9d0bd60cd88e..77c37e9ad366fa983db1f3290fd1560d786bc3ce 100644
--- a/src/mol-model/structure/structure/structure.ts
+++ b/src/mol-model/structure/structure/structure.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { OrderedSet, Iterator, IntMap } from 'mol-data/int'
+import { OrderedSet, Iterator } from 'mol-data/int'
 import { UniqueArray } from 'mol-data/util'
 import SymmetryOperator from 'mol-math/geometry/symmetry-operator'
 import { Model, Format } from '../model'
@@ -15,14 +15,14 @@ import Atom from './atom'
 
 
 interface Structure extends Readonly<{
-    units: IntMap<Unit>,
+    units: Unit[],
     atoms: AtomSet
 }> { }
 
 namespace Structure {
-    export const Empty: Structure = { units: IntMap.Empty, atoms: AtomSet.Empty };
+    export const Empty: Structure = { units: [], atoms: AtomSet.Empty };
 
-    export function create(units: IntMap<Unit>, atoms: AtomSet): Structure {
+    export function create(units: Unit[], atoms: AtomSet): Structure {
         return { units, atoms };
     }
 
@@ -54,12 +54,12 @@ namespace Structure {
 
     class BuilderImpl implements Builder {
         private _unitId = 0;
-        private units = IntMap.Mutable<Unit>();
+        private units: Unit[] = [];
         private atoms = AtomSet.Generator();
         atomCount = 0;
 
         add(unit: Unit, atoms: OrderedSet) { const id = this.addUnit(unit); this.setAtoms(id, atoms); }
-        addUnit(unit: Unit) { const id = this._unitId++; this.units.set(id, unit); return id; }
+        addUnit(unit: Unit) { const id = this._unitId++; this.units[id] = unit; return id; }
         setAtoms(unitId: number, atoms: OrderedSet) { this.atoms.add(unitId, atoms); this.atomCount += OrderedSet.size(atoms); }
         getStructure(): Structure { return this.atomCount > 0 ? Structure.create(this.units, this.atoms.getSet()) : Empty; }
     }
@@ -78,7 +78,7 @@ namespace Structure {
         const arr = UniqueArray.create<Model['id'], Model>();
         const ids = AtomSet.unitIds(atoms);
         for (let i = 0; i < ids.length; i++) {
-            const u = units.get(ids[i]);
+            const u = units[ids[i]];
             UniqueArray.add(arr, u.model.id, u.model);
         }
         return arr.array;
diff --git a/src/mol-model/structure/structure/symmetry.ts b/src/mol-model/structure/structure/symmetry.ts
index a0348b6745dc02f4ba01c20542fdaa30d6cabf86..115a372b3dee129e335893f24a6dbda41eaede2a 100644
--- a/src/mol-model/structure/structure/symmetry.ts
+++ b/src/mol-model/structure/structure/symmetry.ts
@@ -34,7 +34,7 @@ function buildAssemblyImpl(structure: Structure, name: string) {
 
         for (const oper of g.operators) {
             for (let uI = 0, _uI = unitIds.length; uI < _uI; uI++) {
-                const unit = units.get(unitIds[uI]);
+                const unit = units[unitIds[uI]];
                 assembler.add(Unit.withOperator(unit, oper), AtomSet.unitGetByIndex(atoms, uI));
             }
         }
diff --git a/src/perf-tests/structure.ts b/src/perf-tests/structure.ts
index 204ac9df92c9617de2cf7bb227e0d7d7d9b33208..d0f9286bcfa152dfd8dc521708c4659546d53e0a 100644
--- a/src/perf-tests/structure.ts
+++ b/src/perf-tests/structure.ts
@@ -74,7 +74,7 @@ export namespace PropertyAccess {
         let s = 0;
 
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
-            l.unit = units.get(unitIds[i]);
+            l.unit = units[unitIds[i]];
             const set = AtomSet.unitGetByIndex(atoms, i);
 
 
@@ -96,7 +96,7 @@ export namespace PropertyAccess {
 
         let vA = 0, cC = 0, rC = 0;
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
-            const unit = units.get(unitIds[i]);
+            const unit = units[unitIds[i]];
             l.unit = unit;
             const set = AtomSet.unitGetByIndex(atoms, i);
 
@@ -134,7 +134,7 @@ export namespace PropertyAccess {
         let s = 0;
 
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
-            const unit = units.get(unitIds[i]);
+            const unit = units[unitIds[i]];
             l.unit = unit;
             const set = AtomSet.unitGetByIndex(atoms, i);
             const residuesIt = Segmentation.transientSegments(unit.hierarchy.residueSegments, set);
@@ -155,7 +155,7 @@ export namespace PropertyAccess {
         const l = Atom.Location();
         while (atomsIt.hasNext) {
             const a = atomsIt.move();
-            l.unit = units.get(Atom.unit(a));
+            l.unit = units[Atom.unit(a)];
             l.atom = Atom.index(a);
             s += p(l);
         }
@@ -200,7 +200,7 @@ export namespace PropertyAccess {
 
         for (let i = 0, _i = unitIds.length; i < _i; i++) {
             const unitId = unitIds[i];
-            const unit = units.get(unitId);
+            const unit = units[unitId];
             const set = AtomSet.unitGetByIndex(atoms, i);
             //const { residueIndex, chainIndex } = unit;
             const p = unit.conformation.atomId.value;