diff --git a/src/mol-gl/_spec/renderable.spec.ts b/src/mol-gl/_spec/renderable.spec.ts
index a0e486863709e31b396583cc8bf9dceef338dfe0..9053ec9d130ac52dd20f2aad02565bc4fc6e029c 100644
--- a/src/mol-gl/_spec/renderable.spec.ts
+++ b/src/mol-gl/_spec/renderable.spec.ts
@@ -29,12 +29,10 @@ describe('renderable', () => {
             2, 0, 0, 0
         ])
 
-        const bs = calculateBoundingSphere({
-            position,
-            positionCount: position.length / 3,
-            transform,
-            transformCount: transform.length / 16
-        })
+        const bs = calculateBoundingSphere(
+            position, position.length / 3,
+            transform, transform.length / 16
+        )
 
         expect(bs.radius).toBe(1.5)
         expect(bs.center).toEqual([1.5, 0.0, 0.0])
diff --git a/src/mol-gl/renderable.ts b/src/mol-gl/renderable.ts
index 1e69c67553d7a53b7474f51688840f4e6354a243..9d458fe4cbda39892e2555992bdfc213dc79a2f3 100644
--- a/src/mol-gl/renderable.ts
+++ b/src/mol-gl/renderable.ts
@@ -8,7 +8,7 @@ import { Program } from './webgl/program';
 import { RenderableValues, Values, RenderableSchema, BaseValues } from './renderable/schema';
 import { RenderVariant, RenderItem } from './webgl/render-item';
 import { Sphere3D } from 'mol-math/geometry';
-import { calculateBoundingSphere } from './renderable/util';
+import { calculateBoundingSphereFromValues } from './renderable/util';
 
 export type RenderableState = {
     visible: boolean
@@ -27,11 +27,6 @@ export interface Renderable<T extends RenderableValues & BaseValues> {
 }
 
 export function createRenderable<T extends Values<RenderableSchema> & BaseValues>(renderItem: RenderItem, values: T, state: RenderableState): Renderable<T> {
-    const position = values.aPosition.ref.value
-    const transform = values.aTransform.ref.value
-    const positionCount = values.drawCount.ref.value / 3 / 3
-    const transformCount = values.instanceCount.ref.value
-
     let boundingSphere: Sphere3D | undefined
     
     return {
@@ -39,7 +34,7 @@ export function createRenderable<T extends Values<RenderableSchema> & BaseValues
         get state () { return state },
         get boundingSphere () {
             if (boundingSphere) return boundingSphere
-            boundingSphere = calculateBoundingSphere({ position, positionCount, transform, transformCount })
+            boundingSphere = calculateBoundingSphereFromValues(values)
             return boundingSphere
         },
 
diff --git a/src/mol-gl/renderable/util.ts b/src/mol-gl/renderable/util.ts
index 650831214d131cf15433d8f15407efb82b56d933..86f791611b5e64057ab7a1aee6a4714ef4476471 100644
--- a/src/mol-gl/renderable/util.ts
+++ b/src/mol-gl/renderable/util.ts
@@ -6,6 +6,7 @@
 
 import { Sphere3D } from 'mol-math/geometry'
 import { Mat4, Vec3 } from 'mol-math/linear-algebra'
+import { ValueCell } from 'mol-util';
 
 export function calculateTextureInfo (n: number, itemSize: number) {
     const sqN = Math.sqrt(n * itemSize)
@@ -32,15 +33,28 @@ export function fillSerial<T extends Helpers.NumberArray> (array: T) {
     return array
 }
 
-export interface PositionData {
-    position: Float32Array
-    positionCount: number,
-    transform: Float32Array,
-    transformCount: number,
+export interface PositionValues {
+    aPosition: ValueCell<Float32Array>
+    drawCount: ValueCell<number>,
+    aTransform: ValueCell<Float32Array>,
+    instanceCount: ValueCell<number>,
 }
 
-export function calculateBoundingSphere(data: PositionData): Sphere3D {
-    const { position, positionCount, transform, transformCount } = data
+function getPositionDataFromValues(values: PositionValues) {
+    return {
+        position: values.aPosition.ref.value,
+        positionCount: values.drawCount.ref.value / 3 / 3,
+        transform: values.aTransform.ref.value,
+        transformCount: values.instanceCount.ref.value
+    }
+}
+
+export function calculateBoundingSphereFromValues(values: PositionValues){
+    const { position, positionCount, transform, transformCount } = getPositionDataFromValues(values)
+    return calculateBoundingSphere(position, positionCount, transform, transformCount)
+}
+
+export function calculateBoundingSphere(position: Float32Array, positionCount: number, transform: Float32Array, transformCount: number): Sphere3D {
 
     const m = Mat4.zero()