updated quite a bit... need to add finishing touches