changed the step result class to abstract, will enable lazy evaluation