diff --git a/src/mol-data/sequence/TODO b/src/mol-data/sequence/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/mol-data/structure.ts b/src/mol-data/structure.ts
deleted file mode 100644
index cc8bf49f34d41cddcc8c0333a9125dcf4a69137b..0000000000000000000000000000000000000000
--- a/src/mol-data/structure.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author David Sehnal <david.sehnal@gmail.com>
- */
-
-import Atom from './structure/atom'
-import AtomSet from './structure/atom/set'
-import Structure from './structure/structure'
-import Operator from './structure/operator'
-import Unit from './structure/unit'
-
-export { Atom, AtomSet, Structure, Operator, Unit }
\ No newline at end of file
diff --git a/src/mol-data/_spec/atom-set.spec.ts b/src/mol-data/structure/_spec/atom-set.spec.ts
similarity index 99%
rename from src/mol-data/_spec/atom-set.spec.ts
rename to src/mol-data/structure/_spec/atom-set.spec.ts
index 62e5ea804532c83350c71907521a0bf514baea98..2ca79d8f9ff0ec27aa76da76ed11563fe2c5f5a1 100644
--- a/src/mol-data/_spec/atom-set.spec.ts
+++ b/src/mol-data/structure/_spec/atom-set.spec.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { OrderedSet } from '../../mol-base/collections/integer'
+import { OrderedSet } from '../../../mol-base/collections/integer'
 import AtomSet from '../structure/atom/set'
 import Atom from '../structure/atom'
 
diff --git a/src/mol-data/model.ts b/src/mol-data/structure/model.ts
similarity index 100%
rename from src/mol-data/model.ts
rename to src/mol-data/structure/model.ts
diff --git a/src/mol-data/model/builders/mmcif.ts b/src/mol-data/structure/model/builders/mmcif.ts
similarity index 94%
rename from src/mol-data/model/builders/mmcif.ts
rename to src/mol-data/structure/model/builders/mmcif.ts
index 4d92bbc56ad435cf453d6cfe13c23e12c7b30c2f..3fa96b0383d303dd6d67735ac9187901560dff4f 100644
--- a/src/mol-data/model/builders/mmcif.ts
+++ b/src/mol-data/structure/model/builders/mmcif.ts
@@ -5,12 +5,11 @@
  */
 
 import { mmCIF } from '../data-format'
-//import { Frame as mmCIF } from '../../../mol-io/reader/cif/schema/mmcif'
 import Model from '../model'
-import Column from '../../../mol-base/collections/column'
-import Table from '../../../mol-base/collections/table'
-import { Interval, Segmentation } from '../../../mol-base/collections/integer'
-import { newUUID } from '../../../mol-base/utils/uuid'
+import Column from '../../../../mol-base/collections/column'
+import Table from '../../../../mol-base/collections/table'
+import { Interval, Segmentation } from '../../../../mol-base/collections/integer'
+import { newUUID } from '../../../../mol-base/utils/uuid'
 import * as Hierarchy from '../properties/hierarchy'
 import Conformation from '../properties/conformation'
 import findHierarchyKeys from '../utils/hierarchy-keys'
diff --git a/src/mol-data/model/constants.ts b/src/mol-data/structure/model/constants.ts
similarity index 99%
rename from src/mol-data/model/constants.ts
rename to src/mol-data/structure/model/constants.ts
index 5db57c7337f329a7e8a2885d29e9e982af69591e..48c863c7f897d9caff9874496d8df8b05848135a 100644
--- a/src/mol-data/model/constants.ts
+++ b/src/mol-data/structure/model/constants.ts
@@ -5,7 +5,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import BitFlags from '../../mol-base/utils/bit-flags'
+import BitFlags from '../../../mol-base/utils/bit-flags'
 
 export const enum EntityType {
     Unknown = 'unknown',
diff --git a/src/mol-data/model/data-format.ts b/src/mol-data/structure/model/data-format.ts
similarity index 77%
rename from src/mol-data/model/data-format.ts
rename to src/mol-data/structure/model/data-format.ts
index 128136b8659d84b309895436b2de7d505d7f0289..c5c4aa2e7216b16d02be62de4e8f8cff21b85850 100644
--- a/src/mol-data/model/data-format.ts
+++ b/src/mol-data/structure/model/data-format.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { Frame as mmCIF_Frame } from '../../mol-io/reader/cif/schema/mmcif'
+import { Frame as mmCIF_Frame } from '../../../mol-io/reader/cif/schema/mmcif'
 
 export interface mmCIF { kind: 'mmCIF', data: mmCIF_Frame }
 
diff --git a/src/mol-data/model/model.ts b/src/mol-data/structure/model/model.ts
similarity index 94%
rename from src/mol-data/model/model.ts
rename to src/mol-data/structure/model/model.ts
index 12c5fe73ad01b26690a1dc6266baa404e6d04d49..b2dbf68fc8d59c0320ccdcfb237f4987cb30eb0b 100644
--- a/src/mol-data/model/model.ts
+++ b/src/mol-data/structure/model/model.ts
@@ -7,7 +7,7 @@
 import DataFormat from './data-format'
 import HierarchyProperties from './properties/hierarchy'
 import ConformationProperties from './properties/conformation'
-import UUID from '../../mol-base/utils/uuid'
+import UUID from '../../../mol-base/utils/uuid'
 
 import buildMmCIF from './builders/mmcif'
 
diff --git a/src/mol-data/model/properties/computed.ts b/src/mol-data/structure/model/properties/computed.ts
similarity index 100%
rename from src/mol-data/model/properties/computed.ts
rename to src/mol-data/structure/model/properties/computed.ts
diff --git a/src/mol-data/model/properties/conformation.ts b/src/mol-data/structure/model/properties/conformation.ts
similarity index 86%
rename from src/mol-data/model/properties/conformation.ts
rename to src/mol-data/structure/model/properties/conformation.ts
index 7ea3c52433d0e271961c193e3f64a7938d2a20d7..a80739667398ecff7735c4243cb30c0e6247a0c8 100644
--- a/src/mol-data/model/properties/conformation.ts
+++ b/src/mol-data/structure/model/properties/conformation.ts
@@ -4,8 +4,8 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import Column from '../../../mol-base/collections/column'
-import UUID from '../../../mol-base/utils/uuid'
+import Column from '../../../../mol-base/collections/column'
+import UUID from '../../../../mol-base/utils/uuid'
 
 interface Conformation {
     id: UUID,
diff --git a/src/mol-data/model/properties/format-specific.ts b/src/mol-data/structure/model/properties/format-specific.ts
similarity index 100%
rename from src/mol-data/model/properties/format-specific.ts
rename to src/mol-data/structure/model/properties/format-specific.ts
diff --git a/src/mol-data/model/properties/hierarchy.ts b/src/mol-data/structure/model/properties/hierarchy.ts
similarity index 91%
rename from src/mol-data/model/properties/hierarchy.ts
rename to src/mol-data/structure/model/properties/hierarchy.ts
index e86fc8983c4b1683b2c4a3b446b42f058afea7a3..dceb055c4bb8b53a0c5940d0ea302f0b9dbbf59f 100644
--- a/src/mol-data/model/properties/hierarchy.ts
+++ b/src/mol-data/structure/model/properties/hierarchy.ts
@@ -4,10 +4,10 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import Column from '../../../mol-base/collections/column'
-import Table from '../../../mol-base/collections/table'
-import { Segmentation } from '../../../mol-base/collections/integer'
-import { Schema as mmCIF } from '../../../mol-io/reader/cif/schema/mmcif'
+import Column from '../../../../mol-base/collections/column'
+import Table from '../../../../mol-base/collections/table'
+import { Segmentation } from '../../../../mol-base/collections/integer'
+import { Schema as mmCIF } from '../../../../mol-io/reader/cif/schema/mmcif'
 
 const _esCache = Object.create(null);
 export interface ElementSymbol extends String { '@type': 'element-symbol' }
diff --git a/src/mol-data/model/properties/transforms.ts b/src/mol-data/structure/model/properties/transforms.ts
similarity index 100%
rename from src/mol-data/model/properties/transforms.ts
rename to src/mol-data/structure/model/properties/transforms.ts
diff --git a/src/mol-data/model/utils/hierarchy-keys.ts b/src/mol-data/structure/model/utils/hierarchy-keys.ts
similarity index 96%
rename from src/mol-data/model/utils/hierarchy-keys.ts
rename to src/mol-data/structure/model/utils/hierarchy-keys.ts
index 6bc5a4a8c22a3b474a0406fc5d3474cfb36150da..b99cec0699e788ea95f843d0dc0a9c28c53f82f1 100644
--- a/src/mol-data/model/utils/hierarchy-keys.ts
+++ b/src/mol-data/structure/model/utils/hierarchy-keys.ts
@@ -4,9 +4,9 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import Column from '../../../mol-base/collections/column'
+import Column from '../../../../mol-base/collections/column'
 import { Data, Segments, Keys } from '../properties/hierarchy'
-import { Interval, Segmentation } from '../../../mol-base/collections/integer'
+import { Interval, Segmentation } from '../../../../mol-base/collections/integer'
 
 function getResidueId(comp_id: string, seq_id: number, ins_code: string) {
     return `${comp_id} ${seq_id} ${ins_code}`;
diff --git a/src/mol-data/query.ts b/src/mol-data/structure/query.ts
similarity index 100%
rename from src/mol-data/query.ts
rename to src/mol-data/structure/query.ts
diff --git a/src/mol-data/query/generators.ts b/src/mol-data/structure/query/generators.ts
similarity index 97%
rename from src/mol-data/query/generators.ts
rename to src/mol-data/structure/query/generators.ts
index d90d9c3b9d83122846309b595bdb1ea7fb0aae40..a647260f6f091f31aa644970f5ffd4ceffc05b14 100644
--- a/src/mol-data/query/generators.ts
+++ b/src/mol-data/structure/query/generators.ts
@@ -8,7 +8,7 @@ import Query from './query'
 //import Selection from './selection'
 import * as P from './properties'
 import { AtomSet, Atom } from '../structure'
-import { OrderedSet } from '../../mol-base/collections/integer'
+import { OrderedSet } from '../../../mol-base/collections/integer'
 
 export interface AtomGroupsSpec {
     entityTest: Atom.Predicate,
diff --git a/src/mol-data/query/properties.ts b/src/mol-data/structure/query/properties.ts
similarity index 100%
rename from src/mol-data/query/properties.ts
rename to src/mol-data/structure/query/properties.ts
diff --git a/src/mol-data/query/query.ts b/src/mol-data/structure/query/query.ts
similarity index 100%
rename from src/mol-data/query/query.ts
rename to src/mol-data/structure/query/query.ts
diff --git a/src/mol-data/query/selection.ts b/src/mol-data/structure/query/selection.ts
similarity index 96%
rename from src/mol-data/query/selection.ts
rename to src/mol-data/structure/query/selection.ts
index d2ef57dff8594e637dc26539ae6f80a0ce55cc42..8e46f0f36595a9d1a9572b3867a1e29bdf2db488 100644
--- a/src/mol-data/query/selection.ts
+++ b/src/mol-data/structure/query/selection.ts
@@ -4,8 +4,8 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import Iterator from '../../mol-base/collections/iterator'
-import HashSet from '../../mol-base/collections/hash-set'
+import Iterator from '../../../mol-base/collections/iterator'
+import HashSet from '../../../mol-base/collections/hash-set'
 import { Structure, Atom, AtomSet } from '../structure'
 
 type Selection =
diff --git a/src/mol-data/structure/structure.ts b/src/mol-data/structure/structure.ts
index cc995ad2c0c3dfcf0ac7e0e0ababd9a3775f865c..cc8bf49f34d41cddcc8c0333a9125dcf4a69137b 100644
--- a/src/mol-data/structure/structure.ts
+++ b/src/mol-data/structure/structure.ts
@@ -4,55 +4,10 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { Model } from '../model'
-import Unit from './unit'
-import Operator from './operator'
-import AtomSet from './atom/set'
-import { OrderedSet } from '../../mol-base/collections/integer'
+import Atom from './structure/atom'
+import AtomSet from './structure/atom/set'
+import Structure from './structure/structure'
+import Operator from './structure/operator'
+import Unit from './structure/unit'
 
-interface Structure extends Readonly<{
-    units: { readonly [id: number]: Unit },
-    atoms: AtomSet
-}> { }
-
-namespace Structure {
-    export const Empty = { units: {}, atoms: AtomSet.Empty };
-
-    export function ofModel(model: Model): Structure {
-        const chains = model.hierarchy.chainSegments;
-        const builder = Builder();
-
-        for (let c = 0; c < chains.count; c++) {
-            const unit = Unit.create(model, Operator.Identity);
-            builder.addUnit(unit);
-            builder.addAtoms(unit.id, OrderedSet.ofBounds(chains.segments[c], chains.segments[c + 1]));
-        }
-
-        return builder.getStructure();
-    }
-
-    export interface Builder {
-        addUnit(unit: Unit): void,
-        addAtoms(unitId: number, atoms: OrderedSet): void,
-        getStructure(): Structure,
-        readonly atomCount: number
-    }
-
-    class BuilderImpl implements Builder {
-        private units = Object.create(null);
-        private atoms = Object.create(null);
-        atomCount = 0;
-
-        addUnit(unit: Unit) { this.units[unit.id] = unit; }
-        addAtoms(unitId: number, atoms: OrderedSet) { this.atoms[unitId] = atoms; this.atomCount += OrderedSet.size(atoms); }
-        getStructure(): Structure { return this.atomCount > 0 ? { units: this.units, atoms: AtomSet.create(this.atoms) } : Empty; }
-    }
-
-    export function Builder(): Builder { return new BuilderImpl(); }
-
-
-    // TODO: "lift" atom set operators?
-    // TODO: "diff"
-}
-
-export default Structure
\ No newline at end of file
+export { Atom, AtomSet, Structure, Operator, Unit }
\ No newline at end of file
diff --git a/src/mol-data/structure/atom.ts b/src/mol-data/structure/structure/atom.ts
similarity index 95%
rename from src/mol-data/structure/atom.ts
rename to src/mol-data/structure/structure/atom.ts
index 34a38d16998716d77685705cc23880a953cede96..ddce507fd645be816f3640ca4baaf9d24594f6e8 100644
--- a/src/mol-data/structure/atom.ts
+++ b/src/mol-data/structure/structure/atom.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { Tuple } from '../../mol-base/collections/integer'
+import { Tuple } from '../../../mol-base/collections/integer'
 import Unit from './unit'
 import Structure from './structure'
 
diff --git a/src/mol-data/structure/atom/set.ts b/src/mol-data/structure/structure/atom/set.ts
similarity index 96%
rename from src/mol-data/structure/atom/set.ts
rename to src/mol-data/structure/structure/atom/set.ts
index 92a04dc706abe177ac4da6495571d46e95a7e455..25a77f42359a2ead849437e7f7dcb0fe511c294b 100644
--- a/src/mol-data/structure/atom/set.ts
+++ b/src/mol-data/structure/structure/atom/set.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { OrderedSet, SortedArray, Iterator } from '../../../mol-base/collections/integer'
+import { OrderedSet, SortedArray, Iterator } from '../../../../mol-base/collections/integer'
 import Atom from '../atom'
 import * as Impl from './set/impl'
 import createBuilder from './set/builder'
diff --git a/src/mol-data/structure/atom/set/builder.ts b/src/mol-data/structure/structure/atom/set/builder.ts
similarity index 93%
rename from src/mol-data/structure/atom/set/builder.ts
rename to src/mol-data/structure/structure/atom/set/builder.ts
index a1940c367658c00ffa90229677c52ff4cb2063ae..1e6c4beda2fbdd74bb0c4aa6f782afae65f50db3 100644
--- a/src/mol-data/structure/atom/set/builder.ts
+++ b/src/mol-data/structure/structure/atom/set/builder.ts
@@ -5,8 +5,8 @@
  */
 
 import AtomSet from '../set'
-import { OrderedSet } from '../../../../mol-base/collections/integer'
-import { sortArray } from '../../../../mol-base/collections/sort'
+import { OrderedSet } from '../../../../../mol-base/collections/integer'
+import { sortArray } from '../../../../../mol-base/collections/sort'
 
 class Builder {
     private keys: number[] = [];
diff --git a/src/mol-data/structure/atom/set/impl.ts b/src/mol-data/structure/structure/atom/set/impl.ts
similarity index 98%
rename from src/mol-data/structure/atom/set/impl.ts
rename to src/mol-data/structure/structure/atom/set/impl.ts
index fab4133aa2c8893318f49812005e26aefa859aa0..7f2f2d15f29343fb78accfc0e2706578e2a28c39 100644
--- a/src/mol-data/structure/atom/set/impl.ts
+++ b/src/mol-data/structure/structure/atom/set/impl.ts
@@ -4,9 +4,9 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { SortedArray, Interval, Iterator, OrderedSet } from '../../../../mol-base/collections/integer'
-import { sortArray } from '../../../../mol-base/collections/sort'
-import { hash1 } from '../../../../mol-base/collections/hash-functions'
+import { SortedArray, Interval, Iterator, OrderedSet } from '../../../../../mol-base/collections/integer'
+import { sortArray } from '../../../../../mol-base/collections/sort'
+import { hash1 } from '../../../../../mol-base/collections/hash-functions'
 import Atom from '../../atom'
 
 /** Long and painful implementation starts here */
diff --git a/src/mol-data/structure/atom/set/properties.ts b/src/mol-data/structure/structure/atom/set/properties.ts
similarity index 100%
rename from src/mol-data/structure/atom/set/properties.ts
rename to src/mol-data/structure/structure/atom/set/properties.ts
diff --git a/src/mol-data/structure/operator.ts b/src/mol-data/structure/structure/operator.ts
similarity index 91%
rename from src/mol-data/structure/operator.ts
rename to src/mol-data/structure/structure/operator.ts
index 484dd7590ef02326b08e28fe1dd55cfdf4b25b34..363331f27decfc9a3cb09118c810a99fa42f015d 100644
--- a/src/mol-data/structure/operator.ts
+++ b/src/mol-data/structure/structure/operator.ts
@@ -4,7 +4,7 @@
  * @author David Sehnal <david.sehnal@gmail.com>
  */
 
-import { Mat4 } from '../../mol-base/math/linear-algebra'
+import { Mat4 } from '../../../mol-base/math/linear-algebra'
 
 interface Operator extends Readonly<{
     name: string,
diff --git a/src/mol-data/structure/structure/structure.ts b/src/mol-data/structure/structure/structure.ts
new file mode 100644
index 0000000000000000000000000000000000000000..31e001a276ac19ddfb1bbd8f96bf06747d2b1af6
--- /dev/null
+++ b/src/mol-data/structure/structure/structure.ts
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2017 molio contributors, licensed under MIT, See LICENSE file for more info.
+ *
+ * @author David Sehnal <david.sehnal@gmail.com>
+ */
+
+import { Model } from '../model'
+import Unit from './unit'
+import Operator from './operator'
+import AtomSet from './atom/set'
+import { OrderedSet } from '../../../mol-base/collections/integer'
+
+interface Structure extends Readonly<{
+    units: { readonly [id: number]: Unit },
+    atoms: AtomSet
+}> { }
+
+namespace Structure {
+    export const Empty = { units: {}, atoms: AtomSet.Empty };
+
+    export function ofModel(model: Model): Structure {
+        const chains = model.hierarchy.chainSegments;
+        const builder = Builder();
+
+        for (let c = 0; c < chains.count; c++) {
+            const unit = Unit.create(model, Operator.Identity);
+            builder.addUnit(unit);
+            builder.addAtoms(unit.id, OrderedSet.ofBounds(chains.segments[c], chains.segments[c + 1]));
+        }
+
+        return builder.getStructure();
+    }
+
+    export interface Builder {
+        addUnit(unit: Unit): void,
+        addAtoms(unitId: number, atoms: OrderedSet): void,
+        getStructure(): Structure,
+        readonly atomCount: number
+    }
+
+    class BuilderImpl implements Builder {
+        private units = Object.create(null);
+        private atoms = Object.create(null);
+        atomCount = 0;
+
+        addUnit(unit: Unit) { this.units[unit.id] = unit; }
+        addAtoms(unitId: number, atoms: OrderedSet) { this.atoms[unitId] = atoms; this.atomCount += OrderedSet.size(atoms); }
+        getStructure(): Structure { return this.atomCount > 0 ? { units: this.units, atoms: AtomSet.create(this.atoms) } : Empty; }
+    }
+
+    export function Builder(): Builder { return new BuilderImpl(); }
+
+
+    // TODO: "lift" atom set operators?
+    // TODO: "diff"
+}
+
+export default Structure
\ No newline at end of file
diff --git a/src/mol-data/structure/unit.ts b/src/mol-data/structure/structure/unit.ts
similarity index 100%
rename from src/mol-data/structure/unit.ts
rename to src/mol-data/structure/structure/unit.ts
diff --git a/src/mol-data/volume/TODO b/src/mol-data/volume/TODO
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/perf-tests/sets.ts b/src/perf-tests/sets.ts
index e4f0670854dd9eeb97a2c0faf92797f1c6396e17..b499ae2a3e6a52cc857b33751280b9afd5259e3f 100644
--- a/src/perf-tests/sets.ts
+++ b/src/perf-tests/sets.ts
@@ -1,6 +1,6 @@
 import * as B from 'benchmark'
 import { Tuple, Segmentation, OrderedSet as OrdSet } from '../mol-base/collections/integer'
-import { AtomSet } from '../mol-data/structure'
+import { AtomSet } from '../mol-data/structure/structure'
 
 export namespace Iteration {
     const U = 1000, V = 2500;
diff --git a/src/perf-tests/structure.ts b/src/perf-tests/structure.ts
index b066edf918f3c60defde1c005a54b5d68851aec1..7da905f45071fb7ce7fca58858fcbf6dfe269614 100644
--- a/src/perf-tests/structure.ts
+++ b/src/perf-tests/structure.ts
@@ -10,9 +10,9 @@ import * as util from 'util'
 import * as fs from 'fs'
 import CIF from '../mol-io/reader/cif'
 
-import { Model } from '../mol-data/Model'
-import { Structure, Atom, AtomSet } from '../mol-data/structure'
-import * as Q from '../mol-data/query'
+import { Model } from '../mol-data/structure/model'
+import { Structure, Atom, AtomSet } from '../mol-data/structure/structure'
+import * as Q from '../mol-data/structure/query'
 import { OrderedSet as OrdSet, Segmentation } from '../mol-base/collections/integer'
 
 require('util.promisify').shim();
diff --git a/src/script.ts b/src/script.ts
index e42be6c0bde858119ffa4fee6c9aa6aa4acf2019..7408e72ea654670cc6c0c0a75ab2d98e7d43b0b5 100644
--- a/src/script.ts
+++ b/src/script.ts
@@ -17,7 +17,7 @@ import CIF from './mol-io/reader/cif'
 
 import Computation from './mol-base/computation'
 
-import buildModels from './mol-data/model/builders/mmcif'
+import buildModels from './mol-data/structure/model/builders/mmcif'
 
 // import { toTypedFrame as applySchema } from './reader/cif/schema'
 import { generateSchema } from './mol-io/reader/cif/schema/utils'