Updated to use Canvas