better OO, docs
merge