diff --git a/data/rcsb-graphql/codegen.js b/data/rcsb-graphql/codegen.js
index e818f2b193bb5a614c43e17fe356796d558b095f..65adefbd350baff8577435bde9bf24537073e805 100644
--- a/data/rcsb-graphql/codegen.js
+++ b/data/rcsb-graphql/codegen.js
@@ -8,7 +8,7 @@ generate({
         path.join(basePath, 'symmetry.gql.ts')
     ],
     schema: 'http://rest-experimental.rcsb.org/graphql',
-    template: 'typescript',
+    template: 'graphql-codegen-typescript-template',
     out: path.join(basePath),
     skipSchema: true,
     overwrite: true,
diff --git a/data/rcsb-graphql/codegen.json b/data/rcsb-graphql/codegen.json
index a005e9369d5807dfdd581297c9556aa8a08ccbba..3046d2483f176f5b1b29d686dba6a22d7510d09b 100644
--- a/data/rcsb-graphql/codegen.json
+++ b/data/rcsb-graphql/codegen.json
@@ -1,5 +1,5 @@
 {
-    "flattenTypes": false,
+    "flattenTypes": true,
     "generatorConfig": {
         "printTime": true,
         "immutableTypes": true,
diff --git a/src/apps/canvas/assembly-symmetry.ts b/src/apps/canvas/assembly-symmetry.ts
index 1cc665a5b96b6d4763341d13ab843f0bdaea2b40..0fe6a734730dd50f51c2a8af3ba15af36d5c0517 100644
--- a/src/apps/canvas/assembly-symmetry.ts
+++ b/src/apps/canvas/assembly-symmetry.ts
@@ -16,12 +16,12 @@ import { ColorTheme } from 'mol-theme/color';
 import { Location } from 'mol-model/location';
 import { StructureElement, Unit, StructureProperties } from 'mol-model/structure';
 
-export function getAxesShape(featureId: number, assemblySymmetry: AssemblySymmetry) {
-    const f = assemblySymmetry.db.rcsb_assembly_symmetry_feature
-    const feature = Table.pickRow(f, i => f.id.value(i) === featureId)
-    if (!feature) return
+export function getAxesShape(symmetryId: number, assemblySymmetry: AssemblySymmetry) {
+    const s = assemblySymmetry.db.rcsb_assembly_symmetry
+    const symmetry = Table.pickRow(s, i => s.id.value(i) === symmetryId)
+    if (!symmetry) return
 
-    const axes = assemblySymmetry.getAxes(featureId)
+    const axes = assemblySymmetry.getAxes(symmetryId)
     if (!axes._rowCount) return
 
     const vectorSpace = AssemblySymmetry.Schema.rcsb_assembly_symmetry_axis.start.space;
@@ -41,7 +41,7 @@ export function getAxesShape(featureId: number, assemblySymmetry: AssemblySymmet
         addSphere(meshBuilder, end, radius, 2)
         addCylinder(meshBuilder, start, end, 1, cylinderProps)
         colors.push(Color(0xCCEE11))
-        labels.push(`Axis ${i + 1} for ${feature.symmetry_value} ${feature.type.toLowerCase()} symmetry`)
+        labels.push(`Axis ${i + 1} for ${symmetry.kind} ${symmetry.type.toLowerCase()} symmetry`)
     }
     const mesh = meshBuilder.getMesh()
     const shape = Shape.create('Axes', mesh, colors, labels)
@@ -51,46 +51,45 @@ export function getAxesShape(featureId: number, assemblySymmetry: AssemblySymmet
 function getAsymId(unit: Unit): StructureElement.Property<string> {
     switch (unit.kind) {
         case Unit.Kind.Atomic:
-            return StructureProperties.chain.auth_asym_id // TODO
+            return StructureProperties.chain.label_asym_id
         case Unit.Kind.Spheres:
         case Unit.Kind.Gaussians:
             return StructureProperties.coarse.asym_id
     }
 }
 
-function memberKey (asym_id: string, oper_list_id?: number) {
-    return `${asym_id}|${oper_list_id}`
+function clusterMemberKey (asym_id: string, oper_list_ids: string[]) {
+    return `${asym_id}-${oper_list_ids.join('x')}`
 }
 
-export function getClusterColorTheme(featureId: number, assemblySymmetry: AssemblySymmetry): ColorTheme {
+export function getClusterColorTheme(symmetryId: number, assemblySymmetry: AssemblySymmetry): ColorTheme {
     const DefaultColor = Color(0xCCCCCC)
-    const f = assemblySymmetry.db.rcsb_assembly_symmetry_feature
-    const feature = Table.pickRow(f, i => f.id.value(i) === featureId)
-    if (!feature) return { granularity: 'uniform', color: () => DefaultColor }
+    const s = assemblySymmetry.db.rcsb_assembly_symmetry
+    const symmetry = Table.pickRow(s, i => s.id.value(i) === symmetryId)
+    if (!symmetry) return { granularity: 'uniform', color: () => DefaultColor }
 
-    const clusters = assemblySymmetry.getClusters(featureId)
+    const clusters = assemblySymmetry.getClusters(symmetryId)
     if (!clusters._rowCount) return { granularity: 'uniform', color: () => DefaultColor }
 
     const clusterByMember = new Map<string, number>()
     for (let i = 0, il = clusters._rowCount; i < il; ++i) {
-        clusters.members.value(i).forEach(m => {
-            const ms = m.split('_')
-            const asym_id = ms[0]
-            const oper_list_id = ms.length === 2 ? parseInt(ms[1]) : undefined
-            clusterByMember.set(memberKey(asym_id, oper_list_id), i)
-        })
+        const clusterMembers = assemblySymmetry.getClusterMembers(clusters.id.value(i))
+        for (let j = 0, jl = clusterMembers._rowCount; j < jl; ++j) {
+            const asym_id = clusterMembers.asym_id.value(j)
+            const oper_list_ids = clusterMembers.pdbx_struct_oper_list_ids.value(j)
+            clusterByMember.set(clusterMemberKey(asym_id, oper_list_ids), i)
+        }
     }
-
     const scale = ColorScale.create({ domain: [ 0, clusters._rowCount - 1 ] })
 
     return {
         granularity: 'instance',
         color: (location: Location): Color => {
             if (StructureElement.isLocation(location)) {
-                const ns = location.unit.conformation.operator.name.split('-')
                 const asym_id = getAsymId(location.unit)
-                const oper_list_id = ns.length === 2 ? parseInt(ns[1]) : undefined
-                const cluster = clusterByMember.get(memberKey(asym_id(location), oper_list_id))
+                const ns = location.unit.conformation.operator.name.split('-')
+                const oper_list_ids = ns.length === 2 ? ns[1].split('x') : []
+                const cluster = clusterByMember.get(clusterMemberKey(asym_id(location), oper_list_ids))
                 return cluster !== undefined ? scale.color(cluster) : DefaultColor
             }
             return DefaultColor
diff --git a/src/apps/canvas/structure-view.ts b/src/apps/canvas/structure-view.ts
index bde3e67e940eed4b22fb034e1dbeee9626f2b9f2..8be00f5eda814f0e67bb04b4bffac7a38fe025c1 100644
--- a/src/apps/canvas/structure-view.ts
+++ b/src/apps/canvas/structure-view.ts
@@ -65,14 +65,14 @@ interface StructureViewProps {
 
 export async function StructureView(app: App, viewer: Canvas3D, models: ReadonlyArray<Model>, props: StructureViewProps = {}): Promise<StructureView> {
     const active: { [k: string]: boolean } = {
-        cartoon: false,
+        cartoon: true,
         point: false,
-        surface: true,
+        surface: false,
         ballAndStick: false,
         carbohydrate: false,
         spacefill: false,
         distanceRestraint: false,
-        symmetryAxes: false,
+        symmetryAxes: true,
         // polymerSphere: false,
     }
 
@@ -142,7 +142,7 @@ export async function StructureView(app: App, viewer: Canvas3D, models: Readonly
         } else if (model && model.symmetry.assemblies.length) {
             assemblyId = model.symmetry.assemblies[0].id
         } else if (model) {
-            assemblyId = '0'
+            assemblyId = 'deposited'
         } else {
             assemblyId = '-1'
         }
@@ -152,7 +152,7 @@ export async function StructureView(app: App, viewer: Canvas3D, models: Readonly
 
     function getAssemblyIds() {
         const assemblyIds: { id: string, label: string }[] = [
-            { id: '0', label: '0: model' }
+            { id: 'deposited', label: 'deposited' }
         ]
         if (model) model.symmetry.assemblies.forEach(a => {
             assemblyIds.push({ id: a.id, label: `${a.id}: ${a.details}` })
@@ -165,9 +165,9 @@ export async function StructureView(app: App, viewer: Canvas3D, models: Readonly
         if (newSymmetryFeatureId !== undefined) {
             symmetryFeatureId = newSymmetryFeatureId
         } else if (assemblySymmetry) {
-            const f = assemblySymmetry.getFeatures(assemblyId)
-            if (f._rowCount) {
-                symmetryFeatureId = f.id.value(0)
+            const s = assemblySymmetry.getSymmetries(assemblyId)
+            if (s._rowCount) {
+                symmetryFeatureId = s.id.value(0)
             } else {
                 symmetryFeatureId = -1
             }
@@ -180,13 +180,13 @@ export async function StructureView(app: App, viewer: Canvas3D, models: Readonly
     function getSymmetryFeatureIds() {
         const symmetryFeatureIds: { id: number, label: string }[] = []
         if (assemblySymmetry) {
-            const symmetryFeatures = assemblySymmetry.getFeatures(assemblyId)
-            for (let i = 0, il = symmetryFeatures._rowCount; i < il; ++i) {
-                const id = symmetryFeatures.id.value(i)
-                const symmetry = symmetryFeatures.symmetry_value.value(i)
-                const type = symmetryFeatures.type.value(i)
-                const stoichiometry = symmetryFeatures.stoichiometry_value.value(i)
-                const label = `${id}: ${symmetry} ${type} ${stoichiometry}`
+            const symmetries = assemblySymmetry.getSymmetries(assemblyId)
+            for (let i = 0, il = symmetries._rowCount; i < il; ++i) {
+                const id = symmetries.id.value(i)
+                const kind = symmetries.kind.value(i)
+                const type = symmetries.type.value(i)
+                const stoichiometry = symmetries.stoichiometry.value(i)
+                const label = `${id}: ${kind} ${type} ${stoichiometry}`
                 symmetryFeatureIds.push({ id, label })
             }
         }
@@ -255,20 +255,15 @@ export async function StructureView(app: App, viewer: Canvas3D, models: Readonly
 
     async function createSymmetryRepr() {
         if (assemblySymmetry) {
-            const features = assemblySymmetry.getFeatures(assemblyId)
-            if (features._rowCount) {
+            const symmetries = assemblySymmetry.getSymmetries(assemblyId)
+            if (symmetries._rowCount) {
                 const axesShape = getAxesShape(symmetryFeatureId, assemblySymmetry)
                 if (axesShape) {
                     // const colorTheme = getClusterColorTheme(symmetryFeatureId, assemblySymmetry)
-                    // await cartoon.createOrUpdate({
-                    //     colorTheme: { name: 'custom', color: colorTheme.color, granularity: colorTheme.granularity },
-                    //     sizeTheme: { name: 'uniform', value: 0.2 },
-                    //     useFog: false // TODO fog not working properly
-                    // }).run()
-                    // await ballAndStick.createOrUpdate({
-                    //     colorTheme:  { name: 'custom', color: colorTheme.color, granularity: colorTheme.granularity },
-                    //     sizeTheme: { name: 'uniform', value: 0.1 },
-                    //     useFog: false // TODO fog not working properly
+                    // await structureRepresentations['cartoon'].createOrUpdate({
+                    //     colorTheme: 'custom',
+                    //     colorFunction: colorTheme.color,
+                    //     colorGranularity: colorTheme.granularity,
                     // }).run()
                     await symmetryAxes.createOrUpdate({}, axesShape).run()
                     viewer.add(symmetryAxes)
diff --git a/src/apps/canvas/util.ts b/src/apps/canvas/util.ts
index 27581f68cbc2fdd956de7d61e04a65da7c21a92c..e9b7dfdf2b61830f00422f6ffd1ae9d3a3404d52 100644
--- a/src/apps/canvas/util.ts
+++ b/src/apps/canvas/util.ts
@@ -43,7 +43,7 @@ export async function getModelsFromMmcif(cif: CifBlock) {
 
 export async function getStructureFromModel(model: Model, assembly: string) {
     const assemblies = model.symmetry.assemblies
-    if (assembly === '0') {
+    if (assembly === 'deposited') {
         return Structure.ofModel(model)
     } else if (assemblies.find(a => a.id === assembly)) {
         return await StructureSymmetry.buildAssembly(Structure.ofModel(model), assembly).run()
diff --git a/src/mol-geo/geometry/color-data.ts b/src/mol-geo/geometry/color-data.ts
index 5b58eef7d09168f7feeaf0713a1eecc5688d737d..457c6a14db1e9fdcae82fa889966685f43852537 100644
--- a/src/mol-geo/geometry/color-data.ts
+++ b/src/mol-geo/geometry/color-data.ts
@@ -10,7 +10,7 @@ import { Color } from 'mol-util/color';
 import { Vec2, Vec3 } from 'mol-math/linear-algebra';
 import { LocationIterator } from '../util/location-iterator';
 import { NullLocation } from 'mol-model/location';
-import { LocationColor, ColorThemeProps, ColorTheme, ColorThemeName } from 'mol-theme/color';
+import { LocationColor, ColorThemeProps, ColorTheme, ColorThemeName, ScaleLegend, TableLegend } from 'mol-theme/color';
 import { RuntimeContext } from 'mol-task';
 import { getGranularity } from './geometry';
 import { Structure } from 'mol-model/structure';
@@ -27,20 +27,25 @@ export type ColorData = {
 
 export interface ColorProps {
     colorTheme: ColorThemeName
+    colorDomain?: [number, number]
     colorValue?: Color
+    colorFunction?: LocationColor,
+    colorGranularity?: ColorType,
+    colorDescription?: string,
+    colorLegend?: ScaleLegend | TableLegend
     structure?: Structure
 }
 
 export function getColorThemeProps(props: ColorProps): ColorThemeProps {
     return {
         name: props.colorTheme,
-        // domain: [number, number],
+        domain: props.colorDomain,
         value: props.colorValue,
         structure: props.structure,
-        // color?: LocationColor,
-        // granularity?: ColorType,
-        // description?: string,
-        // legend?: ScaleLegend | TableLegend
+        color: props.colorFunction,
+        granularity: props.colorGranularity,
+        description: props.colorDescription,
+        legend: props.colorLegend
     }
 }
 
diff --git a/src/mol-math/geometry/symmetry-operator.ts b/src/mol-math/geometry/symmetry-operator.ts
index 86884a935653dd7c49a68632d93e885a93cd3829..88d12323f27647b6921f9d827232f1746729c697 100644
--- a/src/mol-math/geometry/symmetry-operator.ts
+++ b/src/mol-math/geometry/symmetry-operator.ts
@@ -52,7 +52,7 @@ namespace SymmetryOperator {
         return create(name, t);
     }
 
-    // Apply the 1st and then 2nd operator. ( = second.matrix * first.matrix)
+    /** Apply the 1st and then 2nd operator. ( = second.matrix * first.matrix). */
     export function compose(first: SymmetryOperator, second: SymmetryOperator) {
         const matrix = Mat4.mul(Mat4.zero(), second.matrix, first.matrix);
         return create(second.name, matrix, second.hkl);
diff --git a/src/mol-model-props/rcsb/graphql/symmetry.gql.ts b/src/mol-model-props/rcsb/graphql/symmetry.gql.ts
index 264166e3ac2ff8bd808f9b8c887b4114068abaf8..7c9fe867fba16519314ab819357d46675e29225a 100644
--- a/src/mol-model-props/rcsb/graphql/symmetry.gql.ts
+++ b/src/mol-model-props/rcsb/graphql/symmetry.gql.ts
@@ -4,29 +4,28 @@ function gql (strs: TemplateStringsArray) { return strs.raw.join('') }
 export default
 gql`query AssemblySymmetry($pdbId: String!) {
     assemblies(pdbId: $pdbId) {
-        assembly_id
-        rcsb_assembly_symmetry {
-            source
-            symmetry_features {
-                symmetry {
-                    description
-                    value
-                }
-                clusters {
-                    members
-                    avg_rmsd
-                }
-                stoichiometry {
-                    description
-                    value
-                }
-                symmetry_axes {
-                    start
-                    end
-                    order
+        pdbx_struct_assembly {
+            id
+        }
+        rcsb_struct_symmetry {
+            clusters {
+                avg_rmsd
+                members {
+                    asym_id
+                    pdbx_struct_oper_list_ids
                 }
-                type
             }
+            kind
+            oligomeric_state
+            rotation_axes {
+                start
+                end
+                order
+            }
+            stoichiometry
+            symbol
+            type
         }
+        rcsb_struct_symmetry_provenance
     }
 }`
\ No newline at end of file
diff --git a/src/mol-model-props/rcsb/graphql/types.ts b/src/mol-model-props/rcsb/graphql/types.ts
index b97fd46b849b6f387f4ce5c3bb9c68f6d44a7e21..1c89e3aae72dd79fc4dcabb22fd7c9b23ca8a1f9 100644
--- a/src/mol-model-props/rcsb/graphql/types.ts
+++ b/src/mol-model-props/rcsb/graphql/types.ts
@@ -1,18 +1,190 @@
 /* tslint:disable */
-/** Generated in 2018-08-22T17:02:01-07:00 */
+/** Generated in 2018-10-31T12:19:29-07:00 */
 
-export enum PdbxLeavingAtomFlag {
+// ====================================================
+// START: Typescript template
+// ====================================================
+
+// ====================================================
+// Scalars
+// ====================================================
+
+/** Built-in scalar representing an instant in time */
+export type Date = any;
+
+// ====================================================
+// Enums
+// ====================================================
+
+export enum ChemCompPdbxIdealCoordinatesMissingFlag {
   N = "N",
   Y = "Y"
 }
 
-export enum PdbxStereoConfig {
+export enum ChemCompPdbxModelCoordinatesMissingFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum ChemCompPdbxProcessingSite {
+  EBI = "EBI",
+  PDBE = "PDBE",
+  PDBJ = "PDBJ",
+  RCSB = "RCSB"
+}
+
+export enum ChemCompPdbxReleaseStatus {
+  DEL = "DEL",
+  HOLD = "HOLD",
+  HPUB = "HPUB",
+  OBS = "OBS",
+  REF_ONLY = "REF_ONLY",
+  REL = "REL"
+}
+
+export enum ChemCompType {
+  DNA_LINKING = "DNA_LINKING",
+  DNA_OH_3_PRIME_TERMINUS = "DNA_OH_3_PRIME_TERMINUS",
+  DNA_OH_5_PRIME_TERMINUS = "DNA_OH_5_PRIME_TERMINUS",
+  D_BETA_PEPTIDE_C_GAMMA_LINKING = "D_BETA_PEPTIDE_C_GAMMA_LINKING",
+  D_GAMMA_PEPTIDE_C_DELTA_LINKING = "D_GAMMA_PEPTIDE_C_DELTA_LINKING",
+  D_PEPTIDE_COOH_CARBOXY_TERMINUS = "D_PEPTIDE_COOH_CARBOXY_TERMINUS",
+  D_PEPTIDE_LINKING = "D_PEPTIDE_LINKING",
+  D_PEPTIDE_NH_3_AMINO_TERMINUS = "D_PEPTIDE_NH_3_AMINO_TERMINUS",
+  D_SACCHARIDE = "D_SACCHARIDE",
+  D_SACCHARIDE_1_4_AND_1_4_LINKING = "D_SACCHARIDE_1_4_AND_1_4_LINKING",
+  D_SACCHARIDE_1_4_AND_1_6_LINKING = "D_SACCHARIDE_1_4_AND_1_6_LINKING",
+  L_BETA_PEPTIDE_C_GAMMA_LINKING = "L_BETA_PEPTIDE_C_GAMMA_LINKING",
+  L_DNA_LINKING = "L_DNA_LINKING",
+  L_GAMMA_PEPTIDE_C_DELTA_LINKING = "L_GAMMA_PEPTIDE_C_DELTA_LINKING",
+  L_PEPTIDE_COOH_CARBOXY_TERMINUS = "L_PEPTIDE_COOH_CARBOXY_TERMINUS",
+  L_PEPTIDE_LINKING = "L_PEPTIDE_LINKING",
+  L_PEPTIDE_NH_3_AMINO_TERMINUS = "L_PEPTIDE_NH_3_AMINO_TERMINUS",
+  L_RNA_LINKING = "L_RNA_LINKING",
+  L_SACCHARIDE = "L_SACCHARIDE",
+  L_SACCHARIDE_1_4_AND_1_4_LINKING = "L_SACCHARIDE_1_4_AND_1_4_LINKING",
+  L_SACCHARIDE_1_4_AND_1_6_LINKING = "L_SACCHARIDE_1_4_AND_1_6_LINKING",
+  NON_POLYMER = "NON_POLYMER",
+  OTHER = "OTHER",
+  PEPTIDE_LIKE = "PEPTIDE_LIKE",
+  PEPTIDE_LINKING = "PEPTIDE_LINKING",
+  RNA_LINKING = "RNA_LINKING",
+  RNA_OH_3_PRIME_TERMINUS = "RNA_OH_3_PRIME_TERMINUS",
+  RNA_OH_5_PRIME_TERMINUS = "RNA_OH_5_PRIME_TERMINUS",
+  SACCHARIDE = "SACCHARIDE"
+}
+
+export enum ChemCompAtomPdbxAromaticFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum ChemCompAtomPdbxLeavingAtomFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum ChemCompAtomPdbxPolymerType {
+  NON_POLYMER = "NON_POLYMER",
+  POLYMER = "POLYMER"
+}
+
+export enum ChemCompAtomPdbxStereoConfig {
   N = "N",
   R = "R",
   S = "S"
 }
 
-export enum ExperimentalSupport {
+export enum ChemCompBondPdbxAromaticFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum ChemCompBondPdbxStereoConfig {
+  E = "E",
+  N = "N",
+  Z = "Z"
+}
+
+export enum ChemCompBondValueOrder {
+  AROM = "AROM",
+  DELO = "DELO",
+  DOUB = "DOUB",
+  PI = "PI",
+  POLY = "POLY",
+  QUAD = "QUAD",
+  SING = "SING",
+  TRIP = "TRIP"
+}
+
+export enum PdbxChemCompAuditActionType {
+  CREATE_COMPONENT = "CREATE_COMPONENT",
+  INITIAL_RELEASE = "INITIAL_RELEASE",
+  MODIFY_AROMATIC_FLAG = "MODIFY_AROMATIC_FLAG",
+  MODIFY_ATOM_ID = "MODIFY_ATOM_ID",
+  MODIFY_CHARGE = "MODIFY_CHARGE",
+  MODIFY_COMPONENT_ATOM_ID = "MODIFY_COMPONENT_ATOM_ID",
+  MODIFY_COMPONENT_COMP_ID = "MODIFY_COMPONENT_COMP_ID",
+  MODIFY_COORDINATES = "MODIFY_COORDINATES",
+  MODIFY_DESCRIPTOR = "MODIFY_DESCRIPTOR",
+  MODIFY_FORMAL_CHARGE = "MODIFY_FORMAL_CHARGE",
+  MODIFY_FORMULA = "MODIFY_FORMULA",
+  MODIFY_IDENTIFIER = "MODIFY_IDENTIFIER",
+  MODIFY_INTERNAL_TYPE = "MODIFY_INTERNAL_TYPE",
+  MODIFY_LEAVING_ATOM_FLAG = "MODIFY_LEAVING_ATOM_FLAG",
+  MODIFY_LINKING_TYPE = "MODIFY_LINKING_TYPE",
+  MODIFY_MODEL_COORDINATES_CODE = "MODIFY_MODEL_COORDINATES_CODE",
+  MODIFY_NAME = "MODIFY_NAME",
+  MODIFY_ONE_LETTER_CODE = "MODIFY_ONE_LETTER_CODE",
+  MODIFY_PARENT_RESIDUE = "MODIFY_PARENT_RESIDUE",
+  MODIFY_PROCESSING_SITE = "MODIFY_PROCESSING_SITE",
+  MODIFY_SUBCOMPONENT_LIST = "MODIFY_SUBCOMPONENT_LIST",
+  MODIFY_SYNONYMS = "MODIFY_SYNONYMS",
+  MODIFY_VALUE_ORDER = "MODIFY_VALUE_ORDER",
+  OBSOLETE_COMPONENT = "OBSOLETE_COMPONENT",
+  OTHER_MODIFICATION = "OTHER_MODIFICATION"
+}
+
+export enum PdbxChemCompDescriptorType {
+  IN_CH_I = "IN_CH_I",
+  IN_CH_I_CHARGE = "IN_CH_I_CHARGE",
+  IN_CH_I_FIXEDH = "IN_CH_I_FIXEDH",
+  IN_CH_I_ISOTOPE = "IN_CH_I_ISOTOPE",
+  IN_CH_I_KEY = "IN_CH_I_KEY",
+  IN_CH_I_MAIN = "IN_CH_I_MAIN",
+  IN_CH_I_MAIN_CONNECT = "IN_CH_I_MAIN_CONNECT",
+  IN_CH_I_MAIN_FORMULA = "IN_CH_I_MAIN_FORMULA",
+  IN_CH_I_MAIN_HATOM = "IN_CH_I_MAIN_HATOM",
+  IN_CH_I_RECONNECT = "IN_CH_I_RECONNECT",
+  IN_CH_I_STEREO = "IN_CH_I_STEREO",
+  SMILES = "SMILES",
+  SMILES_CANNONICAL = "SMILES_CANNONICAL",
+  SMILES_CANONICAL = "SMILES_CANONICAL"
+}
+
+export enum PdbxChemCompIdentifierType {
+  CAS_REGISTRY_NUMBER = "CAS_REGISTRY_NUMBER",
+  COMMON_NAME = "COMMON_NAME",
+  CONDENSED_IUPAC_CARB_NAME = "CONDENSED_IUPAC_CARB_NAME",
+  IUPAC_CARB_NAME = "IUPAC_CARB_NAME",
+  MDL_IDENTIFIER = "MDL_IDENTIFIER",
+  PUBCHEM_IDENTIFIER = "PUBCHEM_IDENTIFIER",
+  SYNONYM = "SYNONYM",
+  SYSTEMATIC_NAME = "SYSTEMATIC_NAME"
+}
+
+export enum PdbxStructAssemblyRcsbCandidateAssembly {
+  N = "N",
+  Y = "Y"
+}
+
+export enum PdbxStructAssemblyRcsbDetails {
+  AUTHOR_AND_SOFTWARE_DEFINED_ASSEMBLY = "AUTHOR_AND_SOFTWARE_DEFINED_ASSEMBLY",
+  AUTHOR_DEFINED_ASSEMBLY = "AUTHOR_DEFINED_ASSEMBLY",
+  SOFTWARE_DEFINED_ASSEMBLY = "SOFTWARE_DEFINED_ASSEMBLY"
+}
+
+export enum PdbxStructAssemblyAuthEvidenceExperimentalSupport {
   ASSAY_FOR_OLIGOMERIZATION = "ASSAY_FOR_OLIGOMERIZATION",
   CROSS_LINKING = "CROSS_LINKING",
   EQUILIBRIUM_CENTRIFUGATION = "EQUILIBRIUM_CENTRIFUGATION",
@@ -31,41 +203,124 @@ export enum ExperimentalSupport {
   SURFACE_PLASMON_RESONANCE = "SURFACE_PLASMON_RESONANCE"
 }
 
-export enum SymmetryFeatureType {
+export enum PdbxStructAssemblyPropType {
+  ABSA_A_2 = "ABSA_A_2",
+  MORE = "MORE",
+  SSA_A_2 = "SSA_A_2"
+}
+
+export enum PdbxStructOperListType {
+  BUILD_2_D_CRYSTAL_ASYMMETRIC_UNIT = "BUILD_2_D_CRYSTAL_ASYMMETRIC_UNIT",
+  BUILD_3_D_CRYSTAL_ASYMMETRIC_UNIT = "BUILD_3_D_CRYSTAL_ASYMMETRIC_UNIT",
+  BUILD_HELICAL_ASYMMETRIC_UNIT = "BUILD_HELICAL_ASYMMETRIC_UNIT",
+  BUILD_POINT_ASYMMETRIC_UNIT = "BUILD_POINT_ASYMMETRIC_UNIT",
+  CRYSTAL_SYMMETRY_OPERATION = "CRYSTAL_SYMMETRY_OPERATION",
+  HELICAL_SYMMETRY_OPERATION = "HELICAL_SYMMETRY_OPERATION",
+  IDENTITY_OPERATION = "IDENTITY_OPERATION",
+  POINT_SYMMETRY_OPERATION = "POINT_SYMMETRY_OPERATION",
+  TRANSFORM_TO_2_D_CRYSTAL_FRAME = "TRANSFORM_TO_2_D_CRYSTAL_FRAME",
+  TRANSFORM_TO_3_D_CRYSTAL_FRAME = "TRANSFORM_TO_3_D_CRYSTAL_FRAME",
+  TRANSFORM_TO_CRYSTAL_FRAME = "TRANSFORM_TO_CRYSTAL_FRAME",
+  TRANSFORM_TO_HELICAL_FRAME = "TRANSFORM_TO_HELICAL_FRAME",
+  TRANSFORM_TO_POINT_FRAME = "TRANSFORM_TO_POINT_FRAME",
+  _2_D_CRYSTAL_SYMMETRY_OPERATION = "_2_D_CRYSTAL_SYMMETRY_OPERATION",
+  _3_D_CRYSTAL_SYMMETRY_OPERATION = "_3_D_CRYSTAL_SYMMETRY_OPERATION"
+}
+
+export enum RcsbStructSymmetryKind {
   GLOBAL = "GLOBAL",
   LOCAL = "LOCAL",
   PSEUDO = "PSEUDO"
 }
 
-export enum UnpublishedFlag {
+export enum RcsbStructSymmetryType {
+  ASYMMETRIC = "ASYMMETRIC",
+  CYCLIC = "CYCLIC",
+  DIHEDRAL = "DIHEDRAL",
+  HELICAL = "HELICAL",
+  ICOSAHEDRAL = "ICOSAHEDRAL",
+  OCTAHEDRAL = "OCTAHEDRAL",
+  TETRAHEDRAL = "TETRAHEDRAL"
+}
+
+export enum CitationCoordinateLinkage {
+  N = "N",
+  NO = "NO",
+  Y = "Y",
+  YES = "YES"
+}
+
+export enum CitationUnpublishedFlag {
   N = "N",
   Y = "Y"
 }
 
-export enum PdbxMonochromaticOrLaueMl {
+export enum DiffrnRadiationPdbxMonochromaticOrLaueMl {
   L = "L",
   M = "M"
 }
 
-export enum PdbxScatteringType {
+export enum DiffrnRadiationPdbxScatteringType {
   ELECTRON = "ELECTRON",
   NEUTRON = "NEUTRON",
   X_RAY = "X_RAY"
 }
 
-export enum RefSpace {
+export enum Em2dCrystalEntitySpaceGroupNameHm {
+  C_1_2 = "C_1_2",
+  C_2_2_2 = "C_2_2_2",
+  P_1 = "P_1",
+  P_1_2 = "P_1_2",
+  P_1_21 = "P_1_21",
+  P_2 = "P_2",
+  P_2_21_21 = "P_2_21_21",
+  P_2_2_2 = "P_2_2_2",
+  P_2_2_21 = "P_2_2_21",
+  P_3 = "P_3",
+  P_3_1_2 = "P_3_1_2",
+  P_3_2_1 = "P_3_2_1",
+  P_4 = "P_4",
+  P_4_21_2 = "P_4_21_2",
+  P_4_2_2 = "P_4_2_2",
+  P_6 = "P_6",
+  P_6_2_2 = "P_6_2_2"
+}
+
+export enum Em3dFittingRefProtocol {
+  AB_INITIO_MODEL = "AB_INITIO_MODEL",
+  BACKBONE_TRACE = "BACKBONE_TRACE",
+  FLEXIBLE_FIT = "FLEXIBLE_FIT",
+  OTHER = "OTHER",
+  RIGID_BODY_FIT = "RIGID_BODY_FIT"
+}
+
+export enum Em3dFittingRefSpace {
   REAL = "REAL",
   RECIPROCAL = "RECIPROCAL"
 }
 
-export enum SymmetryType {
+export enum Em3dReconstructionRefinementType {
+  HALF_MAPS_REFINED_AGAINST_SAME_DATA = "HALF_MAPS_REFINED_AGAINST_SAME_DATA",
+  HALF_MAPS_REFINED_INDEPENDENTLY = "HALF_MAPS_REFINED_INDEPENDENTLY",
+  HALF_MAPS_REFINED_INDEPENDENTLY_WITH_FREQUENCY_RANGE_OMITTED = "HALF_MAPS_REFINED_INDEPENDENTLY_WITH_FREQUENCY_RANGE_OMITTED",
+  HALF_MAPS_REFINED_WITH_FREQUENCY_RANGE_OMITTED = "HALF_MAPS_REFINED_WITH_FREQUENCY_RANGE_OMITTED",
+  OTHER = "OTHER"
+}
+
+export enum Em3dReconstructionSymmetryType {
   HELICAL = "HELICAL",
   POINT = "POINT",
   _2_D_CRYSTAL = "_2_D_CRYSTAL",
   _3_D_CRYSTAL = "_3_D_CRYSTAL"
 }
 
-export enum AggregationState {
+export enum EmEntityAssemblySource {
+  MULTIPLE_SOURCES = "MULTIPLE_SOURCES",
+  NATURAL = "NATURAL",
+  RECOMBINANT = "RECOMBINANT"
+}
+
+export enum EmExperimentAggregationState {
   CELL = "CELL",
   FILAMENT = "FILAMENT",
   HELICAL_ARRAY = "HELICAL_ARRAY",
@@ -75,7 +330,7 @@ export enum AggregationState {
   _3_D_ARRAY = "_3_D_ARRAY"
 }
 
-export enum ReconstructionMethod {
+export enum EmExperimentReconstructionMethod {
   CRYSTALLOGRAPHY = "CRYSTALLOGRAPHY",
   HELICAL = "HELICAL",
   SINGLE_PARTICLE = "SINGLE_PARTICLE",
@@ -83,40 +338,244 @@ export enum ReconstructionMethod {
   TOMOGRAPHY = "TOMOGRAPHY"
 }
 
-export enum EmbeddingApplied {
+export enum EmImageRecordingDetectorMode {
+  COUNTING = "COUNTING",
+  INTEGRATING = "INTEGRATING",
+  OTHER = "OTHER",
+  SUPER_RESOLUTION = "SUPER_RESOLUTION"
+}
+
+export enum EmImagingAlignmentProcedure {
+  BASIC = "BASIC",
+  COMA_FREE = "COMA_FREE",
+  NONE = "NONE",
+  OTHER = "OTHER",
+  ZEMLIN_TABLEAU = "ZEMLIN_TABLEAU"
+}
+
+export enum EmImagingCryogen {
+  HELIUM = "HELIUM",
+  NITROGEN = "NITROGEN"
+}
+
+export enum EmImagingIlluminationMode {
+  FLOOD_BEAM = "FLOOD_BEAM",
+  OTHER = "OTHER",
+  SPOT_SCAN = "SPOT_SCAN"
+}
+
+export enum EmImagingMicroscopeModel {
+  FEI_MORGAGNI = "FEI_MORGAGNI",
+  FEI_PHILIPS_CM_10 = "FEI_PHILIPS_CM_10",
+  FEI_PHILIPS_CM_12 = "FEI_PHILIPS_CM_12",
+  FEI_PHILIPS_CM_120_T = "FEI_PHILIPS_CM_120_T",
+  FEI_PHILIPS_CM_200_FEG = "FEI_PHILIPS_CM_200_FEG",
+  FEI_PHILIPS_CM_200_FEG_SOPHIE = "FEI_PHILIPS_CM_200_FEG_SOPHIE",
+  FEI_PHILIPS_CM_200_FEG_ST = "FEI_PHILIPS_CM_200_FEG_ST",
+  FEI_PHILIPS_CM_200_FEG_UT = "FEI_PHILIPS_CM_200_FEG_UT",
+  FEI_PHILIPS_CM_200_T = "FEI_PHILIPS_CM_200_T",
+  FEI_PHILIPS_CM_300_FEG_HE = "FEI_PHILIPS_CM_300_FEG_HE",
+  FEI_PHILIPS_CM_300_FEG_ST = "FEI_PHILIPS_CM_300_FEG_ST",
+  FEI_PHILIPS_CM_300_FEG_T = "FEI_PHILIPS_CM_300_FEG_T",
+  FEI_PHILIPS_EM_400 = "FEI_PHILIPS_EM_400",
+  FEI_PHILIPS_EM_420 = "FEI_PHILIPS_EM_420",
+  FEI_POLARA_300 = "FEI_POLARA_300",
+  FEI_TALOS_ARCTICA = "FEI_TALOS_ARCTICA",
+  FEI_TECNAI_10 = "FEI_TECNAI_10",
+  FEI_TECNAI_12 = "FEI_TECNAI_12",
+  FEI_TECNAI_20 = "FEI_TECNAI_20",
+  FEI_TECNAI_ARCTICA = "FEI_TECNAI_ARCTICA",
+  FEI_TECNAI_F_20 = "FEI_TECNAI_F_20",
+  FEI_TECNAI_F_30 = "FEI_TECNAI_F_30",
+  FEI_TECNAI_SPHERA = "FEI_TECNAI_SPHERA",
+  FEI_TECNAI_SPIRIT = "FEI_TECNAI_SPIRIT",
+  FEI_TITAN = "FEI_TITAN",
+  FEI_TITAN_KRIOS = "FEI_TITAN_KRIOS",
+  HITACHI_EF_2000 = "HITACHI_EF_2000",
+  HITACHI_EF_3000 = "HITACHI_EF_3000",
+  HITACHI_HF_2000 = "HITACHI_HF_2000",
+  HITACHI_HF_3000 = "HITACHI_HF_3000",
+  HITACHI_H_7600 = "HITACHI_H_7600",
+  HITACHI_H_9500_SD = "HITACHI_H_9500_SD",
+  JEOL_100_B = "JEOL_100_B",
+  JEOL_100_CX = "JEOL_100_CX",
+  JEOL_1010 = "JEOL_1010",
+  JEOL_1200 = "JEOL_1200",
+  JEOL_1200_EX = "JEOL_1200_EX",
+  JEOL_1200_EXII = "JEOL_1200_EXII",
+  JEOL_1230 = "JEOL_1230",
+  JEOL_1400 = "JEOL_1400",
+  JEOL_2000_EX = "JEOL_2000_EX",
+  JEOL_2000_EXII = "JEOL_2000_EXII",
+  JEOL_2010 = "JEOL_2010",
+  JEOL_2010_F = "JEOL_2010_F",
+  JEOL_2010_HC = "JEOL_2010_HC",
+  JEOL_2010_HT = "JEOL_2010_HT",
+  JEOL_2010_UHR = "JEOL_2010_UHR",
+  JEOL_2011 = "JEOL_2011",
+  JEOL_2100 = "JEOL_2100",
+  JEOL_2100_F = "JEOL_2100_F",
+  JEOL_2200_FS = "JEOL_2200_FS",
+  JEOL_2200_FSC = "JEOL_2200_FSC",
+  JEOL_3000_SFF = "JEOL_3000_SFF",
+  JEOL_3100_FEF = "JEOL_3100_FEF",
+  JEOL_3100_FFC = "JEOL_3100_FFC",
+  JEOL_3200_FS = "JEOL_3200_FS",
+  JEOL_3200_FSC = "JEOL_3200_FSC",
+  JEOL_4000 = "JEOL_4000",
+  JEOL_4000_EX = "JEOL_4000_EX",
+  JEOL_CRYO_ARM_200 = "JEOL_CRYO_ARM_200",
+  JEOL_CRYO_ARM_300 = "JEOL_CRYO_ARM_300",
+  JEOL_KYOTO_3000_SFF = "JEOL_KYOTO_3000_SFF",
+  SIEMENS_SULEIKA = "SIEMENS_SULEIKA",
+  ZEISS_LEO_912 = "ZEISS_LEO_912",
+  ZEISS_LIBRA_120_PLUS = "ZEISS_LIBRA_120_PLUS"
+}
+
+export enum EmImagingMode {
+  BRIGHT_FIELD = "BRIGHT_FIELD",
+  DARK_FIELD = "DARK_FIELD",
+  DIFFRACTION = "DIFFRACTION",
+  OTHER = "OTHER"
+}
+
+export enum EmImagingSpecimenHolderModel {
+  FEI_TITAN_KRIOS_AUTOGRID_HOLDER = "FEI_TITAN_KRIOS_AUTOGRID_HOLDER",
+  FISCHIONE_INSTRUMENTS_DUAL_AXIS_TOMOGRAPHY_HOLDER = "FISCHIONE_INSTRUMENTS_DUAL_AXIS_TOMOGRAPHY_HOLDER",
+  GATAN_626_SINGLE_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER = "GATAN_626_SINGLE_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER",
+  GATAN_910_MULTI_SPECIMEN_SINGLE_TILT_CRYO_TRANSFER_HOLDER = "GATAN_910_MULTI_SPECIMEN_SINGLE_TILT_CRYO_TRANSFER_HOLDER",
+  GATAN_914_HIGH_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_TOMOGRAPHY_HOLDER = "GATAN_914_HIGH_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_TOMOGRAPHY_HOLDER",
+  GATAN_915_DOUBLE_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER = "GATAN_915_DOUBLE_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER",
+  GATAN_CHDT_3504_DOUBLE_TILT_HIGH_RESOLUTION_NITROGEN_COOLING_HOLDER = "GATAN_CHDT_3504_DOUBLE_TILT_HIGH_RESOLUTION_NITROGEN_COOLING_HOLDER",
+  GATAN_CT_3500_SINGLE_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER = "GATAN_CT_3500_SINGLE_TILT_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER",
+  GATAN_CT_3500_TR_SINGLE_TILT_ROTATION_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER = "GATAN_CT_3500_TR_SINGLE_TILT_ROTATION_LIQUID_NITROGEN_CRYO_TRANSFER_HOLDER",
+  GATAN_HCHDT_3010_DOUBLE_TILT_HIGH_RESOLUTION_HELIUM_COOLING_HOLDER = "GATAN_HCHDT_3010_DOUBLE_TILT_HIGH_RESOLUTION_HELIUM_COOLING_HOLDER",
+  GATAN_HCHST_3008_SINGLE_TILT_HIGH_RESOLUTION_HELIUM_COOLING_HOLDER = "GATAN_HCHST_3008_SINGLE_TILT_HIGH_RESOLUTION_HELIUM_COOLING_HOLDER",
+  GATAN_HC_3500_SINGLE_TILT_HEATING_NITROGEN_COOLING_HOLDER = "GATAN_HC_3500_SINGLE_TILT_HEATING_NITROGEN_COOLING_HOLDER",
+  GATAN_HELIUM = "GATAN_HELIUM",
+  GATAN_LIQUID_NITROGEN = "GATAN_LIQUID_NITROGEN",
+  GATAN_UHRST_3500_SINGLE_TILT_ULTRA_HIGH_RESOLUTION_NITROGEN_COOLING_HOLDER = "GATAN_UHRST_3500_SINGLE_TILT_ULTRA_HIGH_RESOLUTION_NITROGEN_COOLING_HOLDER",
+  GATAN_ULTDT_ULTRA_LOW_TEMPERATURE_DOUBLE_TILT_HELIUM_COOLING_HOLDER = "GATAN_ULTDT_ULTRA_LOW_TEMPERATURE_DOUBLE_TILT_HELIUM_COOLING_HOLDER",
+  GATAN_ULTST_ULTRA_LOW_TEMPERATURE_SINGLE_TILT_HELIUM_COOLING_HOLDER = "GATAN_ULTST_ULTRA_LOW_TEMPERATURE_SINGLE_TILT_HELIUM_COOLING_HOLDER",
+  HOME_BUILD = "HOME_BUILD",
+  JEOL = "JEOL",
+  JEOL_3200_FSC_CRYOHOLDER = "JEOL_3200_FSC_CRYOHOLDER",
+  JEOL_CRYOSPECPORTER = "JEOL_CRYOSPECPORTER",
+  OTHER = "OTHER",
+  PHILIPS_ROTATION_HOLDER = "PHILIPS_ROTATION_HOLDER",
+  SIDE_ENTRY_EUCENTRIC = "SIDE_ENTRY_EUCENTRIC"
+}
+
+export enum EmSoftwareCategory {
+  CLASSIFICATION = "CLASSIFICATION",
+  CRYSTALLOGRAPHY_MERGING = "CRYSTALLOGRAPHY_MERGING",
+  CTF_CORRECTION = "CTF_CORRECTION",
+  DIFFRACTION_INDEXING = "DIFFRACTION_INDEXING",
+  FINAL_EULER_ASSIGNMENT = "FINAL_EULER_ASSIGNMENT",
+  IMAGE_ACQUISITION = "IMAGE_ACQUISITION",
+  INITIAL_EULER_ASSIGNMENT = "INITIAL_EULER_ASSIGNMENT",
+  LATTICE_DISTORTION_CORRECTION = "LATTICE_DISTORTION_CORRECTION",
+  LAYERLINE_INDEXING = "LAYERLINE_INDEXING",
+  MASKING = "MASKING",
+  MODEL_FITTING = "MODEL_FITTING",
+  MODEL_REFINEMENT = "MODEL_REFINEMENT",
+  MOLECULAR_REPLACEMENT = "MOLECULAR_REPLACEMENT",
+  OTHER = "OTHER",
+  PARTICLE_SELECTION = "PARTICLE_SELECTION",
+  RECONSTRUCTION = "RECONSTRUCTION",
+  SERIES_ALIGNMENT = "SERIES_ALIGNMENT",
+  SYMMETRY_DETERMINATION = "SYMMETRY_DETERMINATION",
+  VOLUME_SELECTION = "VOLUME_SELECTION"
+}
+
+export enum EmSpecimenEmbeddingApplied {
+  NO = "NO",
+  YES = "YES"
+}
+
+export enum EmSpecimenShadowingApplied {
   NO = "NO",
   YES = "YES"
 }
 
-export enum StainingApplied {
+export enum EmSpecimenStainingApplied {
   NO = "NO",
   YES = "YES"
 }
 
-export enum VitrificationApplied {
+export enum EmSpecimenVitrificationApplied {
   NO = "NO",
   YES = "YES"
 }
 
-export enum Type {
+export enum EmStainingType {
   NEGATIVE = "NEGATIVE",
   NONE = "NONE",
   POSITIVE = "POSITIVE"
 }
 
-export enum SrcMethod {
+export enum EmVitrificationCryogenName {
+  ETHANE = "ETHANE",
+  ETHANE_PROPANE = "ETHANE_PROPANE",
+  FREON_12 = "FREON_12",
+  FREON_22 = "FREON_22",
+  HELIUM = "HELIUM",
+  METHANE = "METHANE",
+  NITROGEN = "NITROGEN",
+  OTHER = "OTHER",
+  PROPANE = "PROPANE"
+}
+
+export enum EmVitrificationInstrument {
+  EMS_002_RAPID_IMMERSION_FREEZER = "EMS_002_RAPID_IMMERSION_FREEZER",
+  FEI_VITROBOT_MARK_I = "FEI_VITROBOT_MARK_I",
+  FEI_VITROBOT_MARK_II = "FEI_VITROBOT_MARK_II",
+  FEI_VITROBOT_MARK_III = "FEI_VITROBOT_MARK_III",
+  FEI_VITROBOT_MARK_IV = "FEI_VITROBOT_MARK_IV",
+  GATAN_CRYOPLUNGE_3 = "GATAN_CRYOPLUNGE_3",
+  HOMEMADE_PLUNGER = "HOMEMADE_PLUNGER",
+  LEICA_EM_CPC = "LEICA_EM_CPC",
+  LEICA_EM_GP = "LEICA_EM_GP",
+  LEICA_KF_80 = "LEICA_KF_80",
+  LEICA_PLUNGER = "LEICA_PLUNGER",
+  REICHERT_JUNG_PLUNGER = "REICHERT_JUNG_PLUNGER",
+  SPOTITON = "SPOTITON",
+  ZEISS_PLUNGE_FREEZER_CRYOBOX = "ZEISS_PLUNGE_FREEZER_CRYOBOX"
+}
+
+export enum EntityRcsbMultipleSourceFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum EntitySrcMethod {
   MAN = "MAN",
   NAT = "NAT",
   SYN = "SYN"
 }
 
 export enum EntityType {
+  BRANCHED = "BRANCHED",
   MACROLIDE = "MACROLIDE",
   NON_POLYMER = "NON_POLYMER",
   POLYMER = "POLYMER",
   WATER = "WATER"
 }
 
+export enum EntityPolyNstdLinkage {
+  N = "N",
+  NO = "NO",
+  Y = "Y",
+  YES = "YES"
+}
+
+export enum EntityPolyNstdMonomer {
+  N = "N",
+  NO = "NO",
+  Y = "Y",
+  YES = "YES"
+}
+
 export enum EntityPolyType {
   CYCLIC_PSEUDO_PEPTIDE = "CYCLIC_PSEUDO_PEPTIDE",
   OTHER = "OTHER",
@@ -130,40 +589,614 @@ export enum EntityPolyType {
   POLYSACCHARIDE_L = "POLYSACCHARIDE_L"
 }
 
-export enum RcsbHostOrganismSource {
-  MMCIF = "MMCIF",
-  NCBI = "NCBI",
-  UNIPROT = "UNIPROT"
+export enum EntitySrcGenPdbxAltSourceFlag {
+  MODEL = "MODEL",
+  SAMPLE = "SAMPLE"
+}
+
+export enum EntitySrcGenPdbxSeqType {
+  BIOLOGICAL_SEQUENCE = "BIOLOGICAL_SEQUENCE",
+  C_TERMINAL_TAG = "C_TERMINAL_TAG",
+  LINKER = "LINKER",
+  N_TERMINAL_TAG = "N_TERMINAL_TAG"
 }
 
-export enum RcsbMembraneSource {
+export enum EntitySrcNatPdbxAltSourceFlag {
+  MODEL = "MODEL",
+  SAMPLE = "SAMPLE"
+}
+
+export enum PdbxEntitySrcSynPdbxAltSourceFlag {
+  MODEL = "MODEL",
+  SAMPLE = "SAMPLE"
+}
+
+export enum RcsbEntityHostOrganismProvenanceCode {
+  PDB_PRIMARY_DATA = "PDB_PRIMARY_DATA"
+}
+
+export enum RcsbEntitySourceOrganismProvenanceCode {
+  PDB_PRIMARY_DATA = "PDB_PRIMARY_DATA"
+}
+
+export enum RcsbEntitySourceOrganismSourceType {
+  GENETICALLY_ENGINEERED = "GENETICALLY_ENGINEERED",
+  NATURAL = "NATURAL",
+  SYNTHETIC = "SYNTHETIC"
+}
+
+export enum RcsbMembraneProvenanceSource {
   HOMOLOGY = "HOMOLOGY",
   MPSTRUCT = "MPSTRUCT"
 }
 
-export enum RcsbOrganismSource {
-  MMCIF = "MMCIF",
-  NCBI = "NCBI",
-  UNIPROT = "UNIPROT"
+export enum StructAsymPdbxBlankPdbChainidFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum FeatureType {
+  ACTIVE_SITE = "ACTIVE_SITE",
+  BINDING_SITE = "BINDING_SITE",
+  CALCIUM_BINDING_REGION = "CALCIUM_BINDING_REGION",
+  CHAIN = "CHAIN",
+  COILED_COIL_REGION = "COILED_COIL_REGION",
+  COMPOSITIONALLY_BIASED_REGION = "COMPOSITIONALLY_BIASED_REGION",
+  CROSS_LINK = "CROSS_LINK",
+  DISULFIDE_BOND = "DISULFIDE_BOND",
+  DNA_BINDING_REGION = "DNA_BINDING_REGION",
+  DOMAIN = "DOMAIN",
+  GLYCOSYLATION_SITE = "GLYCOSYLATION_SITE",
+  HELIX = "HELIX",
+  INITIATOR_METHIONINE = "INITIATOR_METHIONINE",
+  INTRAMEMBRANE_REGION = "INTRAMEMBRANE_REGION",
+  LIPID_MOIETY_BINDING_REGION = "LIPID_MOIETY_BINDING_REGION",
+  METAL_ION_BINDING_SITE = "METAL_ION_BINDING_SITE",
+  MODIFIED_RESIDUE = "MODIFIED_RESIDUE",
+  MUTAGENESIS_SITE = "MUTAGENESIS_SITE",
+  NON_CONSECUTIVE_RESIDUES = "NON_CONSECUTIVE_RESIDUES",
+  NON_STANDARD_AMINO_ACID = "NON_STANDARD_AMINO_ACID",
+  NON_TERMINAL_RESIDUE = "NON_TERMINAL_RESIDUE",
+  NUCLEOTIDE_PHOSPHATE_BINDING_REGION = "NUCLEOTIDE_PHOSPHATE_BINDING_REGION",
+  PEPTIDE = "PEPTIDE",
+  PROPEPTIDE = "PROPEPTIDE",
+  REGION_OF_INTEREST = "REGION_OF_INTEREST",
+  REPEAT = "REPEAT",
+  SEQUENCE_CONFLICT = "SEQUENCE_CONFLICT",
+  SEQUENCE_VARIANT = "SEQUENCE_VARIANT",
+  SHORT_SEQUENCE_MOTIF = "SHORT_SEQUENCE_MOTIF",
+  SIGNAL_PEPTIDE = "SIGNAL_PEPTIDE",
+  SITE = "SITE",
+  SPLICE_VARIANT = "SPLICE_VARIANT",
+  STRAND = "STRAND",
+  TOPOLOGICAL_DOMAIN = "TOPOLOGICAL_DOMAIN",
+  TRANSIT_PEPTIDE = "TRANSIT_PEPTIDE",
+  TRANSMEMBRANE_REGION = "TRANSMEMBRANE_REGION",
+  TURN = "TURN",
+  UNSURE_RESIDUE = "UNSURE_RESIDUE",
+  ZINC_FINGER_REGION = "ZINC_FINGER_REGION"
+}
+
+export enum GeneNameType {
+  ORDERED_LOCUS = "ORDERED_LOCUS",
+  ORF = "ORF",
+  PRIMARY = "PRIMARY",
+  SYNONYM = "SYNONYM"
+}
+
+export enum OrganismNameType {
+  ABBREVIATION = "ABBREVIATION",
+  COMMON = "COMMON",
+  FULL = "FULL",
+  SCIENTIFIC = "SCIENTIFIC",
+  SYNONYM = "SYNONYM"
+}
+
+export enum OrganismHostNameType {
+  ABBREVIATION = "ABBREVIATION",
+  COMMON = "COMMON",
+  FULL = "FULL",
+  SCIENTIFIC = "SCIENTIFIC",
+  SYNONYM = "SYNONYM"
+}
+
+export enum ExptlMethod {
+  ELECTRON_CRYSTALLOGRAPHY = "ELECTRON_CRYSTALLOGRAPHY",
+  ELECTRON_MICROSCOPY = "ELECTRON_MICROSCOPY",
+  EPR = "EPR",
+  FIBER_DIFFRACTION = "FIBER_DIFFRACTION",
+  FLUORESCENCE_TRANSFER = "FLUORESCENCE_TRANSFER",
+  INFRARED_SPECTROSCOPY = "INFRARED_SPECTROSCOPY",
+  NEUTRON_DIFFRACTION = "NEUTRON_DIFFRACTION",
+  POWDER_DIFFRACTION = "POWDER_DIFFRACTION",
+  SOLID_STATE_NMR = "SOLID_STATE_NMR",
+  SOLUTION_NMR = "SOLUTION_NMR",
+  SOLUTION_SCATTERING = "SOLUTION_SCATTERING",
+  THEORETICAL_MODEL = "THEORETICAL_MODEL",
+  X_RAY_DIFFRACTION = "X_RAY_DIFFRACTION"
+}
+
+export enum PdbxSgProjectFullNameOfCenter {
+  ACCELERATED_TECHNOLOGIES_CENTER_FOR_GENE_TO_3_D_STRUCTURE = "ACCELERATED_TECHNOLOGIES_CENTER_FOR_GENE_TO_3_D_STRUCTURE",
+  ASSEMBLY_DYNAMICS_AND_EVOLUTION_OF_CELL_CELL_AND_CELL_MATRIX_ADHESIONS = "ASSEMBLY_DYNAMICS_AND_EVOLUTION_OF_CELL_CELL_AND_CELL_MATRIX_ADHESIONS",
+  ATOMS_TO_ANIMALS_THE_IMMUNE_FUNCTION_NETWORK = "ATOMS_TO_ANIMALS_THE_IMMUNE_FUNCTION_NETWORK",
+  BACTERIAL_TARGETS_AT_IGS_CNRS_FRANCE = "BACTERIAL_TARGETS_AT_IGS_CNRS_FRANCE",
+  BERKELEY_STRUCTURAL_GENOMICS_CENTER = "BERKELEY_STRUCTURAL_GENOMICS_CENTER",
+  CENTER_FOR_EUKARYOTIC_STRUCTURAL_GENOMICS = "CENTER_FOR_EUKARYOTIC_STRUCTURAL_GENOMICS",
+  CENTER_FOR_HIGH_THROUGHPUT_STRUCTURAL_BIOLOGY = "CENTER_FOR_HIGH_THROUGHPUT_STRUCTURAL_BIOLOGY",
+  CENTER_FOR_MEMBRANE_PROTEINS_OF_INFECTIOUS_DISEASES = "CENTER_FOR_MEMBRANE_PROTEINS_OF_INFECTIOUS_DISEASES",
+  CENTER_FOR_STRUCTURAL_GENOMICS_OF_INFECTIOUS_DISEASES = "CENTER_FOR_STRUCTURAL_GENOMICS_OF_INFECTIOUS_DISEASES",
+  CENTER_FOR_STRUCTURES_OF_MEMBRANE_PROTEINS = "CENTER_FOR_STRUCTURES_OF_MEMBRANE_PROTEINS",
+  CENTER_FOR_THE_X_RAY_STRUCTURE_DETERMINATION_OF_HUMAN_TRANSPORTERS = "CENTER_FOR_THE_X_RAY_STRUCTURE_DETERMINATION_OF_HUMAN_TRANSPORTERS",
+  CHAPERONE_ENABLED_STUDIES_OF_EPIGENETIC_REGULATION_ENZYMES = "CHAPERONE_ENABLED_STUDIES_OF_EPIGENETIC_REGULATION_ENZYMES",
+  ENZYME_DISCOVERY_FOR_NATURAL_PRODUCT_BIOSYNTHESIS = "ENZYME_DISCOVERY_FOR_NATURAL_PRODUCT_BIOSYNTHESIS",
+  GPCR_NETWORK = "GPCR_NETWORK",
+  INTEGRATED_CENTER_FOR_STRUCTURE_AND_FUNCTION_INNOVATION = "INTEGRATED_CENTER_FOR_STRUCTURE_AND_FUNCTION_INNOVATION",
+  ISRAEL_STRUCTURAL_PROTEOMICS_CENTER = "ISRAEL_STRUCTURAL_PROTEOMICS_CENTER",
+  JOINT_CENTER_FOR_STRUCTURAL_GENOMICS = "JOINT_CENTER_FOR_STRUCTURAL_GENOMICS",
+  MARSEILLES_STRUCTURAL_GENOMICS_PROGRAM_AFMB = "MARSEILLES_STRUCTURAL_GENOMICS_PROGRAM_AFMB",
+  MEDICAL_STRUCTURAL_GENOMICS_OF_PATHOGENIC_PROTOZOA = "MEDICAL_STRUCTURAL_GENOMICS_OF_PATHOGENIC_PROTOZOA",
+  MEMBRANE_PROTEIN_STRUCTURAL_BIOLOGY_CONSORTIUM = "MEMBRANE_PROTEIN_STRUCTURAL_BIOLOGY_CONSORTIUM",
+  MEMBRANE_PROTEIN_STRUCTURES_BY_SOLUTION_NMR = "MEMBRANE_PROTEIN_STRUCTURES_BY_SOLUTION_NMR",
+  MIDWEST_CENTER_FOR_MACROMOLECULAR_RESEARCH = "MIDWEST_CENTER_FOR_MACROMOLECULAR_RESEARCH",
+  MIDWEST_CENTER_FOR_STRUCTURAL_GENOMICS = "MIDWEST_CENTER_FOR_STRUCTURAL_GENOMICS",
+  MITOCHONDRIAL_PROTEIN_PARTNERSHIP = "MITOCHONDRIAL_PROTEIN_PARTNERSHIP",
+  MONTREAL_KINGSTON_BACTERIAL_STRUCTURAL_GENOMICS_INITIATIVE = "MONTREAL_KINGSTON_BACTERIAL_STRUCTURAL_GENOMICS_INITIATIVE",
+  MYCOBACTERIUM_TUBERCULOSIS_STRUCTURAL_PROTEOMICS_PROJECT = "MYCOBACTERIUM_TUBERCULOSIS_STRUCTURAL_PROTEOMICS_PROJECT",
+  NEW_YORK_CONSORTIUM_ON_MEMBRANE_PROTEIN_STRUCTURE = "NEW_YORK_CONSORTIUM_ON_MEMBRANE_PROTEIN_STRUCTURE",
+  NEW_YORK_SGX_RESEARCH_CENTER_FOR_STRUCTURAL_GENOMICS = "NEW_YORK_SGX_RESEARCH_CENTER_FOR_STRUCTURAL_GENOMICS",
+  NEW_YORK_STRUCTURAL_GENOMICS_RESEARCH_CONSORTIUM = "NEW_YORK_STRUCTURAL_GENOMICS_RESEARCH_CONSORTIUM",
+  NEW_YORK_STRUCTURAL_GENOMI_X_RESEARCH_CONSORTIUM = "NEW_YORK_STRUCTURAL_GENOMI_X_RESEARCH_CONSORTIUM",
+  NORTHEAST_STRUCTURAL_GENOMICS_CONSORTIUM = "NORTHEAST_STRUCTURAL_GENOMICS_CONSORTIUM",
+  NUCLEOCYTOPLASMIC_TRANSPORT_A_TARGET_FOR_CELLULAR_CONTROL = "NUCLEOCYTOPLASMIC_TRANSPORT_A_TARGET_FOR_CELLULAR_CONTROL",
+  ONTARIO_CENTRE_FOR_STRUCTURAL_PROTEOMICS = "ONTARIO_CENTRE_FOR_STRUCTURAL_PROTEOMICS",
+  OXFORD_PROTEIN_PRODUCTION_FACILITY = "OXFORD_PROTEIN_PRODUCTION_FACILITY",
+  PARIS_SUD_YEAST_STRUCTURAL_GENOMICS = "PARIS_SUD_YEAST_STRUCTURAL_GENOMICS",
+  PARTNERSHIP_FOR_NUCLEAR_RECEPTOR_SIGNALING_CODE_BIOLOGY = "PARTNERSHIP_FOR_NUCLEAR_RECEPTOR_SIGNALING_CODE_BIOLOGY",
+  PARTNERSHIP_FOR_STEM_CELL_BIOLOGY = "PARTNERSHIP_FOR_STEM_CELL_BIOLOGY",
+  PARTNERSHIP_FOR_T_CELL_BIOLOGY = "PARTNERSHIP_FOR_T_CELL_BIOLOGY",
+  PROGRAM_FOR_THE_CHARACTERIZATION_OF_SECRETED_EFFECTOR_PROTEINS = "PROGRAM_FOR_THE_CHARACTERIZATION_OF_SECRETED_EFFECTOR_PROTEINS",
+  PROTEIN_STRUCTURE_FACTORY = "PROTEIN_STRUCTURE_FACTORY",
+  RIKEN_STRUCTURAL_GENOMICS_PROTEOMICS_INITIATIVE = "RIKEN_STRUCTURAL_GENOMICS_PROTEOMICS_INITIATIVE",
+  SCOTTISH_STRUCTURAL_PROTEOMICS_FACILITY = "SCOTTISH_STRUCTURAL_PROTEOMICS_FACILITY",
+  SEATTLE_STRUCTURAL_GENOMICS_CENTER_FOR_INFECTIOUS_DISEASE = "SEATTLE_STRUCTURAL_GENOMICS_CENTER_FOR_INFECTIOUS_DISEASE",
+  SOUTHEAST_COLLABORATORY_FOR_STRUCTURAL_GENOMICS = "SOUTHEAST_COLLABORATORY_FOR_STRUCTURAL_GENOMICS",
+  SOUTH_AFRICA_STRUCTURAL_TARGETS_ANNOTATION_DATABASE = "SOUTH_AFRICA_STRUCTURAL_TARGETS_ANNOTATION_DATABASE",
+  STRUCTURAL_GENOMICS_CONSORTIUM = "STRUCTURAL_GENOMICS_CONSORTIUM",
+  STRUCTURAL_GENOMICS_CONSORTIUM_FOR_RESEARCH_ON_GENE_EXPRESSION = "STRUCTURAL_GENOMICS_CONSORTIUM_FOR_RESEARCH_ON_GENE_EXPRESSION",
+  STRUCTURAL_GENOMICS_OF_PATHOGENIC_PROTOZOA_CONSORTIUM = "STRUCTURAL_GENOMICS_OF_PATHOGENIC_PROTOZOA_CONSORTIUM",
+  STRUCTURAL_PROTEOMICS_IN_EUROPE = "STRUCTURAL_PROTEOMICS_IN_EUROPE",
+  STRUCTURAL_PROTEOMICS_IN_EUROPE_2 = "STRUCTURAL_PROTEOMICS_IN_EUROPE_2",
+  STRUCTURES_OF_MTB_PROTEINS_CONFERRING_SUSCEPTIBILITY_TO_KNOWN_MTB_INHIBITORS = "STRUCTURES_OF_MTB_PROTEINS_CONFERRING_SUSCEPTIBILITY_TO_KNOWN_MTB_INHIBITORS",
+  STRUCTURE_2_FUNCTION_PROJECT = "STRUCTURE_2_FUNCTION_PROJECT",
+  STRUCTURE_DYNAMICS_AND_ACTIVATION_MECHANISMS_OF_CHEMOKINE_RECEPTORS = "STRUCTURE_DYNAMICS_AND_ACTIVATION_MECHANISMS_OF_CHEMOKINE_RECEPTORS",
+  STRUCTURE_FUNCTION_ANALYSIS_OF_POLYMORPHIC_CDI_TOXIN_IMMUNITY_PROTEIN_COMPLEXES = "STRUCTURE_FUNCTION_ANALYSIS_OF_POLYMORPHIC_CDI_TOXIN_IMMUNITY_PROTEIN_COMPLEXES",
+  STRUCTURE_FUNCTION_STUDIES_OF_TIGHT_JUNCTION_MEMBRANE_PROTEINS = "STRUCTURE_FUNCTION_STUDIES_OF_TIGHT_JUNCTION_MEMBRANE_PROTEINS",
+  TB_STRUCTURAL_GENOMICS_CONSORTIUM = "TB_STRUCTURAL_GENOMICS_CONSORTIUM",
+  TRANSCONTINENTAL_EM_INITIATIVE_FOR_MEMBRANE_PROTEIN_STRUCTURE = "TRANSCONTINENTAL_EM_INITIATIVE_FOR_MEMBRANE_PROTEIN_STRUCTURE",
+  TRANSMEMBRANE_PROTEIN_CENTER = "TRANSMEMBRANE_PROTEIN_CENTER"
+}
+
+export enum PdbxSgProjectId {
+  _1 = "_1",
+  _10 = "_10",
+  _2 = "_2",
+  _3 = "_3",
+  _4 = "_4",
+  _5 = "_5",
+  _6 = "_6",
+  _7 = "_7",
+  _8 = "_8",
+  _9 = "_9"
+}
+
+export enum PdbxSgProjectInitialOfCenter {
+  ATCG_3_D = "ATCG_3_D",
+  BIGS = "BIGS",
+  BSGC = "BSGC",
+  BSGI = "BSGI",
+  CEBS = "CEBS",
+  CELLMAT = "CELLMAT",
+  CESG = "CESG",
+  CHSAM = "CHSAM",
+  CHTSB = "CHTSB",
+  CSGID = "CSGID",
+  CSMP = "CSMP",
+  GPCR = "GPCR",
+  IFN = "IFN",
+  ISFI = "ISFI",
+  ISPC = "ISPC",
+  JCSG = "JCSG",
+  MCMR = "MCMR",
+  MCSG = "MCSG",
+  MPID = "MPID",
+  MPP = "MPP",
+  MPSBC = "MPSBC",
+  MP_SBY_NMR = "MP_SBY_NMR",
+  MSGP = "MSGP",
+  MSGPP = "MSGPP",
+  MTBI = "MTBI",
+  NAT_PRO = "NAT_PRO",
+  NESG = "NESG",
+  NH_RS = "NH_RS",
+  NPC_XSTALS = "NPC_XSTALS",
+  NYCOMPS = "NYCOMPS",
+  NYSGRC = "NYSGRC",
+  NYSGXRC = "NYSGXRC",
+  OCSP = "OCSP",
+  OPPF = "OPPF",
+  PCSEP = "PCSEP",
+  PSF = "PSF",
+  RSGI = "RSGI",
+  SASTAD = "SASTAD",
+  SECSG = "SECSG",
+  SGC = "SGC",
+  SGCGES = "SGCGES",
+  SGPP = "SGPP",
+  SPINE = "SPINE",
+  SPINE_2 = "SPINE_2",
+  SSGCID = "SSGCID",
+  SSPF = "SSPF",
+  STEMCELL = "STEMCELL",
+  S_2_F = "S_2_F",
+  TBSGC = "TBSGC",
+  TCELL = "TCELL",
+  TEMIMPS = "TEMIMPS",
+  TJMP = "TJMP",
+  TMPC = "TMPC",
+  TRANSPORT_PDB = "TRANSPORT_PDB",
+  UC_4_CDI = "UC_4_CDI",
+  XMTB = "XMTB",
+  YSG = "YSG"
+}
+
+export enum PdbxSgProjectProjectName {
+  ENZYME_FUNCTION_INITIATIVE = "ENZYME_FUNCTION_INITIATIVE",
+  NIAID_NATIONAL_INSTITUTE_OF_ALLERGY_AND_INFECTIOUS_DISEASES = "NIAID_NATIONAL_INSTITUTE_OF_ALLERGY_AND_INFECTIOUS_DISEASES",
+  NPPSFA_NATIONAL_PROJECT_ON_PROTEIN_STRUCTURAL_AND_FUNCTIONAL_ANALYSES = "NPPSFA_NATIONAL_PROJECT_ON_PROTEIN_STRUCTURAL_AND_FUNCTIONAL_ANALYSES",
+  PSI_BIOLOGY = "PSI_BIOLOGY",
+  PSI_PROTEIN_STRUCTURE_INITIATIVE = "PSI_PROTEIN_STRUCTURE_INITIATIVE"
+}
+
+export enum PdbxAuditRevisionDetailsDataContentType {
+  NMR_RESTRAINTS = "NMR_RESTRAINTS",
+  NMR_SHIFTS = "NMR_SHIFTS",
+  STRUCTURE_FACTORS = "STRUCTURE_FACTORS",
+  STRUCTURE_MODEL = "STRUCTURE_MODEL"
+}
+
+export enum PdbxAuditRevisionDetailsProvider {
+  AUTHOR = "AUTHOR",
+  REPOSITORY = "REPOSITORY"
+}
+
+export enum PdbxAuditRevisionDetailsType {
+  COORDINATE_REPLACEMENT = "COORDINATE_REPLACEMENT",
+  INITIAL_RELEASE = "INITIAL_RELEASE",
+  OBSOLETE = "OBSOLETE"
 }
 
-export enum Level {
-  _100 = "_100",
-  _30 = "_30",
-  _40 = "_40",
-  _50 = "_50",
-  _60 = "_60",
-  _70 = "_70",
-  _80 = "_80",
-  _90 = "_90",
-  _95 = "_95"
+export enum PdbxAuditRevisionHistoryDataContentType {
+  NMR_RESTRAINTS = "NMR_RESTRAINTS",
+  NMR_SHIFTS = "NMR_SHIFTS",
+  STRUCTURE_FACTORS = "STRUCTURE_FACTORS",
+  STRUCTURE_MODEL = "STRUCTURE_MODEL"
 }
 
-export enum PdbFormatCompatible {
+export enum PdbxDatabasePdbObsSprId {
+  OBSLTE = "OBSLTE",
+  SPRSDE = "SPRSDE"
+}
+
+export enum PdbxDatabaseStatusSgEntry {
   N = "N",
   Y = "Y"
 }
 
+export enum PdbxDatabaseStatusDepositSite {
+  BMRB = "BMRB",
+  BNL = "BNL",
+  NDB = "NDB",
+  PDBE = "PDBE",
+  PDBJ = "PDBJ",
+  RCSB = "RCSB"
+}
+
+export enum PdbxDatabaseStatusMethodsDevelopmentCategory {
+  CAPRI = "CAPRI",
+  CASD_NMR = "CASD_NMR",
+  CASP = "CASP",
+  D_3_R = "D_3_R",
+  FOLD_IT = "FOLD_IT",
+  GPCR_DOCK = "GPCR_DOCK",
+  RNA_PUZZLES = "RNA_PUZZLES"
+}
+
+export enum PdbxDatabaseStatusPdbFormatCompatible {
+  N = "N",
+  Y = "Y"
+}
+
+export enum PdbxDatabaseStatusProcessSite {
+  BNL = "BNL",
+  NDB = "NDB",
+  PDBE = "PDBE",
+  PDBJ = "PDBJ",
+  RCSB = "RCSB"
+}
+
+export enum PdbxDatabaseStatusStatusCode {
+  AUCO = "AUCO",
+  AUTH = "AUTH",
+  BIB = "BIB",
+  DEL = "DEL",
+  HOLD = "HOLD",
+  HPUB = "HPUB",
+  OBS = "OBS",
+  POLC = "POLC",
+  PROC = "PROC",
+  REFI = "REFI",
+  REL = "REL",
+  REPL = "REPL",
+  REV = "REV",
+  RMVD = "RMVD",
+  TRSF = "TRSF",
+  UPD = "UPD",
+  WAIT = "WAIT",
+  WDRN = "WDRN"
+}
+
+export enum PdbxDatabaseStatusStatusCodeCs {
+  AUTH = "AUTH",
+  HOLD = "HOLD",
+  HPUB = "HPUB",
+  OBS = "OBS",
+  POLC = "POLC",
+  PROC = "PROC",
+  REL = "REL",
+  REPL = "REPL",
+  RMVD = "RMVD",
+  WAIT = "WAIT",
+  WDRN = "WDRN"
+}
+
+export enum PdbxDatabaseStatusStatusCodeMr {
+  AUTH = "AUTH",
+  HOLD = "HOLD",
+  HPUB = "HPUB",
+  OBS = "OBS",
+  POLC = "POLC",
+  PROC = "PROC",
+  REL = "REL",
+  REPL = "REPL",
+  RMVD = "RMVD",
+  WAIT = "WAIT",
+  WDRN = "WDRN"
+}
+
+export enum PdbxDatabaseStatusStatusCodeSf {
+  AUTH = "AUTH",
+  HOLD = "HOLD",
+  HPUB = "HPUB",
+  OBS = "OBS",
+  POLC = "POLC",
+  PROC = "PROC",
+  REL = "REL",
+  REPL = "REPL",
+  RMVD = "RMVD",
+  WAIT = "WAIT",
+  WDRN = "WDRN"
+}
+
+export enum PdbxDepositGroupGroupType {
+  CHANGED_STATE = "CHANGED_STATE",
+  GROUND_STATE = "GROUND_STATE",
+  UNDEFINED = "UNDEFINED"
+}
+
+export enum PdbxMoleculeFeaturesClass {
+  ANTAGONIST = "ANTAGONIST",
+  ANTHELMINTIC = "ANTHELMINTIC",
+  ANTIBIOTIC = "ANTIBIOTIC",
+  ANTIBIOTIC_ANTHELMINTIC = "ANTIBIOTIC_ANTHELMINTIC",
+  ANTIBIOTIC_ANTIMICROBIAL = "ANTIBIOTIC_ANTIMICROBIAL",
+  ANTIBIOTIC_ANTINEOPLASTIC = "ANTIBIOTIC_ANTINEOPLASTIC",
+  ANTICANCER = "ANTICANCER",
+  ANTICOAGULANT = "ANTICOAGULANT",
+  ANTICOAGULANT_ANTITHROMBOTIC = "ANTICOAGULANT_ANTITHROMBOTIC",
+  ANTIFUNGAL = "ANTIFUNGAL",
+  ANTIINFLAMMATORY = "ANTIINFLAMMATORY",
+  ANTIMICROBIAL = "ANTIMICROBIAL",
+  ANTIMICROBIAL_ANTIPARASITIC_ANTIBIOTIC = "ANTIMICROBIAL_ANTIPARASITIC_ANTIBIOTIC",
+  ANTIMICROBIAL_ANTIRETROVIRAL = "ANTIMICROBIAL_ANTIRETROVIRAL",
+  ANTIMICROBIAL_ANTITUMOR = "ANTIMICROBIAL_ANTITUMOR",
+  ANTINEOPLASTIC = "ANTINEOPLASTIC",
+  ANTIPARASITIC = "ANTIPARASITIC",
+  ANTIRETROVIRAL = "ANTIRETROVIRAL",
+  ANTITHROMBOTIC = "ANTITHROMBOTIC",
+  ANTITUMOR = "ANTITUMOR",
+  ANTIVIRAL = "ANTIVIRAL",
+  CASPASE_INHIBITOR = "CASPASE_INHIBITOR",
+  CHAPERONE_BINDING = "CHAPERONE_BINDING",
+  ENZYME_INHIBITOR = "ENZYME_INHIBITOR",
+  GROWTH_FACTOR = "GROWTH_FACTOR",
+  IMMUNOSUPPRESSANT = "IMMUNOSUPPRESSANT",
+  INHIBITOR = "INHIBITOR",
+  LANTIBIOTIC = "LANTIBIOTIC",
+  METABOLISM = "METABOLISM",
+  METAL_TRANSPORT = "METAL_TRANSPORT",
+  OXIDATION_REDUCTION = "OXIDATION_REDUCTION",
+  RECEPTOR = "RECEPTOR",
+  THROMBIN_INHIBITOR = "THROMBIN_INHIBITOR",
+  THROMBIN_INHIBITOR_TRYPSIN_INHIBITOR = "THROMBIN_INHIBITOR_TRYPSIN_INHIBITOR",
+  TOXIN = "TOXIN",
+  TRANSPORT_ACTIVATOR = "TRANSPORT_ACTIVATOR",
+  TRYPSIN_INHIBITOR = "TRYPSIN_INHIBITOR",
+  UNKNOWN = "UNKNOWN"
+}
+
+export enum PdbxMoleculeFeaturesType {
+  AMINOGLYCOSIDE = "AMINOGLYCOSIDE",
+  AMINO_ACID = "AMINO_ACID",
+  ANSAMYCIN = "ANSAMYCIN",
+  ANTHRACYCLINE = "ANTHRACYCLINE",
+  ANTHRAQUINONE = "ANTHRAQUINONE",
+  CHALKOPHORE = "CHALKOPHORE",
+  CHALKOPHORE_POLYPEPTIDE = "CHALKOPHORE_POLYPEPTIDE",
+  CHROMOPHORE = "CHROMOPHORE",
+  CYCLIC_DEPSIPEPTIDE = "CYCLIC_DEPSIPEPTIDE",
+  CYCLIC_LIPOPEPTIDE = "CYCLIC_LIPOPEPTIDE",
+  CYCLIC_PEPTIDE = "CYCLIC_PEPTIDE",
+  GLYCOPEPTIDE = "GLYCOPEPTIDE",
+  HETEROCYCLIC = "HETEROCYCLIC",
+  IMINO_SUGAR = "IMINO_SUGAR",
+  KETO_ACID = "KETO_ACID",
+  LIPOGLYCOPEPTIDE = "LIPOGLYCOPEPTIDE",
+  LIPOPEPTIDE = "LIPOPEPTIDE",
+  MACROLIDE = "MACROLIDE",
+  NON_POLYMER = "NON_POLYMER",
+  NUCLEOSIDE = "NUCLEOSIDE",
+  OLIGOPEPTIDE = "OLIGOPEPTIDE",
+  OLIGOSACCHARIDE = "OLIGOSACCHARIDE",
+  PEPTAIBOL = "PEPTAIBOL",
+  PEPTIDE_LIKE = "PEPTIDE_LIKE",
+  POLYCYCLIC = "POLYCYCLIC",
+  POLYPEPTIDE = "POLYPEPTIDE",
+  POLYSACCHARIDE = "POLYSACCHARIDE",
+  QUINOLONE = "QUINOLONE",
+  SIDEROPHORE = "SIDEROPHORE",
+  THIOLACTONE = "THIOLACTONE",
+  THIOPEPTIDE = "THIOPEPTIDE",
+  UNKNOWN = "UNKNOWN"
+}
+
+export enum PdbxNmrExptlSampleState {
+  ANISOTROPIC = "ANISOTROPIC",
+  ISOTROPIC = "ISOTROPIC"
+}
+
+export enum PdbxNmrExptlSampleConditionsIonicStrengthUnits {
+  M = "M",
+  M_M = "M_M",
+  NOT_DEFINED = "NOT_DEFINED"
+}
+
+export enum PdbxNmrExptlSampleConditionsPhUnits {
+  NOT_DEFINED = "NOT_DEFINED",
+  P_D = "P_D",
+  P_H = "P_H",
+  P_H_ = "P_H_"
+}
+
+export enum PdbxNmrExptlSampleConditionsTemperatureUnits {
+  C = "C",
+  K = "K",
+  NOT_DEFINED = "NOT_DEFINED"
+}
+
+export enum PdbxNmrSampleDetailsType {
+  BICELLE = "BICELLE",
+  EMULSION = "EMULSION",
+  FIBER = "FIBER",
+  FIBROUS_PROTEIN = "FIBROUS_PROTEIN",
+  FILAMENTOUS_VIRUS = "FILAMENTOUS_VIRUS",
+  GEL_SOLID = "GEL_SOLID",
+  GEL_SOLUTION = "GEL_SOLUTION",
+  LIPOSOME = "LIPOSOME",
+  LYOPHILIZED_POWDER = "LYOPHILIZED_POWDER",
+  MEMBRANE = "MEMBRANE",
+  MICELLE = "MICELLE",
+  ORIENTED_MEMBRANE_FILM = "ORIENTED_MEMBRANE_FILM",
+  POLYCRYSTALLINE_POWDER = "POLYCRYSTALLINE_POWDER",
+  REVERSE_MICELLE = "REVERSE_MICELLE",
+  SINGLE_CRYSTAL = "SINGLE_CRYSTAL",
+  SOLID = "SOLID",
+  SOLUTION = "SOLUTION"
+}
+
+export enum PdbxSerialCrystallographySampleDeliveryMethod {
+  FIXED_TARGET = "FIXED_TARGET",
+  INJECTION = "INJECTION"
+}
+
+export enum RcsbBindingSource {
+  BINDINGDB = "BINDINGDB",
+  BINDINGMOAD = "BINDINGMOAD",
+  PDBBIND = "PDBBIND"
+}
+
+export enum RefineLsMatrixType {
+  ATOMBLOCK = "ATOMBLOCK",
+  DIAGONAL = "DIAGONAL",
+  FULL = "FULL",
+  FULLCYCLE = "FULLCYCLE",
+  SPARSE = "SPARSE",
+  USERBLOCK = "USERBLOCK"
+}
+
+export enum RefinePdbxTlsResidualAdpFlag {
+  LIKELY_RESIDUAL = "LIKELY_RESIDUAL",
+  UNVERIFIED = "UNVERIFIED"
+}
+
+export enum SoftwareLanguage {
+  ADA = "ADA",
+  ASSEMBLER = "ASSEMBLER",
+  AWK = "AWK",
+  BASIC = "BASIC",
+  C = "C",
+  CSH = "CSH",
+  C_ = "C_",
+  C_C = "C_C",
+  FORTRAN = "FORTRAN",
+  FORTRAN_77 = "FORTRAN_77",
+  FORTRAN_77_ = "FORTRAN_77_",
+  FORTRAN_90 = "FORTRAN_90",
+  JAVA = "JAVA",
+  JAVA_FORTRAN = "JAVA_FORTRAN",
+  KSH = "KSH",
+  OTHER = "OTHER",
+  PASCAL = "PASCAL",
+  PERL = "PERL",
+  PYTHON = "PYTHON",
+  PYTHON_C = "PYTHON_C",
+  SH = "SH",
+  TCL = "TCL"
+}
+
+export enum SoftwareType {
+  FILTER = "FILTER",
+  JIFFY = "JIFFY",
+  LIBRARY = "LIBRARY",
+  OTHER = "OTHER",
+  PACKAGE = "PACKAGE",
+  PROGRAM = "PROGRAM"
+}
+
+export enum StructPdbxCaspFlag {
+  N = "N",
+  Y = "Y"
+}
+
+export enum SymmetryCellSetting {
+  CUBIC = "CUBIC",
+  HEXAGONAL = "HEXAGONAL",
+  MONOCLINIC = "MONOCLINIC",
+  ORTHORHOMBIC = "ORTHORHOMBIC",
+  RHOMBOHEDRAL = "RHOMBOHEDRAL",
+  TETRAGONAL = "TETRAGONAL",
+  TRICLINIC = "TRICLINIC",
+  TRIGONAL = "TRIGONAL"
+}
+
+// ====================================================
+// END: Typescript template
+// ====================================================
+
+// ====================================================
+// Documents
+// ====================================================
+
 export namespace AssemblySymmetry {
   export type Variables = {
     readonly pdbId: string;
@@ -171,52 +1204,67 @@ export namespace AssemblySymmetry {
 
   export type Query = {
     readonly __typename?: "Query";
+
     readonly assemblies?: ReadonlyArray<Assemblies | null> | null;
   };
 
   export type Assemblies = {
     readonly __typename?: "CoreAssembly";
-    readonly assembly_id: number;
-    readonly rcsb_assembly_symmetry?: RcsbAssemblySymmetry | null;
+
+    readonly pdbx_struct_assembly?: PdbxStructAssembly | null;
+
+    readonly rcsb_struct_symmetry?: ReadonlyArray<RcsbStructSymmetry | null> | null;
+
+    readonly rcsb_struct_symmetry_provenance?: string | null;
   };
 
-  export type RcsbAssemblySymmetry = {
-    readonly __typename?: "RcsbAssemblySymmetry";
-    readonly source: string;
-    readonly symmetry_features: ReadonlyArray<SymmetryFeatures | null>;
+  export type PdbxStructAssembly = {
+    readonly __typename?: "PdbxStructAssembly";
+
+    readonly id: string;
   };
 
-  export type SymmetryFeatures = {
-    readonly __typename?: "SymmetryFeature";
-    readonly symmetry: Symmetry;
+  export type RcsbStructSymmetry = {
+    readonly __typename?: "RcsbStructSymmetry";
+
     readonly clusters: ReadonlyArray<Clusters | null>;
-    readonly stoichiometry: Stoichiometry;
-    readonly symmetry_axes?: ReadonlyArray<SymmetryAxes | null> | null;
-    readonly type: SymmetryFeatureType;
-  };
 
-  export type Symmetry = {
-    readonly __typename?: "QuaternarySymmetry";
-    readonly description: string;
-    readonly value: string;
+    readonly kind: RcsbStructSymmetryKind;
+
+    readonly oligomeric_state: string;
+
+    readonly rotation_axes?: ReadonlyArray<RotationAxes | null> | null;
+
+    readonly stoichiometry: ReadonlyArray<string | null>;
+
+    readonly symbol: string;
+
+    readonly type: RcsbStructSymmetryType;
   };
 
   export type Clusters = {
-    readonly __typename?: "Cluster";
-    readonly members: ReadonlyArray<string | null>;
+    readonly __typename?: "RcsbStructSymmetryClusters";
+
     readonly avg_rmsd?: number | null;
+
+    readonly members: ReadonlyArray<Members | null>;
   };
 
-  export type Stoichiometry = {
-    readonly __typename?: "Stoichiometry";
-    readonly description: string;
-    readonly value: ReadonlyArray<string | null>;
+  export type Members = {
+    readonly __typename?: "ClustersMembers";
+
+    readonly asym_id: string;
+
+    readonly pdbx_struct_oper_list_ids?: ReadonlyArray<string | null> | null;
   };
 
-  export type SymmetryAxes = {
-    readonly __typename?: "SymmetryAxis";
+  export type RotationAxes = {
+    readonly __typename?: "RcsbStructSymmetryRotationAxes";
+
     readonly start: ReadonlyArray<number | null>;
+
     readonly end: ReadonlyArray<number | null>;
+
     readonly order?: number | null;
   };
 }
diff --git a/src/mol-model-props/rcsb/symmetry.ts b/src/mol-model-props/rcsb/symmetry.ts
index 379310bde9f7d2552af0a31168a83907b443e7d5..11795b06b3f6de0f4e5e3e6d48940fa855cc9179 100644
--- a/src/mol-model-props/rcsb/symmetry.ts
+++ b/src/mol-model-props/rcsb/symmetry.ts
@@ -17,6 +17,7 @@ import { Tensor } from 'mol-math/linear-algebra';
 import { CifExportContext } from 'mol-model/structure/export/mmcif';
 import { toTable } from 'mol-io/reader/cif/schema';
 import { CifCategory } from 'mol-io/reader/cif';
+import { PropertyWrapper } from 'mol-model-props/common/wrapper';
 
 const { str, int, float, Aliased, Vector, List } = Column.Schema;
 
@@ -31,51 +32,58 @@ function getCategory(name: keyof AssemblySymmetry.Schema) {
     return { name, instance: getInstance(name) }
 }
 
-function createDatabase(assemblies: ReadonlyArray<AssemblySymmetryGraphQL.Assemblies>): AssemblySymmetry.Database {
+function createDatabaseFromJson(assemblies: ReadonlyArray<AssemblySymmetryGraphQL.Assemblies>): AssemblySymmetry.Database {
     const Schema = AssemblySymmetry.Schema
 
-    const featureRows: Table.Row<typeof Schema.rcsb_assembly_symmetry_feature>[] = []
+    const featureRows: Table.Row<typeof Schema.rcsb_assembly_symmetry>[] = []
     const clusterRows: Table.Row<typeof Schema.rcsb_assembly_symmetry_cluster>[] = []
+    const clusterMemberRows: Table.Row<typeof Schema.rcsb_assembly_symmetry_cluster_member>[] = []
     const axisRows: Table.Row<typeof Schema.rcsb_assembly_symmetry_axis>[] = []
 
     let id = 1 // start feature ids at 1
     for (let i = 0, il = assemblies.length; i < il; ++i) {
-        const { assembly_id: _assembly_id, rcsb_assembly_symmetry } = assemblies[i]
-        if (!rcsb_assembly_symmetry) continue
-        const assembly_id = _assembly_id.toString() // TODO type will be fixed to string upstream
-        const source = rcsb_assembly_symmetry.source
-        const symmetry_features = rcsb_assembly_symmetry.symmetry_features
-        for (let j = 0, jl = symmetry_features.length; j < jl; ++j) {
-            const f = symmetry_features[j]! // TODO upstream, array members should not be nullable
+        const { pdbx_struct_assembly, rcsb_struct_symmetry, rcsb_struct_symmetry_provenance } = assemblies[i]
+        if (!pdbx_struct_assembly || !rcsb_struct_symmetry ||!rcsb_struct_symmetry_provenance) continue
+        const assembly_id = pdbx_struct_assembly.id
+        for (let j = 0, jl = rcsb_struct_symmetry.length; j < jl; ++j) {
+            const rss = rcsb_struct_symmetry[j]! // TODO upstream, array members should not be nullable
             featureRows.push({
                 id,
                 assembly_id,
-                source,
-                type: f.type,
-                stoichiometry_value: f.stoichiometry.value as string[],  // TODO upstream, array members should not be nullable
-                stoichiometry_description: f.stoichiometry.description,
-                symmetry_value: f.symmetry.value,
-                symmetry_description: f.symmetry.description
+                provenance: rcsb_struct_symmetry_provenance,
+                type: rss.type,
+                stoichiometry: rss.stoichiometry as string[],  // TODO upstream, array members should not be nullable
+                kind: rss.kind,
+                symbol: rss.symbol,
+                oligomeric_state: rss.oligomeric_state
             })
 
-            const clusters = f.clusters
+            const clusters = rss.clusters
             if (clusters) {
                 for (let k = 0, kl = clusters.length; k < kl; ++k) {
                     const c = clusters[k]! // TODO upstream, array members should not be nullable
                     clusterRows.push({
-                        feature_id: id,
+                        id: k,
+                        symmetry_id: id,
                         avg_rmsd: c.avg_rmsd || 0, // TODO upstream, should not be nullable, or???
-                        members: c.members as string[] // TODO upstream, array members should not be nullable
                     })
+                    for (let l = 0, ll = c.members.length; l < ll; ++l) {
+                        const m = c.members[l]! // TODO upstream, array members should not be nullable
+                        clusterMemberRows.push({
+                            cluster_id: k,
+                            asym_id: m.asym_id,
+                            pdbx_struct_oper_list_ids: (m.pdbx_struct_oper_list_ids || []) as string[]
+                        })
+                    }
                 }
             }
 
-            const axes = f.symmetry_axes
+            const axes = rss.rotation_axes
             if (axes) {
                 for (let k = 0, kl = axes.length; k < kl; ++k) {
                     const a = axes[k]!
                     axisRows.push({
-                        feature_id: id,
+                        symmetry_id: id,
                         order: a.order!,  // TODO upstream, should not be nullable, or???
                         start: a.start as Tensor.Data, // TODO upstream, array members should not be nullable
                         end: a.end as Tensor.Data // TODO upstream, array members should not be nullable
@@ -88,20 +96,57 @@ function createDatabase(assemblies: ReadonlyArray<AssemblySymmetryGraphQL.Assemb
     }
 
     return _Database.ofTables('assembly_symmetry', Schema, {
-        rcsb_assembly_symmetry_feature: Table.ofRows(Schema.rcsb_assembly_symmetry_feature, featureRows),
+        rcsb_assembly_symmetry: Table.ofRows(Schema.rcsb_assembly_symmetry, featureRows),
         rcsb_assembly_symmetry_cluster: Table.ofRows(Schema.rcsb_assembly_symmetry_cluster, clusterRows),
+        rcsb_assembly_symmetry_cluster_member: Table.ofRows(Schema.rcsb_assembly_symmetry_cluster_member, clusterMemberRows),
         rcsb_assembly_symmetry_axis: Table.ofRows(Schema.rcsb_assembly_symmetry_axis, axisRows)
     })
 }
 
+function createDatabaseFromCif(model: Model): AssemblySymmetry.Database {
+    const Schema = AssemblySymmetry.Schema
+
+    const rcsb_assembly_symmetry = toTable(Schema.rcsb_assembly_symmetry, model.sourceData.frame.categories.rcsb_assembly_symmetry_feature)
+
+    let rcsb_assembly_symmetry_cluster
+    if (model.sourceData.frame.categoryNames.includes('rcsb_assembly_symmetry_cluster')) {
+        rcsb_assembly_symmetry_cluster = toTable(Schema.rcsb_assembly_symmetry_cluster, model.sourceData.frame.categories.rcsb_assembly_symmetry_cluster)
+    } else {
+        rcsb_assembly_symmetry_cluster = CifCategory.empty
+    }
+
+    let rcsb_assembly_symmetry_cluster_member
+    if (model.sourceData.frame.categoryNames.includes('rcsb_assembly_symmetry_cluster_member')) {
+        rcsb_assembly_symmetry_cluster_member = toTable(Schema.rcsb_assembly_symmetry_cluster_member, model.sourceData.frame.categories.rcsb_assembly_symmetry_cluster_member)
+    } else {
+        rcsb_assembly_symmetry_cluster_member = CifCategory.empty
+    }
+
+    let rcsb_assembly_symmetry_axis
+    if (model.sourceData.frame.categoryNames.includes('rcsb_assembly_symmetry_axis')) {
+        rcsb_assembly_symmetry_axis = toTable(Schema.rcsb_assembly_symmetry_axis, model.sourceData.frame.categories.rcsb_assembly_symmetry_axis)
+    } else {
+        rcsb_assembly_symmetry_axis = CifCategory.empty
+    }
+
+    return _Database.ofTables('rcsb_assembly_symmetry', Schema, {
+        rcsb_assembly_symmetry,
+        rcsb_assembly_symmetry_cluster,
+        rcsb_assembly_symmetry_cluster_member,
+        rcsb_assembly_symmetry_axis
+    })
+}
+
 const _Descriptor: ModelPropertyDescriptor = {
     isStatic: true,
-    name: 'assembly_symmetry',
+    name: 'rcsb_assembly_symmetry',
     cifExport: {
         prefix: 'rcsb',
         categories: [
-            getCategory('rcsb_assembly_symmetry_feature'),
+            PropertyWrapper.defaultInfoCategory<CifExportContext>('rcsb_assembly_symmetry_info', ctx => PropertyWrapper.createInfo()),
+            getCategory('rcsb_assembly_symmetry'),
             getCategory('rcsb_assembly_symmetry_cluster'),
+            getCategory('rcsb_assembly_symmetry_cluster_member'),
             getCategory('rcsb_assembly_symmetry_axis')
         ]
     }
@@ -111,56 +156,85 @@ const client = new GraphQLClient('http://rest-experimental.rcsb.org/graphql')
 
 export interface AssemblySymmetry {
     db: AssemblySymmetry.Database
-    getFeatures(assemblyId: string): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry_feature']>
-    getClusters(featureId: number): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry_cluster']>
-    getAxes(featureId: number): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry_axis']>
+    getSymmetries(assemblyId: string): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry']>
+    getClusters(symmetryId: number): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry_cluster']>
+    getClusterMembers(clusterId: number): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry_cluster_member']>
+    getAxes(symmetryId: number): Table<AssemblySymmetry.Schema['rcsb_assembly_symmetry_axis']>
 }
 
 export function AssemblySymmetry(db: AssemblySymmetry.Database): AssemblySymmetry {
-    const f = db.rcsb_assembly_symmetry_feature
+    const f = db.rcsb_assembly_symmetry
     const c = db.rcsb_assembly_symmetry_cluster
+    const cm = db.rcsb_assembly_symmetry_cluster_member
     const a = db.rcsb_assembly_symmetry_axis
 
     return {
         db,
-        getFeatures: (assemblyId: string) => Table.pick(f, f._schema, i => f.assembly_id.value(i) === assemblyId),
-        getClusters: (featureId: number) => Table.pick(c, c._schema, i => c.feature_id.value(i) === featureId),
-        getAxes: (featureId: number) => Table.pick(a, a._schema, i => a.feature_id.value(i) === featureId)
+        getSymmetries: (assemblyId: string) => Table.pick(f, f._schema, i => f.assembly_id.value(i) === assemblyId),
+        getClusters: (symmetryId: number) => Table.pick(c, c._schema, i => c.symmetry_id.value(i) === symmetryId),
+        getClusterMembers: (clusterId: number) => Table.pick(cm, cm._schema, i => cm.cluster_id.value(i) === clusterId),
+        getAxes: (symmetryId: number) => Table.pick(a, a._schema, i => a.symmetry_id.value(i) === symmetryId)
     }
 }
 
 export namespace AssemblySymmetry {
     export const Schema = {
-        rcsb_assembly_symmetry_feature: {
-            /** Uniquely identifies a record in `rcsb_assembly_symmetry_feature` */
+        rcsb_assembly_symmetry_info: {
+            updated_datetime_utc: Column.Schema.str
+        },
+        rcsb_assembly_symmetry: {
+            /** Uniquely identifies a record in `rcsb_assembly_symmetry` */
             id: int,
-            /** A pointer to `pdbx_struct_assembly.id` */
+            /**
+             * A pointer to `pdbx_struct_assembly.id`.
+             * The value 'deposited' refers to the coordinates as given in the file.
+             * */
             assembly_id: str,
-            /** Name and version of software used to calculate protein symmetry */
-            source: str,
+            /** Name and version of software used to calculate assembly symmetry */
+            provenance: str,
             /** Type of protein symmetry */
-            type: Aliased<'GLOBAL' | 'LOCAL' | 'PSEUDO'>(str),
+            kind: Aliased<'GLOBAL' | 'LOCAL' | 'PSEUDO'>(str),
             /** Quantitative description of every individual subunit in a given protein */
-            stoichiometry_value: List(',', x => x),
-            /** Oligomeric state for a given composition of subunits */
-            stoichiometry_description: str,
-            /** Point group symmetry value */
-            symmetry_value: str,
-            /** Point group symmetry description */
-            symmetry_description: str
+            stoichiometry: List(',', x => x),
+            /**
+             * Symmetry symbol refers to point group or helical symmetry of identical subunits.
+             * Contains point group symbol (e.g., C2, C5, D2, T, O, I) or H for helical symmetry.
+             */
+            symbol: str,
+            /** Point group or helical symmetry */
+            type: Aliased<'ASYMMETRIC' | 'CYCLIC' | 'DIHEDRAL' | 'HELICAL' | 'ICOSAHEDRAL' | 'OCTAHEDRAL' | 'TETRAHEDRAL'>(str),
+            /**
+             * Oligomeric state refers to a composition of subunits in quaternary structure.
+             * Quaternary structure may be composed either exclusively of several copies of identical
+             * subunits, in which case they are termed homo-oligomers, or alternatively by at least
+             * one copy of different subunits (hetero-oligomers). Quaternary structure composed of
+             * a single subunit is demoted as 'Monomer'.
+             */
+            oligomeric_state: str,
         },
         rcsb_assembly_symmetry_cluster: {
-            /** A pointer to `rcsb_assembly_symmetry_feature.id` */
-            feature_id: int,
+            /** Uniquely identifies a record in `rcsb_assembly_symmetry_cluster` */
+            id: int,
+            /** A pointer to `rcsb_assembly_symmetry.id` */
+            symmetry_id: int,
             /** Average RMSD between members of a given cluster */
-            avg_rmsd: float,
-            /** List of `auth_label_id` values  */
-            members: List(',', x => x)
+            avg_rmsd: float
+        },
+        rcsb_assembly_symmetry_cluster_member: {
+            /** A pointer to `rcsb_assembly_symmetry_cluster.id` */
+            cluster_id: int,
+            /** The `label_asym_id` value of the member */
+            asym_id: str,
+            /** List of `pdbx_struct_oper_list_id` values of the member */
+            pdbx_struct_oper_list_ids: List(',', x => x)
         },
         rcsb_assembly_symmetry_axis: {
-            /** A pointer to `rcsb_assembly_symmetry_feature.id` */
-            feature_id: int,
-            /** The order of the symmetry axis */
+            /** A pointer to `rcsb_assembly_symmetry.id` */
+            symmetry_id: int,
+            /**
+             * The number of times (order of rotation) that a subunit can be repeated by a rotation
+             * operation, being transformed into a new state indistinguishable from its starting state.
+             */
             order: int,
             /** The x,y,z coordinate of the start point of a symmetry axis */
             start: Vector(3),
@@ -177,32 +251,9 @@ export namespace AssemblySymmetry {
         if (model.customProperties.has(Descriptor)) return true;
 
         let db: Database
-
-        // TODO: there should be a "meta field" that indicates the property was added (see for example PDBe structure report)
-        // the reason for this is that the feature might not be present and therefore the "default" categories would
-        // not be created. This would result in an unnecessarily failed web request.
-        if (model.sourceData.kind === 'mmCIF' && model.sourceData.frame.categoryNames.includes('rcsb_assembly_symmetry_feature')) {
-            const rcsb_assembly_symmetry_feature = toTable(Schema.rcsb_assembly_symmetry_feature, model.sourceData.frame.categories.rcsb_assembly_symmetry_feature)
-
-            let rcsb_assembly_symmetry_cluster
-            if (model.sourceData.frame.categoryNames.includes('rcsb_assembly_symmetry_cluster')) {
-                rcsb_assembly_symmetry_cluster = toTable(Schema.rcsb_assembly_symmetry_cluster, model.sourceData.frame.categories.rcsb_assembly_symmetry_cluster)
-            } else {
-                rcsb_assembly_symmetry_cluster = CifCategory.empty
-            }
-
-            let rcsb_assembly_symmetry_axis
-            if (model.sourceData.frame.categoryNames.includes('rcsb_assembly_symmetry_axis')) {
-                rcsb_assembly_symmetry_axis = toTable(Schema.rcsb_assembly_symmetry_axis, model.sourceData.frame.categories.rcsb_assembly_symmetry_axis)
-            } else {
-                rcsb_assembly_symmetry_axis = CifCategory.empty
-            }
-
-            db = _Database.ofTables('assembly_symmetry', Schema, {
-                rcsb_assembly_symmetry_feature,
-                rcsb_assembly_symmetry_cluster,
-                rcsb_assembly_symmetry_axis
-            })
+        let info = PropertyWrapper.tryGetInfoFromCif('rcsb_assembly_symmetry_info', model);
+        if (info) {
+            db = createDatabaseFromCif(model)
         } else {
             let result: AssemblySymmetryGraphQL.Query
             const variables: AssemblySymmetryGraphQL.Variables = { pdbId: model.label.toLowerCase() };
@@ -214,15 +265,15 @@ export namespace AssemblySymmetry {
             }
             if (!result || !result.assemblies) return false;
 
-            db = createDatabase(result.assemblies as ReadonlyArray<AssemblySymmetryGraphQL.Assemblies>)
+            db = createDatabaseFromJson(result.assemblies as ReadonlyArray<AssemblySymmetryGraphQL.Assemblies>)
         }
 
         model.customProperties.add(Descriptor);
-        model._staticPropertyData.__AssemblySymmetry__ = AssemblySymmetry(db);
+        model._staticPropertyData.__RCSBAssemblySymmetry__ = AssemblySymmetry(db);
         return true;
     }
 
     export function get(model: Model): AssemblySymmetry | undefined {
-        return model._staticPropertyData.__AssemblySymmetry__;
+        return model._staticPropertyData.__RCSBAssemblySymmetry__;
     }
 }
\ No newline at end of file