diff --git a/PixelHub-Server/PixelHub/PixelBot.cs b/PixelHub-Server/PixelHub/PixelBot.cs
index a20d11a..ceaaa3f 100644
--- a/PixelHub-Server/PixelHub/PixelBot.cs
+++ b/PixelHub-Server/PixelHub/PixelBot.cs
@@ -54,7 +54,7 @@ namespace PixelHub.Server
 		/// Sends the given command to the remote PixelBot.
 		/// </summary>
 		/// <param name="command">The command to send.</param>
-		public async Task Send(PixelCommand command)
+		public async Task Send(PixelMessage command)
 		{
 			byte[] message = command.AsCompiledCommand();
 			await client.GetStream().WriteAsync(message, 0, message.Length);
diff --git a/PixelHub-Server/PixelHub/PixelHub.csproj b/PixelHub-Server/PixelHub/PixelHub.csproj
index 54616e4..bc1910e 100644
--- a/PixelHub-Server/PixelHub/PixelHub.csproj
+++ b/PixelHub-Server/PixelHub/PixelHub.csproj
@@ -40,15 +40,15 @@
     <Compile Include="SBRL.Utilities\ForgetTask.cs" />
     <Compile Include="SBRL.Utilities\Utilities.cs" />
     <Compile Include="SBRL.Utilities\PrefixedWriter.cs" />
-    <Compile Include="PixelCommand.cs" />
     <Compile Include="PixelBot.cs" />
     <Compile Include="NetTools.cs" />
-    <Compile Include="PixelCommands\ResetCommand.cs" />
-    <Compile Include="PixelCommands\HandshakeRequestCommand.cs" />
+    <Compile Include="PixelMessage.cs" />
+    <Compile Include="PixelMessages\HandshakeRequestMessage.cs" />
+    <Compile Include="PixelMessages\ResetMessage.cs" />
   </ItemGroup>
   <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
   <ItemGroup>
     <Folder Include="SBRL.Utilities\" />
-    <Folder Include="PixelCommands\" />
+    <Folder Include="PixelMessages\" />
   </ItemGroup>
 </Project>
diff --git a/PixelHub-Server/PixelHub/PixelCommand.cs b/PixelHub-Server/PixelHub/PixelMessage.cs
similarity index 98%
rename from PixelHub-Server/PixelHub/PixelCommand.cs
rename to PixelHub-Server/PixelHub/PixelMessage.cs
index 16afa62..b649516 100644
--- a/PixelHub-Server/PixelHub/PixelCommand.cs
+++ b/PixelHub-Server/PixelHub/PixelMessage.cs
@@ -34,7 +34,7 @@ namespace PixelHub
 	/// <summary>
 	/// Specifies a single command that is to be sent to a PixelBot.
 	/// </summary>
-	public abstract class PixelCommand
+	public abstract class PixelMessage
 	{
 		/// <summary>
 		/// A random number generator. Useful for generating default message ids.
@@ -95,7 +95,7 @@ namespace PixelHub
 		/// </summary>
 		public abstract byte[] Payload { get; protected set; }
 
-		public PixelCommand()
+		public PixelMessage()
 		{
 			byte[] rawMessageId = new byte[sizeof(uint)];
 			rand.NextBytes(rawMessageId);
diff --git a/PixelHub-Server/PixelHub/PixelMessages/HandshakeRequestMessage.cs b/PixelHub-Server/PixelHub/PixelMessages/HandshakeRequestMessage.cs
new file mode 100644
index 0000000..53c2aab
--- /dev/null
+++ b/PixelHub-Server/PixelHub/PixelMessages/HandshakeRequestMessage.cs
@@ -0,0 +1,29 @@
+﻿using System;
+using System.Text;
+
+namespace PixelHub.Server.PixelMessages
+{
+	public class HandshakeRequestMessage : PixelMessage
+	{
+		/// <summary>
+		/// The type of PixelBot the client thinks it is. Rather like a user-agent string actually.
+		/// </summary>
+		public string PixelBotType = string.Empty;
+
+		public override byte[] Payload {
+			get {
+				return Encoding.UTF8.GetBytes(PixelBotType);
+			}
+			protected set {
+				PixelBotType = Encoding.UTF8.GetString(value);
+			}
+		}
+
+		public new MessageTypes MessageType { get; private set; } = MessageTypes.HandshakeRequest;
+		
+		public HandshakeRequestMessage()
+		{
+		}
+	}
+}
+
diff --git a/PixelHub-Server/PixelHub/PixelCommands/ResetCommand.cs b/PixelHub-Server/PixelHub/PixelMessages/ResetMessage.cs
similarity index 81%
rename from PixelHub-Server/PixelHub/PixelCommands/ResetCommand.cs
rename to PixelHub-Server/PixelHub/PixelMessages/ResetMessage.cs
index 97cd389..599b942 100644
--- a/PixelHub-Server/PixelHub/PixelCommands/ResetCommand.cs
+++ b/PixelHub-Server/PixelHub/PixelMessages/ResetMessage.cs
@@ -1,12 +1,12 @@
 ﻿using System;
 
-namespace PixelHub.Server.PixelCommands
+namespace PixelHub.Server.PixelMessages
 {
 	/// <summary>
 	/// Hard-resets the PixelBot. Useful if something has gone wrong, or to reset it's internal state.
 	/// Note that this will cause the PixelBot to drop it's connection!
 	/// </summary>
-	public class ResetCommand : PixelCommand
+	public class ResetMessage : PixelMessage
 	{
 		public override byte[] Payload {
 			get {
@@ -19,7 +19,7 @@ namespace PixelHub.Server.PixelCommands
 
 		public new MessageTypes MessageType { get; private set; } = MessageTypes.Reset;
 
-		public ResetCommand()
+		public ResetMessage()
 		{
 			
 		}
