diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..1ff0c423
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
diff --git a/Hermes.sln b/Hermes.sln
new file mode 100644
index 00000000..df14dd4c
--- /dev/null
+++ b/Hermes.sln
@@ -0,0 +1,40 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Portable", "src\Portable\Portable.csproj", "{6481B999-0479-4162-AC53-5936CE5FD8BF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Broker", "src\Broker\Broker.csproj", "{1397EC83-6D03-4D81-95D5-5D11C766C43A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Client", "src\Client\Client.csproj", "{D3EB8C4F-6CF4-4EB4-94E3-BCA31767AE53}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "src\Tests\Tests.csproj", "{CC70B0BB-EC87-45D0-A4AE-2462F99D7573}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1397EC83-6D03-4D81-95D5-5D11C766C43A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1397EC83-6D03-4D81-95D5-5D11C766C43A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1397EC83-6D03-4D81-95D5-5D11C766C43A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1397EC83-6D03-4D81-95D5-5D11C766C43A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D3EB8C4F-6CF4-4EB4-94E3-BCA31767AE53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D3EB8C4F-6CF4-4EB4-94E3-BCA31767AE53}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D3EB8C4F-6CF4-4EB4-94E3-BCA31767AE53}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D3EB8C4F-6CF4-4EB4-94E3-BCA31767AE53}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CC70B0BB-EC87-45D0-A4AE-2462F99D7573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CC70B0BB-EC87-45D0-A4AE-2462F99D7573}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CC70B0BB-EC87-45D0-A4AE-2462F99D7573}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CC70B0BB-EC87-45D0-A4AE-2462F99D7573}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/Broker/Broker.csproj b/src/Broker/Broker.csproj
new file mode 100644
index 00000000..946ef3fa
--- /dev/null
+++ b/src/Broker/Broker.csproj
@@ -0,0 +1,48 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {1397EC83-6D03-4D81-95D5-5D11C766C43A}
+ Library
+ Properties
+ Hermes.Broker
+ Hermes.Broker
+ v4.5
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Broker/Properties/AssemblyInfo.cs b/src/Broker/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..2382b2c4
--- /dev/null
+++ b/src/Broker/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Hermes.Broker")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Hermes.Broker")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b36456d3-fdf4-448f-9b06-547449296f23")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Client/Client.csproj b/src/Client/Client.csproj
new file mode 100644
index 00000000..087307a1
--- /dev/null
+++ b/src/Client/Client.csproj
@@ -0,0 +1,49 @@
+
+
+
+
+ 11.0
+ Debug
+ AnyCPU
+ {D3EB8C4F-6CF4-4EB4-94E3-BCA31767AE53}
+ Library
+ Properties
+ Hermes.Client
+ Hermes.Client
+ v4.5
+ Profile78
+ 512
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Client/Properties/AssemblyInfo.cs b/src/Client/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..287a092d
--- /dev/null
+++ b/src/Client/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Resources;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Hermes.Client")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Hermes.Client")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Portable/Hermes.sln b/src/Portable/Hermes.sln
new file mode 100644
index 00000000..caea1099
--- /dev/null
+++ b/src/Portable/Hermes.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30110.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Hermes.Portable", "Hermes.Portable.csproj", "{6481B999-0479-4162-AC53-5936CE5FD8BF}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/src/Portable/Portable.csproj b/src/Portable/Portable.csproj
new file mode 100644
index 00000000..fbdef82e
--- /dev/null
+++ b/src/Portable/Portable.csproj
@@ -0,0 +1,49 @@
+
+
+
+
+ 11.0
+ Debug
+ AnyCPU
+ {6481B999-0479-4162-AC53-5936CE5FD8BF}
+ Library
+ Properties
+ Hermes.Portable
+ Hermes.Portable
+ v4.5
+ Profile78
+ 512
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Portable/Properties/AssemblyInfo.cs b/src/Portable/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..47856dfb
--- /dev/null
+++ b/src/Portable/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Resources;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Hermes.Portable")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Hermes.Portable")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: NeutralResourcesLanguage("en")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Tests/Properties/AssemblyInfo.cs b/src/Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..4be2b62b
--- /dev/null
+++ b/src/Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tests")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("b89da32f-550d-443e-80e3-da92104a211d")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Tests/Tests.csproj b/src/Tests/Tests.csproj
new file mode 100644
index 00000000..a33da09e
--- /dev/null
+++ b/src/Tests/Tests.csproj
@@ -0,0 +1,71 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {CC70B0BB-EC87-45D0-A4AE-2462F99D7573}
+ Library
+ Properties
+ Tests
+ Tests
+ v4.5
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\..\packages\Moq.4.2.1402.2112\lib\net40\Moq.dll
+
+
+
+
+
+ ..\..\packages\xunit.1.9.2\lib\net20\xunit.dll
+
+
+
+
+
+
+
+ {1397ec83-6d03-4d81-95d5-5d11c766c43a}
+ Broker
+
+
+ {d3eb8c4f-6cf4-4eb4-94e3-bca31767ae53}
+ Client
+
+
+ {6481b999-0479-4162-ac53-5936ce5fd8bf}
+ Portable
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Tests/packages.config b/src/Tests/packages.config
new file mode 100644
index 00000000..29ae6e7b
--- /dev/null
+++ b/src/Tests/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file