Implement the basic forward version