WIP finish the implementation, needs some polish