 
     private function compileMeasureProgram():void
     {
-        measureProgram = filterProgramCopy(virtualMeasureProgram, virtualGetResolver);
+        measureProgram = copyProgram(virtualMeasureProgram);
+        filterProgram(virtualMeasureProgram, virtualGetResolver);
+        filterProgram(measureProgram, propertyTransformer);
     }
 
     private function compileUpdateProgram():void
     {
         resolveVirtualSetters();
-        filterProgramInPlace(updateProgram, virtualGetResolver);
-        filterProgramInPlace(updateProgram, new Max0SpanSetters());
+        filterProgram(updateProgram, virtualGetResolver);
+        filterProgram(updateProgram, new Max0SpanSetters());
         if (rounding)
         {
-            filterProgramInPlace(updateProgram, new RoundSetters());
-        }
-        filterProgramInPlace(updateProgram, propertyTransformer);
+            filterProgram(updateProgram, new RoundSetters());
+        }
+        filterProgram(updateProgram, propertyTransformer);
     }
 
     private function resolveVirtualSetters():void

    {
        if (!measureProgram) measure();
        if (!updateProgram) compileUpdateProgram();
        measuredUpdateProgram = filterProgramCopy(updateProgram, new ReadOnlyEvaluator());
        filterProgramInPlace(measuredUpdateProgram, new ArithmeticConstFolder());
        filterProgramInPlace(measuredUpdateProgram, new ArithmeticOptimizer());
    }

    public function dumpPrograms(linebuf:Array):void

        {
            copy[i] = deepCopier.filter(program[i]);
        }
        return copy;
    }
}
