updated so it returns a hash