Rework to use interface{} throughout