rewriting gem
all api features implemented