Implemented by Anthony Duncan