Rewritten for OO