base implementation, docs added