refactor out recommendations implementations
adds imperative recommendations implementation