using defprotocol reify to implement interface
changes to project.clj