adding first working version
adding first working implementation