Completed working first version. Still needs icons and code comments.