Compiled using tutorials from alexsears, colonc and scotch.io