changed abstract slightly, reading through changed parts