complete rewrite for performance - now uses curve scheduling (setInterval)
0.2.0