Second commit, some update, incomplete
Third commit, barebone functionality works, incomplete