diff --git a/src/mol-plugin/ui/sequence/polymer.ts b/src/mol-plugin/ui/sequence/polymer.ts
index dc02ba205c75944ea53ae6e2d63457e17a399656..a6302fd24498601fb5dc8924dc91be8bd6c2f8c8 100644
--- a/src/mol-plugin/ui/sequence/polymer.ts
+++ b/src/mol-plugin/ui/sequence/polymer.ts
@@ -8,11 +8,24 @@ import { StructureSelection, StructureQuery, Structure, Queries, StructureProper
 import { SequenceWrapper } from './util';
 import { OrderedSet, Interval } from '../../../mol-data/int';
 import { Loci } from '../../../mol-model/loci';
+import { Sequence } from '../../../mol-model/sequence';
+import { Color } from '../../../mol-util/color';
 
 export type StructureUnit = { structure: Structure, unit: Unit }
 
 export class PolymerSequenceWrapper extends SequenceWrapper<StructureUnit> {
-    private readonly location = StructureElement.create()
+    private readonly location: StructureElement
+    private readonly sequence: Sequence
+
+    seqId(i: number) {
+        return this.sequence.offset + i + 1
+    }
+    residueLabel(i: number) {
+        return this.sequence.sequence[i]
+    }
+    residueColor(i: number) {
+        return Color(0)
+    }
 
     eachResidue(loci: Loci, apply: (interval: Interval) => boolean) {
         let changed = false
@@ -47,15 +60,15 @@ export class PolymerSequenceWrapper extends SequenceWrapper<StructureUnit> {
         return StructureSelection.toLoci2(StructureQuery.run(query, this.data.structure));
     }
 
-    constructor(readonly data: StructureUnit) {
-        super()
+    constructor(data: StructureUnit) {
+        const l = StructureElement.create(data.unit, data.unit.elements[0])
+        const sequence = data.unit.model.sequence.byEntityKey[SP.entity.key(l)].sequence
+        const markerArray = new Uint8Array(sequence.sequence.length)
 
-        const l = this.location
-        l.unit = data.unit
-        l.element = data.unit.elements[0]
+        super(data, markerArray, sequence.sequence.length)
 
-        this.sequence = data.unit.model.sequence.byEntityKey[SP.entity.key(l)].sequence
-        this.markerArray = new Uint8Array(this.sequence.sequence.length)
+        this.sequence = sequence
+        this.location = StructureElement.create()
     }
 }
 
diff --git a/src/mol-plugin/ui/sequence/residue.tsx b/src/mol-plugin/ui/sequence/residue.tsx
index d5329a90be40d8a03f8b8dc026e0142431a1850b..1d543db7742ee63acff131146ba66aa4b134d9ba 100644
--- a/src/mol-plugin/ui/sequence/residue.tsx
+++ b/src/mol-plugin/ui/sequence/residue.tsx
@@ -9,8 +9,9 @@ import * as React from 'react'
 import { PurePluginUIComponent } from '../base';
 import { getButtons, getModifiers } from '../../../mol-util/input/input-observer';
 import { Sequence } from './sequence';
+import { Color } from '../../../mol-util/color';
 
-export class Residue extends PurePluginUIComponent<{ seqId: number, letter: string, parent: Sequence<any>, marker: number }> {
+export class Residue extends PurePluginUIComponent<{ seqId: number, label: string, parent: Sequence<any>, marker: number, color: Color }> {
 
     mouseEnter = (e: React.MouseEvent) => {
         const modifiers = getModifiers(e.nativeEvent)
@@ -41,8 +42,11 @@ export class Residue extends PurePluginUIComponent<{ seqId: number, letter: stri
             onMouseEnter={this.mouseEnter}
             onMouseLeave={this.mouseLeave}
             onMouseDown={this.mouseDown}
-            style={{ backgroundColor: this.getBackgroundColor() }}>
-            {this.props.letter}
+            style={{
+                color: Color.toStyle(this.props.color),
+                backgroundColor: this.getBackgroundColor()
+            }}>
+            {this.props.label}
         </span>;
     }
 }
\ No newline at end of file
diff --git a/src/mol-plugin/ui/sequence/sequence.tsx b/src/mol-plugin/ui/sequence/sequence.tsx
index fcc6d1e7bc9bbe6719909bf5c9179acab3c5466b..913cbd9e2c2596a22d88be481c7740339604c468 100644
--- a/src/mol-plugin/ui/sequence/sequence.tsx
+++ b/src/mol-plugin/ui/sequence/sequence.tsx
@@ -88,11 +88,18 @@ export class Sequence<P extends SequenceProps> extends PluginUIComponent<P, Sequ
 
     render() {
         const { markerData } = this.state;
-        const { offset, sequence } = this.props.sequenceWrapper.sequence;
+        const sw = this.props.sequenceWrapper
 
         const elems: JSX.Element[] = [];
-        for (let i = 0, _i = sequence.length; i < _i; i++) {
-            elems[elems.length] = <Residue seqId={offset + i + 1} letter={sequence[i]} parent={this} marker={markerData.value[i]} key={i} />;
+        for (let i = 0, il = sw.length; i < il; ++i) {
+            elems[elems.length] = <Residue
+                seqId={sw.seqId(i)}
+                label={sw.residueLabel(i)}
+                parent={this}
+                marker={markerData.value[i]}
+                color={sw.residueColor(i)}
+                key={i}
+            />;
         }
 
         return <div
diff --git a/src/mol-plugin/ui/sequence/util.ts b/src/mol-plugin/ui/sequence/util.ts
index 68b4e8d567a4777bffd4e9f75c91c52538696783..91813be7a032dc231b226d4eeabce52e0a75ce70 100644
--- a/src/mol-plugin/ui/sequence/util.ts
+++ b/src/mol-plugin/ui/sequence/util.ts
@@ -8,15 +8,15 @@ import { Interval } from '../../../mol-data/int';
 import { Loci } from '../../../mol-model/loci';
 import { MarkerAction, applyMarkerAction } from '../../../mol-util/marker-action';
 import { StructureElement } from '../../../mol-model/structure';
-import { Sequence } from '../../../mol-model/sequence';
+import { Color } from '../../../mol-util/color';
 
 export { SequenceWrapper }
 
 abstract class SequenceWrapper<D> {
-    label: string
-    data: D
-    markerArray: Uint8Array
-    sequence: Sequence
+    abstract seqId(i: number): number
+    abstract residueLabel(i: number): string
+    abstract residueColor(i: number): Color
+
     abstract eachResidue(loci: Loci, apply: (interval: Interval) => boolean): boolean
     abstract getLoci(seqId: number): StructureElement.Loci
 
@@ -25,6 +25,10 @@ abstract class SequenceWrapper<D> {
             return applyMarkerAction(this.markerArray, i, action)
         })
     }
+
+    constructor(readonly data: D, readonly markerArray: Uint8Array, readonly length: number) {
+
+    }
 }
 
 namespace SequenceWrapper {