Refactoring and cleaning up

Also moved some exception logic out into celluloid