complete rewrite
merging