Completed re-implementation using OOD