diff --git a/.gitignore b/.gitignore
index ffd00f7..0eb3cb4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+# Custom Items
+latest-commit-hash.txt
+
 # ---> C Sharp
 # Build Folders (you can keep bin if you'd like, to store dlls and pdbs)
 [Bb]in/
diff --git a/SpritePacker.sln b/SpritePacker.sln
index 73251c1..d0803a3 100644
--- a/SpritePacker.sln
+++ b/SpritePacker.sln
@@ -6,6 +6,7 @@ EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5C9D36DD-3962-45BF-938E-BE1E258053EC}"
 	ProjectSection(SolutionItems) = preProject
 		README.md = README.md
+		.gitignore = .gitignore
 	EndProjectSection
 EndProject
 Global
diff --git a/SpritePacker/Help.txt b/SpritePacker/Help.txt
index 3fb82a1..6da2e5a 100644
--- a/SpritePacker/Help.txt
+++ b/SpritePacker/Help.txt
@@ -1,4 +1,5 @@
-﻿SpritePacker, by Starbeamrainbowlabs
+﻿SpritePacker v{version}, by Starbeamrainbowlabs
+Built at {build-time} from git commit {commit-hash}
 
 Usage:
     mono ./SpritePacker.exe [flags] [filenames]
diff --git a/SpritePacker/Program.cs b/SpritePacker/Program.cs
index 2da5ec7..02a1e0c 100644
--- a/SpritePacker/Program.cs
+++ b/SpritePacker/Program.cs
@@ -10,24 +10,24 @@ namespace SpritePacker
 	{
 		public static void Main(string[] args)
 		{
+			Utilities.GetProgramBuildDate();
 			List<string> values = new List<string>();
 			for(int i = 0; i < args.Length; i++)
 			{
 				switch(args[i])
 				{
 					case "--help":
-						/*
-						string[] resFiles = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
-						foreach (string str in resFiles)
-							Console.WriteLine("[{0}]", str);
-						*/
-
-						Assembly asm = Assembly.GetExecutingAssembly();
-						Stream stream = asm.GetManifestResourceStream("SpritePacker.Help.txt");
-						StreamReader source = new StreamReader(stream);
-						Console.Write(source.ReadToEnd());
-						source.Dispose();
-						stream.Dispose();
+						string helpText = Utilities.GetEmbeddedResourceContent("SpritePacker.Help.txt");
+						string commitHash = Utilities.GetEmbeddedResourceContent("SpritePacker.latest-commit-hash.txt").Trim();
+						Dictionary<string, string> templateValues = new Dictionary<string, string>() {
+							{ "version", Utilities.GetProgramVersion().ToString() },
+							{ "build-time", Utilities.GetProgramBuildDate().ToString("dd/MM/yyyy h:mmtt") },
+							{ "commit-hash", commitHash.Substring(commitHash.Length - 7) }
+						};
+						foreach (KeyValuePair<string, string> replacePair in templateValues)
+							helpText = helpText.Replace(string.Format("{{{0}}}", replacePair.Key), replacePair.Value);
+						
+						Console.WriteLine(helpText);
 						return;
 					case "--version":
 						Console.WriteLine("Version text coming soon!");
diff --git a/SpritePacker/SpritePacker.csproj b/SpritePacker/SpritePacker.csproj
index 590fc7f..2d421a7 100644
--- a/SpritePacker/SpritePacker.csproj
+++ b/SpritePacker/SpritePacker.csproj
@@ -29,6 +29,9 @@
     <Externalconsole>true</Externalconsole>
     <PlatformTarget>x86</PlatformTarget>
   </PropertyGroup>
+  <PropertyGroup>
+    <PreBuildEvent>git rev-parse HEAD &gt;../../latest-commit-hash.txt</PreBuildEvent>
+  </PropertyGroup>
   <ItemGroup>
     <Reference Include="System" />
     <Reference Include="System.Drawing" />
@@ -38,9 +41,11 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Packer.cs" />
     <Compile Include="Sprite.cs" />
+    <Compile Include="Utilities.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
     <EmbeddedResource Include="Help.txt" />
+    <EmbeddedResource Include="latest-commit-hash.txt" />
   </ItemGroup>
-</Project>
\ No newline at end of file
+</Project>
diff --git a/SpritePacker/Utilities.cs b/SpritePacker/Utilities.cs
new file mode 100644
index 0000000..2a75c0f
--- /dev/null
+++ b/SpritePacker/Utilities.cs
@@ -0,0 +1,47 @@
+﻿using System;
+using System.Dynamic;
+using System.Reflection;
+using System.IO;
+
+namespace SpritePacker
+{
+	public class Utilities
+	{
+		public static string[] GetEmbeddedResourceList()
+		{
+			return System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
+		}
+
+		public static void PrintEnbeddedResourceList()
+		{
+			string[] resFiles = GetEmbeddedResourceList();
+			foreach (string str in resFiles)
+				Console.WriteLine("[{0}]", str);
+		}
+
+		public static string GetEmbeddedResourceContent(string resourceName)
+		{
+			Assembly asm = Assembly.GetExecutingAssembly();
+			Stream stream = asm.GetManifestResourceStream(resourceName);
+			StreamReader source = new StreamReader(stream);
+			string fileContent = source.ReadToEnd();
+			source.Dispose();
+			stream.Dispose();
+			return fileContent;
+		}
+
+		public static DateTime GetProgramBuildDate()
+		{
+			Version asmVersion = GetProgramVersion();
+			return new DateTime(2000, 1, 1).Add(new TimeSpan(
+				TimeSpan.TicksPerDay * asmVersion.Build + 
+				TimeSpan.TicksPerSecond * asmVersion.Revision * 2
+			));
+		}
+
+		public static Version GetProgramVersion()
+		{
+			return Assembly.GetEntryAssembly().GetName().Version;
+		}
+	}
+}
\ No newline at end of file
