added bunch of stuff but haven't tested it yet