added pretty much all known functionality