added quite a bit more stuff