Make Communicator.Close() work when not Init'd
Better job cleaning up on app kill, also refactor