still need to do documentation and make classic assumptions idiot-proof