bugfix, and cleaning up the code a bit