Base functionality achieved, some niceties to add later