diff --git a/src/engine/runtime.js b/src/engine/runtime.js
index 041ee625c..803069c56 100644
--- a/src/engine/runtime.js
+++ b/src/engine/runtime.js
@@ -382,6 +382,10 @@ Runtime.prototype.greenFlag = function () {
     this.stopAll();
     this.ioDevices.clock.resetProjectTimer();
     this.clearEdgeActivatedValues();
+    // Inform all targets of the green flag.
+    for (var i = 0; i < this.targets.length; i++) {
+        this.targets[i].onGreenFlag();
+    }
     this.startHats('event_whenflagclicked');
 };
 
diff --git a/src/engine/target.js b/src/engine/target.js
index 63f90b0d9..ee1cc9089 100644
--- a/src/engine/target.js
+++ b/src/engine/target.js
@@ -27,6 +27,12 @@ function Target (blocks) {
     this.blocks = blocks;
 }
 
+/**
+ * Called when the project receives a "green flag."
+ * @abstract
+ */
+Target.prototype.onGreenFlag = function () {};
+
 /**
  * Return a human-readable name for this target.
  * Target implementations should override this.
diff --git a/src/sprites/clone.js b/src/sprites/clone.js
index 9e4364806..1098fd16b 100644
--- a/src/sprites/clone.js
+++ b/src/sprites/clone.js
@@ -332,6 +332,14 @@ Clone.prototype.makeClone = function () {
     return newClone;
 };
 
+/**
+ * Called when the project receives a "green flag."
+ * For a clone, this clears graphic effects.
+ */
+Clone.prototype.onGreenFlag = function () {
+    this.clearEffects();
+};
+
 /**
  * Dispose of this clone, destroying any run-time properties.
  */