significant reworking based on input recieved from initial beta tester