improvements, but needs a lot of refinement