Implement everything except canvas rendering