Mostly finished. Requires surface setup debug.