diff --git a/src/mol-geo/representation/structure/units-visual.ts b/src/mol-geo/representation/structure/units-visual.ts
index dd1eaafad5d9fdaa35bf2e193764f2714bcbec31..76c2dac24bbd51f8249216f12fc98493214b8a0b 100644
--- a/src/mol-geo/representation/structure/units-visual.ts
+++ b/src/mol-geo/representation/structure/units-visual.ts
@@ -72,7 +72,7 @@ function colorChanged(oldProps: ColorProps, newProps: ColorProps) {
 }
 
 const UnitsParams = {
-    unitKinds: MultiSelectParam<UnitKind>('Unit Kind', '', [ 'atomic', 'spheres' ], UnitKindOptions),
+    unitKinds: MultiSelectParam<UnitKind>('Unit Kind', '', ['atomic', 'spheres'], UnitKindOptions),
 }
 
 interface UnitsVisualBuilder<P extends StructureProps, G extends Geometry> {
diff --git a/src/mol-gl/renderable/direct-volume.ts b/src/mol-gl/renderable/direct-volume.ts
index 55d3143f07fa1780a59c7ec0a22eb6ff63ef6653..024848348e5bdea0cbeac1543fbc4c14fb8b83b5 100644
--- a/src/mol-gl/renderable/direct-volume.ts
+++ b/src/mol-gl/renderable/direct-volume.ts
@@ -36,8 +36,6 @@ export type DirectVolumeBaseValues = Values<DirectVolumeBaseSchema>
 
 function getInternalValues(ctx: Context, id: number, version: '100es' | '300es'): InternalValues {
     return {
-        dWebGL2: ValueCell.create(ctx.isWebGL2),
-        dGlslVersion: ValueCell.create(version),
         uObjectId: ValueCell.create(id)
     }
 }
diff --git a/src/mol-gl/renderable/lines.ts b/src/mol-gl/renderable/lines.ts
index 186772e2ea67115abd1339b24d79dd7db754cdb2..7baaa55855911ddfdfa850039b4049a818744803 100644
--- a/src/mol-gl/renderable/lines.ts
+++ b/src/mol-gl/renderable/lines.ts
@@ -28,8 +28,6 @@ export type LinesValues = Values<LinesSchema>
 export function LinesRenderable(ctx: Context, id: number, values: LinesValues, state: RenderableState): Renderable<LinesValues> {
     const schema = { ...GlobalUniformSchema, ...InternalSchema, ...LinesSchema }
     const internalValues: InternalValues = {
-        dWebGL2: ValueCell.create(ctx.isWebGL2),
-        dGlslVersion: ValueCell.create('100es'),
         uObjectId: ValueCell.create(id)
     }
     const shaderCode = LinesShaderCode
diff --git a/src/mol-gl/renderable/mesh.ts b/src/mol-gl/renderable/mesh.ts
index fd16901cc765c7ff23b52c21e5e2b044346a9f53..3d5d7d23c3dff7eb3e2fc3d274ab1118688d87fd 100644
--- a/src/mol-gl/renderable/mesh.ts
+++ b/src/mol-gl/renderable/mesh.ts
@@ -26,8 +26,6 @@ export type MeshValues = Values<MeshSchema>
 export function MeshRenderable(ctx: Context, id: number, values: MeshValues, state: RenderableState): Renderable<MeshValues> {
     const schema = { ...GlobalUniformSchema, ...InternalSchema, ...MeshSchema }
     const internalValues: InternalValues = {
-        dWebGL2: ValueCell.create(ctx.isWebGL2),
-        dGlslVersion: ValueCell.create('100es'),
         uObjectId: ValueCell.create(id)
     }
     const shaderCode = MeshShaderCode
diff --git a/src/mol-gl/renderable/points.ts b/src/mol-gl/renderable/points.ts
index f92bc00a5956f8a4e0627fb083b99fb895230624..9b5e09e2a067808f76f00f5cc549c0e3095d17c8 100644
--- a/src/mol-gl/renderable/points.ts
+++ b/src/mol-gl/renderable/points.ts
@@ -25,8 +25,6 @@ export type PointsValues = Values<PointsSchema>
 export function PointsRenderable(ctx: Context, id: number, values: PointsValues, state: RenderableState): Renderable<PointsValues> {
     const schema = { ...GlobalUniformSchema, ...InternalSchema, ...PointsSchema }
     const internalValues: InternalValues = {
-        dWebGL2: ValueCell.create(ctx.isWebGL2),
-        dGlslVersion: ValueCell.create('100es'),
         uObjectId: ValueCell.create(id)
     }
     const shaderCode = PointsShaderCode
diff --git a/src/mol-gl/renderable/schema.ts b/src/mol-gl/renderable/schema.ts
index 93b419807a9fe3cd7ea298a5c3d00a2da58a7365..fd8db0a530df4d007e36510fbd0dfc6760d40386 100644
--- a/src/mol-gl/renderable/schema.ts
+++ b/src/mol-gl/renderable/schema.ts
@@ -148,8 +148,6 @@ export type GlobalUniformSchema = typeof GlobalUniformSchema
 export type GlobalUniformValues = { [k in keyof GlobalUniformSchema]: ValueCell<any> }
 
 export const InternalSchema = {
-    dWebGL2: DefineSpec('boolean'),
-    dGlslVersion: DefineSpec('string', ['100es', '300es']),
     uObjectId: UniformSpec('i'),
 }
 export type InternalSchema = typeof InternalSchema
diff --git a/src/mol-gl/shader-code.ts b/src/mol-gl/shader-code.ts
index 93bfcab696c6e7e7e1a010aac1db3d1f36b93d89..fc0bc7eede630a92e93613fac0ec3bd3accfee0a 100644
--- a/src/mol-gl/shader-code.ts
+++ b/src/mol-gl/shader-code.ts
@@ -6,6 +6,7 @@
 
 import { ValueCell } from 'mol-util';
 import { idFactory } from 'mol-util/id-factory';
+import { Context } from './webgl/context';
 
 export type DefineKind = 'boolean' | 'string' | 'number'
 export type DefineType = boolean | string
@@ -73,6 +74,9 @@ function getDefinesCode (defines: ShaderDefines) {
     return lines.join('\n') + '\n'
 }
 
+const glsl100FragPrefix = `#extension GL_OES_standard_derivatives : enable
+`
+
 const glsl300VertPrefix = `#version 300 es
 #define attribute in
 #define varying out
@@ -87,11 +91,11 @@ out highp vec4 out_FragColor;
 #define texture2D texture
 `
 
-export function addShaderDefines(defines: ShaderDefines, shaders: ShaderCode): ShaderCode {
-    const isGlsl300es = defines.dGlslVersion && defines.dGlslVersion.ref.value === '300es'
+export function addShaderDefines(ctx: Context, defines: ShaderDefines, shaders: ShaderCode): ShaderCode {
+    const { isWebGL2 } = ctx
     const header = getDefinesCode(defines)
-    const vertPrefix = isGlsl300es ? glsl300VertPrefix : ''
-    const fragPrefix = isGlsl300es ? glsl300FragPrefix : ''
+    const vertPrefix = isWebGL2 ? glsl300VertPrefix : ''
+    const fragPrefix = isWebGL2 ? glsl300FragPrefix : glsl100FragPrefix
     return {
         id: shaderCodeId(),
         vert: `${vertPrefix}${header}${shaders.vert}`,
diff --git a/src/mol-gl/shader/mesh.frag b/src/mol-gl/shader/mesh.frag
index 5b6a6e7218aa4d896bed9a19df9692d36bf9f366..ce0233e3b80d9e30bd2aebaac2708bc7c84408ef 100644
--- a/src/mol-gl/shader/mesh.frag
+++ b/src/mol-gl/shader/mesh.frag
@@ -4,10 +4,6 @@
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  */
 
-#ifdef dFlatShaded
-    #extension GL_OES_standard_derivatives : enable
-#endif
-
 precision highp float;
 precision highp int;
 
diff --git a/src/mol-gl/webgl/program.ts b/src/mol-gl/webgl/program.ts
index 34fa9501e2ca78895a1789634ccb70b5702dcd46..39a90f7c0aa58d9329709cc51bc6c781b0f587a7 100644
--- a/src/mol-gl/webgl/program.ts
+++ b/src/mol-gl/webgl/program.ts
@@ -61,7 +61,7 @@ export function createProgram(ctx: Context, props: ProgramProps): Program {
         throw new Error('Could not create WebGL program')
     }
 
-    const shaderCode = addShaderDefines(defineValues, _shaderCode)
+    const shaderCode = addShaderDefines(ctx, defineValues, _shaderCode)
     const vertShaderRef = shaderCache.get(ctx, { type: 'vert', source: shaderCode.vert })
     const fragShaderRef = shaderCache.get(ctx, { type: 'frag', source: shaderCode.frag })