Created as a submission for the coursera course project.