diff --git a/src/mol-data/util/chunked-array.ts b/src/mol-data/util/chunked-array.ts
index bd4dd10867fce9c72076b12055524ab0e1de21a9..f7fa1ed91f7de64fa62ab173c1590d5b0de0ffd9 100644
--- a/src/mol-data/util/chunked-array.ts
+++ b/src/mol-data/util/chunked-array.ts
@@ -77,6 +77,15 @@ namespace ChunkedArray {
         return array.elementCount++;
     }
 
+    export function addRepeat<T>(array: ChunkedArray<T, 1>, n: number, x: T) {
+        for (let i = 0; i < n; i++) {
+            if (array.currentIndex >= array.currentSize) allocateNext(array);
+            array.currentChunk[array.currentIndex++] = x;
+            array.elementCount++;
+        }
+        return array.elementCount;
+    }
+
     export function addMany<T>(array: ChunkedArray<T, any>, data: ArrayLike<T>) {
         const { elementSize } = array;
         for (let i = 0, _i = data.length; i < _i; i += elementSize) {
diff --git a/src/mol-geo/geometry/mesh/builder/tube.ts b/src/mol-geo/geometry/mesh/builder/tube.ts
index 5eabb36f68052eec636f177b82e7386369d0019a..f4d5d78c8807bbb0e9f4cebfe1d21e447691bdb3 100644
--- a/src/mol-geo/geometry/mesh/builder/tube.ts
+++ b/src/mol-geo/geometry/mesh/builder/tube.ts
@@ -131,5 +131,5 @@ export function addTube(builder: MeshBuilder, controlPoints: ArrayLike<number>,
     }
 
     const addedVertexCount = (linearSegments + 1) * radialSegments + (startCap ? radialSegments + 1 : 0) + (endCap ? radialSegments + 1 : 0)
-    for (let i = 0, il = addedVertexCount; i < il; ++i) ChunkedArray.add(groups, currentGroup)
+    ChunkedArray.addRepeat(groups, addedVertexCount, currentGroup)
 }
\ No newline at end of file