changed a lot. see diff.