diff --git a/projects/fire_works/shaders/generation.comp b/projects/fire_works/shaders/generation.comp
index 445c8f492d221cabaca855ff533817ca609af86c..864a9e44e5806394225cec7a769049eaea4eda35 100644
--- a/projects/fire_works/shaders/generation.comp
+++ b/projects/fire_works/shaders/generation.comp
@@ -148,7 +148,7 @@ void main() {
 
     {
         const uint tid = atomicAdd(trailIndex, 1) % trails.length();
-        const uint trailLen = 64 + int(randomData[(tid + id) % randomData.length()] * 32);
+        const uint trailLen = 96 + int(randomData[(tid + id) % randomData.length()] * 32);
 
         const uint startIndex = atomicAdd(pointIndex, trailLen) % points.length();
 
diff --git a/projects/fire_works/shaders/trail.geom b/projects/fire_works/shaders/trail.geom
index 39ab595a98f78e9d85d3906a83a591667729cebc..14299724227683105a99cf7832259d6cb4b4928e 100644
--- a/projects/fire_works/shaders/trail.geom
+++ b/projects/fire_works/shaders/trail.geom
@@ -6,7 +6,7 @@
 
 layout(points) in;
 layout (triangle_strip, max_vertices = (INSTANCE_LEN * 2)) out;
-layout(invocations = 32) in;
+layout(invocations = 8) in;
 
 #include "physics.inc"
 #include "point.inc"
@@ -44,9 +44,9 @@ void main() {
     const uint indexOffset = (gl_InvocationID * (INSTANCE_LEN - 1));
     const uint instanceIndex = startIndex + indexOffset;
 
-    uint count = INSTANCE_LEN;
+    uint count = min(INSTANCE_LEN, useCount);
 
-    if (indexOffset + INSTANCE_LEN > useCount) {
+    if ((indexOffset >= useCount) && (indexOffset + INSTANCE_LEN > useCount)) {
         count = indexOffset - useCount;
     }