diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1a52bf384c81e38a291f36a0ad13191c99357ccb
--- /dev/null
+++ b/.github/workflows/lint.yml
@@ -0,0 +1,18 @@
+on:
+  push:
+  pull_request:
+
+jobs:
+  eslint:
+    name: eslint
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@v1
+    - name: install node v12
+      uses: actions/setup-node@v1
+      with:
+        node-version: 12
+    - name: yarn install
+      run: yarn install
+    - name: eslint
+      uses: icrawl/action-eslint@v1
\ No newline at end of file
diff --git a/data/rcsb-graphql/codegen.yml b/data/rcsb-graphql/codegen.yml
index 726a47193be3b15ac8085a40842d210863f722c0..d42a711fef623fe14bc2189a9f92466b65b219a9 100644
--- a/data/rcsb-graphql/codegen.yml
+++ b/data/rcsb-graphql/codegen.yml
@@ -1,4 +1,4 @@
-schema: https://data-beta.rcsb.org/graphql
+schema: https://data.rcsb.org/graphql
 documents: './src/mol-model-props/rcsb/graphql/symmetry.gql.ts'
 generates:
   './src/mol-model-props/rcsb/graphql/types.ts':
diff --git a/package-lock.json b/package-lock.json
index 215f72bdf42f6a34bba0cb24a63b1b4e8117e302..d6547d6854e46f89bd92643e8e040a937b282ca6 100644
Binary files a/package-lock.json and b/package-lock.json differ
diff --git a/package.json b/package.json
index 0ca273aad9eae9b9afcdbd83cc4a4aea56777cd5..0730fe89e05d7348caff149e6e23345cfb3194c2 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "molstar",
-  "version": "0.6.4",
+  "version": "0.6.7",
   "description": "A comprehensive macromolecular library.",
   "homepage": "https://github.com/molstar/molstar#readme",
   "repository": {
diff --git a/src/mol-model-props/computed/interactions/hydrogen-bonds.ts b/src/mol-model-props/computed/interactions/hydrogen-bonds.ts
index 1be7234bc0c5daa92ebc976cdc0d054dfa3b44dc..a47f444e04823e1dfdfd2103cbe7639f9e38a4f3 100644
--- a/src/mol-model-props/computed/interactions/hydrogen-bonds.ts
+++ b/src/mol-model-props/computed/interactions/hydrogen-bonds.ts
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
  *
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  * @author Fred Ludlow <Fred.Ludlow@astx.com>
@@ -32,7 +32,7 @@ type GeometryProps = PD.Values<GeometryParams>
 
 const HydrogenBondsParams = {
     ...GeometryParams,
-    water: PD.Boolean(true, { description: 'Include water-to-water hydrogen bonds' }),
+    water: PD.Boolean(false, { description: 'Include water-to-water hydrogen bonds' }),
     sulfurDistanceMax: PD.Numeric(4.1, { min: 1, max: 5, step: 0.1 }),
 }
 type HydrogenBondsParams = typeof HydrogenBondsParams
@@ -174,9 +174,8 @@ function addUnitHydrogenAcceptors(structure: Structure, unit: Unit.Atomic, build
     }
 }
 
-
 function isWater(unit: Unit.Atomic, index: StructureElement.UnitIndex) {
-    return unit.model.atomicHierarchy.derived.residue.moleculeType[unit.elements[index]] === MoleculeType.Water
+    return unit.model.atomicHierarchy.derived.residue.moleculeType[unit.residueIndex[unit.elements[index]]] === MoleculeType.Water
 }
 
 function isBackbone(unit: Unit.Atomic, index: StructureElement.UnitIndex) {
diff --git a/src/mol-model-props/computed/interactions/metal.ts b/src/mol-model-props/computed/interactions/metal.ts
index 93c9a41222da1f7514c7d315a72c7db64cc20a54..80d7881c716e7582d3cdb1474543748dd1f9af05 100644
--- a/src/mol-model-props/computed/interactions/metal.ts
+++ b/src/mol-model-props/computed/interactions/metal.ts
@@ -94,7 +94,7 @@ function addMetalBinding(structure: Structure, unit: Unit.Atomic, builder: Featu
                     dative = true
                     ionic = true
                 }
-            } else if (element === Elements.S && 'CYS' === resname) {
+            } else if (element === Elements.S && (resname === 'CYS' || resname === 'MET')) {
                 dative = true
                 ionic = true
             } else if (element === Elements.N) {
diff --git a/src/mol-model-props/computed/representations/interactions.ts b/src/mol-model-props/computed/representations/interactions.ts
index 53a206f95e0d8d59b156db20a677fec50eba97a0..a77f08af3024f8f49519110e202569e09dda65ba 100644
--- a/src/mol-model-props/computed/representations/interactions.ts
+++ b/src/mol-model-props/computed/representations/interactions.ts
@@ -24,7 +24,7 @@ export const InteractionsParams = {
     ...InteractionsIntraUnitParams,
     ...InteractionsInterUnitParams,
     unitKinds: getUnitKindsParam(['atomic']),
-    sizeFactor: PD.Numeric(0.15, { min: 0.01, max: 1, step: 0.01 }),
+    sizeFactor: PD.Numeric(0.2, { min: 0.01, max: 1, step: 0.01 }),
     visuals: PD.MultiSelect(['intra-unit', 'inter-unit'], PD.objectToOptions(InteractionsVisuals)),
 }
 export type InteractionsParams = typeof InteractionsParams
diff --git a/src/mol-model-props/rcsb/assembly-symmetry.ts b/src/mol-model-props/rcsb/assembly-symmetry.ts
index a34b12cc7ee38d9c7af7b320f5d90ac10abcd448..cfcabec150049365c2576535cf1f9d15699b1a67 100644
--- a/src/mol-model-props/rcsb/assembly-symmetry.ts
+++ b/src/mol-model-props/rcsb/assembly-symmetry.ts
@@ -47,7 +47,7 @@ export namespace AssemblySymmetry {
         Representation = 'rcsb-assembly-symmetry-3d'
     }
 
-    export const DefaultServerUrl = 'https://data-beta.rcsb.org/graphql'
+    export const DefaultServerUrl = 'https://data.rcsb.org/graphql'
 
     export function isApplicable(structure?: Structure): boolean {
         return (
diff --git a/src/mol-model-props/rcsb/graphql/types.ts b/src/mol-model-props/rcsb/graphql/types.ts
index 591e83afc715d47a0e70955350c9405f700678d2..d62903be282531a1bdf3561de7fc22f1e8ec9612 100644
--- a/src/mol-model-props/rcsb/graphql/types.ts
+++ b/src/mol-model-props/rcsb/graphql/types.ts
@@ -1,7 +1,7 @@
 /* eslint-disable */
 export type Maybe<T> = T | null;
 
-// Generated in 2020-03-30T11:30:30-07:00
+// Generated in 2020-04-08T16:22:40-07:00
 
 /** All built-in and custom scalars, mapped to their actual values */
 export type Scalars = {
@@ -800,6 +800,8 @@ export type PdbxAuditRevisionCategory = {
 
 export type PdbxAuditRevisionDetails = {
   readonly data_content_type: Scalars['String'];
+  readonly description?: Maybe<Scalars['String']>;
+  readonly details?: Maybe<Scalars['String']>;
   readonly ordinal: Scalars['Int'];
   readonly provider?: Maybe<Scalars['String']>;
   readonly revision_ordinal: Scalars['Int'];
diff --git a/src/mol-plugin-state/manager/loci-label.ts b/src/mol-plugin-state/manager/loci-label.ts
index ddcee6ee9f7b3e87626bd2451a6389baca83aaf4..adabbd1c74657094076593b45169b22d24777336 100644
--- a/src/mol-plugin-state/manager/loci-label.ts
+++ b/src/mol-plugin-state/manager/loci-label.ts
@@ -15,6 +15,8 @@ export type LociLabel = JSX.Element | string
 export type LociLabelProvider = {
     label: (loci: Loci, repr?: Representation<any>) => LociLabel | undefined
     group?: (entry: LociLabel) => string
+    /** Labels from providers with higher priority are shown first */
+    priority?: number
 }
 
 export class LociLabelManager {
@@ -22,6 +24,7 @@ export class LociLabelManager {
 
     addProvider(provider: LociLabelProvider) {
         this.providers.push(provider);
+        this.providers.sort((a, b) => (b.priority || 0) - (a.priority || 0))
         this.isDirty = true
         this.showLabels()
     }
diff --git a/src/mol-plugin-ui/controls.tsx b/src/mol-plugin-ui/controls.tsx
index 9f1b80a33e7f5b44e98ec4233d4b2b5f3e3dc31e..63409ca18b847924a66639e1fadcbf01d42cdff7 100644
--- a/src/mol-plugin-ui/controls.tsx
+++ b/src/mol-plugin-ui/controls.tsx
@@ -251,9 +251,14 @@ export class SelectionViewportControls extends PluginUIComponent {
         this.subscribe(this.plugin.behaviors.interaction.selectionMode, () => this.forceUpdate());
     }
 
+    onMouseMove = (e: React.MouseEvent) => {
+        // ignore mouse moves when no button is held
+        if (e.buttons === 0) e.stopPropagation()
+    }
+
     render() {
         if (!this.plugin.selectionMode) return null;
-        return <div className='msp-selection-viewport-controls'>
+        return <div className='msp-selection-viewport-controls' onMouseMove={this.onMouseMove}>
             <StructureSelectionActionsControls />
         </div>;
     }
diff --git a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts
index dfe688f6190a4a2c0744845b9e5f0cd4c9b2804a..3d2cad2628ee2dce12dc17ea9a840b6c5efb7c3b 100644
--- a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts
+++ b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts
@@ -181,7 +181,8 @@ export const AssemblySymmetryPreset = StructureRepresentationPresetProvider({
         }
 
         const assemblySymmetry = await tryCreateAssemblySymmetry(plugin, structureCell);
-        const preset = await PresetStructureRepresentations.auto.apply(ref, { ...params, globalThemeName: Tag.Cluster as any }, plugin);
+        const globalThemeName = assemblySymmetry.isOk ? Tag.Cluster as any : undefined
+        const preset = await PresetStructureRepresentations.auto.apply(ref, { ...params, globalThemeName }, plugin);
 
         return { components: preset.components, representations: { ...preset.representations, assemblySymmetry } };
     }
diff --git a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx
index bab4c360a346efece4eb70623f3074ca0a7f1f40..df69ba8f7e6fe0d301267ae809cc644716a92775 100644
--- a/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx
+++ b/src/mol-plugin/behavior/dynamic/custom-props/rcsb/ui/assembly-symmetry.tsx
@@ -104,15 +104,16 @@ export class AssemblySymmetryControls extends CollapsableControls<{}, AssemblySy
             await this.plugin.builders.structure.insertStructureProperties(s.cell, params);
         }
 
-        const components = this.plugin.managers.structure.hierarchy.currentComponentGroups[0];
-        if (values.symmetryIndex === -1) {
-            const name = components[0]?.representations[0]?.cell.transform.params?.colorTheme.name;
-            if (name === AssemblySymmetry.Tag.Cluster) {
-                await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: 'default' })
+        for (const components of this.plugin.managers.structure.hierarchy.currentComponentGroups) {
+            if (values.symmetryIndex === -1) {
+                const name = components[0]?.representations[0]?.cell.transform.params?.colorTheme.name;
+                if (name === AssemblySymmetry.Tag.Cluster) {
+                    await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: 'default' })
+                }
+            } else {
+                tryCreateAssemblySymmetry(this.plugin, s.cell)
+                await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: AssemblySymmetry.Tag.Cluster as any })
             }
-        } else {
-            tryCreateAssemblySymmetry(this.plugin, s.cell)
-            await this.plugin.managers.structure.component.updateRepresentationsTheme(components, { color: AssemblySymmetry.Tag.Cluster as any })
         }
     }
 
diff --git a/src/mol-plugin/behavior/dynamic/representation.ts b/src/mol-plugin/behavior/dynamic/representation.ts
index a87f63f7396d572d9dfc0c6a360110b9e233288a..41b0ad9abefdb2b2376131fd5a21ed910753f281 100644
--- a/src/mol-plugin/behavior/dynamic/representation.ts
+++ b/src/mol-plugin/behavior/dynamic/representation.ts
@@ -186,7 +186,8 @@ export const DefaultLociLabelProvider = PluginBehavior.create({
                 label.push(lociLabel(loci))
                 return label.join('</br>')
             },
-            group: (label: LociLabel) => label.toString().replace(/Model [0-9]+/g, 'Models')
+            group: (label: LociLabel) => label.toString().replace(/Model [0-9]+/g, 'Models'),
+            priority: 100
         };
         register() { this.ctx.managers.lociLabels.addProvider(this.f); }
         unregister() { this.ctx.managers.lociLabels.removeProvider(this.f); }