Cloned from CS2410 for continued development