fleshed out some features but untested