pulling out more engine-y code for canvas