all basic functionality implemented