added more features to the initial, code is dirty though
added more features to the initial, code is dirty though