Add initial implementation Working version but requires commenting and maybe some better error handling