diff --git a/examples/processing/triangle16_attractor/Particle.pde b/examples/processing/triangle16_attractor/Particle.pde
index ab8145912aa8c5f2dad9859ab9833a797ad4bef6..59f33dcc676d97804243c2861cb48911ab63f868 100644
--- a/examples/processing/triangle16_attractor/Particle.pde
+++ b/examples/processing/triangle16_attractor/Particle.pde
@@ -35,5 +35,10 @@ class Particle
     d.mult(coefficient / max(1, d.magSq()));
     velocity.add(d);
   }
+
+  float energy()
+  {
+    return velocity.magSq();
+  }
 }
 
diff --git a/examples/processing/triangle16_attractor/triangle16_attractor.pde b/examples/processing/triangle16_attractor/triangle16_attractor.pde
index 421c6ce576a2f8bf148e7132ef7b1651a67c42d1..138c3e3141acd4a8baaa243aa937f0acc45f8914 100644
--- a/examples/processing/triangle16_attractor/triangle16_attractor.pde
+++ b/examples/processing/triangle16_attractor/triangle16_attractor.pde
@@ -1,11 +1,12 @@
 // Particle system with attraction to each corner of the triangle.
 // Spawns centered around a random point, lives out a cycle and dies; the cycle repeats.
 
-int numParticles = 20;
+int numParticles = 10;
 float cornerCoefficient = 0.2;
 int integrationSteps = 20;
 float maxOpacity = 100;
-float epochStep = 0.002;
+float stepFast = 1.0 / 40;
+float stepSlow = 1.0 / 1000;
 
 OPC opc;
 PImage dot;
@@ -49,13 +50,13 @@ void beginEpoch()
   epoch = 0;
  
   // Center of bundle
-  float s = 0.3;
+  float s = 0.5;
   float cx = width * (0.5 + random(-s, s));
   float cy = height * (0.5 + random(-s, s));
  
   // Half-width of particle bundle
-  float w = width * 0.02;
-  
+  float w = width * 0.2;
+ 
   particles = new Particle[numParticles];
   for (int i = 0; i < particles.length; i++) {
     color rgb = colors.pixels[int(random(0, colors.width * colors.height))];
@@ -68,12 +69,40 @@ void beginEpoch()
 void draw()
 {
   background(0);
-  epoch += epochStep;
+  
+  // How much energy is still left?
+  float energy = 0;
+  for (int i = 0; i < particles.length; i++) {
+    energy += particles[i].energy();
+  }
+  
+  // How bright is our brightest pixel?
+  float brightness = 0;
+  for (int i = 0; i < opc.pixelLocations.length; i++) {
+    color rgb = opc.getPixel(i);
+    brightness = max(brightness, max(red(rgb), max(blue(rgb), green(rgb))));
+  }
+  brightness /= 255.0;
+  
+  text("Energy: " + energy, 2, 12);
+  text("Brightness: " + brightness, 2, 25);
+
+  // What's interesting? Can we maintain high brightness and high energy?
+  // These are normally conflicting goals. If we've managed to balance the two,
+  // keep going to see how it turns out.
+  if (energy > 1.5 && brightness > 0.8) {
+ 
+    // Time moves slower when we're interested
+    epoch += stepSlow;
+    text("+", 2, 40);
+  } else {
+    epoch += stepFast;
+  }
   
   if (epoch > 1) {
     beginEpoch();
   }
-  
+    
   for (int step = 0; step < integrationSteps; step++) {
     for (int i = 0; i < particles.length; i++) {
       particles[i].integrate();