Refactors
Port to reagent