Adjusted way reduction type is passed around.
Got rid of protocol so I could use optional arguments