everything written but needs testing and UI: