diff --git a/src/mol-repr/structure/complex-visual.ts b/src/mol-repr/structure/complex-visual.ts
index b803f9c9bcc8c9bb86575db9b23107eff0fdf74c..26cecd0a336cb686547a50fbabc0498d02089900 100644
--- a/src/mol-repr/structure/complex-visual.ts
+++ b/src/mol-repr/structure/complex-visual.ts
@@ -35,6 +35,7 @@ import { StructureParams, StructureMeshParams, StructureTextParams, StructureDir
 import { Clipping } from '../../mol-theme/clipping';
 import { TextureMesh } from '../../mol-geo/geometry/texture-mesh/texture-mesh';
 import { WebGLContext } from '../../mol-gl/webgl/context';
+import { isPromiseLike } from '../../mol-util/type-helpers';
 
 export interface  ComplexVisual<P extends StructureParams> extends Visual<Structure, P> { }
 
@@ -213,7 +214,7 @@ export function ComplexVisual<G extends Geometry, P extends StructureParams & Ge
             prepareUpdate(theme, props, structure || currentStructure);
             if (updateState.createGeometry) {
                 const newGeometry = createGeometry(ctx, newStructure, newTheme, newProps, geometry);
-                if (newGeometry instanceof Promise) {
+                if (isPromiseLike(newGeometry)) {
                     return newGeometry.then(g => {
                         update(g);
                         finalize(ctx);
diff --git a/src/mol-repr/structure/units-visual.ts b/src/mol-repr/structure/units-visual.ts
index 513d3e084291065c45f67846d46bc1eac999c39d..1fb2795ac64e9cb9e6b2fc5ecd5e22c76c7380c7 100644
--- a/src/mol-repr/structure/units-visual.ts
+++ b/src/mol-repr/structure/units-visual.ts
@@ -39,6 +39,7 @@ import { SizeValues } from '../../mol-gl/renderable/schema';
 import { StructureParams, StructureMeshParams, StructureSpheresParams, StructurePointsParams, StructureLinesParams, StructureTextParams, StructureDirectVolumeParams, StructureTextureMeshParams, StructureCylindersParams } from './params';
 import { Clipping } from '../../mol-theme/clipping';
 import { WebGLContext } from '../../mol-gl/webgl/context';
+import { isPromiseLike } from '../../mol-util/type-helpers';
 
 export type StructureGroup = { structure: Structure, group: Unit.SymmetryGroup }
 
@@ -269,7 +270,7 @@ export function UnitsVisual<G extends Geometry, P extends StructureParams & Geom
             prepareUpdate(theme, props, structureGroup || currentStructureGroup);
             if (updateState.createGeometry) {
                 const newGeometry = _createGeometry(ctx, newStructureGroup.group.units[0], newStructureGroup.structure, newTheme, newProps, geometry);
-                if (newGeometry instanceof Promise) {
+                if (isPromiseLike(newGeometry)) {
                     return newGeometry.then(g => {
                         update(g);
                         finalize(ctx);
diff --git a/src/mol-repr/volume/representation.ts b/src/mol-repr/volume/representation.ts
index a5edc4ba3392f92b2599c07ccf6b201f80593aad..5591c176ac268af960f155404d09b852ea53ae75 100644
--- a/src/mol-repr/volume/representation.ts
+++ b/src/mol-repr/volume/representation.ts
@@ -31,6 +31,7 @@ import { Task } from '../../mol-task';
 import { SizeValues } from '../../mol-gl/renderable/schema';
 import { Clipping } from '../../mol-theme/clipping';
 import { WebGLContext } from '../../mol-gl/webgl/context';
+import { isPromiseLike } from '../../mol-util/type-helpers';
 
 export interface VolumeVisual<P extends VolumeParams> extends Visual<Volume, P> { }
 
@@ -173,7 +174,7 @@ export function VolumeVisual<G extends Geometry, P extends VolumeParams & Geomet
             prepareUpdate(theme, props, volume || currentVolume);
             if (updateState.createGeometry) {
                 const newGeometry = createGeometry(ctx, newVolume, newTheme, newProps, geometry);
-                return newGeometry instanceof Promise ? newGeometry.then(update) : update(newGeometry);
+                return isPromiseLike(newGeometry) ? newGeometry.then(update) : update(newGeometry);
             } else {
                 update();
             }
diff --git a/src/mol-util/type-helpers.ts b/src/mol-util/type-helpers.ts
index c4e96eb46d6563b14a5fe8a4e4bb6370f409f2ea..d597aa4d29b9d4c76d5036e1dadce697328b744d 100644
--- a/src/mol-util/type-helpers.ts
+++ b/src/mol-util/type-helpers.ts
@@ -29,4 +29,8 @@ export interface FiniteArray<T, L extends number = number> extends ReadonlyArray
 
 export function assertUnreachable(x: never): never {
     throw new Error('unreachable');
+}
+
+export function isPromiseLike<T = any>(x: any): x is Promise<T> {
+    return typeof x?.then === 'function';
 }
\ No newline at end of file