diff --git a/SafeExamBrowser.Server.Contracts/Properties/AssemblyInfo.cs b/SafeExamBrowser.Server.Contracts/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..a7ff1883
--- /dev/null
+++ b/SafeExamBrowser.Server.Contracts/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+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("SafeExamBrowser.Server.Contracts")]
+[assembly: AssemblyDescription("Safe Exam Browser")]
+[assembly: AssemblyCompany("ETH Zürich")]
+[assembly: AssemblyProduct("SafeExamBrowser.Server.Contracts")]
+[assembly: AssemblyCopyright("Copyright © 2020 ETH Zürich, Educational Development and Technology (LET)")]
+
+// 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("db701e6f-bddc-4cec-b662-335a9dc11809")]
+
+// 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")]
+[assembly: AssemblyInformationalVersion("1.0.0.0")]
diff --git a/SafeExamBrowser.Server.Contracts/SafeExamBrowser.Server.Contracts.csproj b/SafeExamBrowser.Server.Contracts/SafeExamBrowser.Server.Contracts.csproj
new file mode 100644
index 00000000..840a50bc
--- /dev/null
+++ b/SafeExamBrowser.Server.Contracts/SafeExamBrowser.Server.Contracts.csproj
@@ -0,0 +1,60 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}
+ Library
+ Properties
+ SafeExamBrowser.Server.Contracts
+ SafeExamBrowser.Server.Contracts
+ v4.7.2
+ 512
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SafeExamBrowser.Server/Properties/AssemblyInfo.cs b/SafeExamBrowser.Server/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..f34bfb7d
--- /dev/null
+++ b/SafeExamBrowser.Server/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+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("SafeExamBrowser.Server")]
+[assembly: AssemblyDescription("Safe Exam Browser")]
+[assembly: AssemblyCompany("ETH Zürich")]
+[assembly: AssemblyProduct("SafeExamBrowser.Server")]
+[assembly: AssemblyCopyright("Copyright © 2020 ETH Zürich, Educational Development and Technology (LET)")]
+
+// 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("46edbde0-58b4-4725-9783-0c55c3d49c0c")]
+
+// 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")]
+[assembly: AssemblyInformationalVersion("1.0.0.0")]
diff --git a/SafeExamBrowser.Server/SafeExamBrowser.Server.csproj b/SafeExamBrowser.Server/SafeExamBrowser.Server.csproj
new file mode 100644
index 00000000..a855638f
--- /dev/null
+++ b/SafeExamBrowser.Server/SafeExamBrowser.Server.csproj
@@ -0,0 +1,60 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}
+ Library
+ Properties
+ SafeExamBrowser.Server
+ SafeExamBrowser.Server
+ v4.7.2
+ 512
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/SafeExamBrowser.sln b/SafeExamBrowser.sln
index fd76cfd1..30d728b1 100644
--- a/SafeExamBrowser.sln
+++ b/SafeExamBrowser.sln
@@ -104,6 +104,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Browser.Uni
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Applications", "SafeExamBrowser.Applications\SafeExamBrowser.Applications.csproj", "{A113E68F-1209-4689-981A-15C554B2DF4E}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Server", "SafeExamBrowser.Server\SafeExamBrowser.Server.csproj", "{46EDBDE0-58B4-4725-9783-0C55C3D49C0C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SafeExamBrowser.Server.Contracts", "SafeExamBrowser.Server.Contracts\SafeExamBrowser.Server.Contracts.csproj", "{DB701E6F-BDDC-4CEC-B662-335A9DC11809}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
@@ -447,6 +451,22 @@ Global
{A113E68F-1209-4689-981A-15C554B2DF4E}.Release|x64.Build.0 = Release|x64
{A113E68F-1209-4689-981A-15C554B2DF4E}.Release|x86.ActiveCfg = Release|x86
{A113E68F-1209-4689-981A-15C554B2DF4E}.Release|x86.Build.0 = Release|x86
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Debug|x64.ActiveCfg = Debug|x64
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Debug|x64.Build.0 = Debug|x64
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Debug|x86.ActiveCfg = Debug|x86
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Debug|x86.Build.0 = Debug|x86
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Release|x64.ActiveCfg = Release|x64
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Release|x64.Build.0 = Release|x64
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Release|x86.ActiveCfg = Release|x86
+ {46EDBDE0-58B4-4725-9783-0C55C3D49C0C}.Release|x86.Build.0 = Release|x86
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Debug|x64.ActiveCfg = Debug|x64
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Debug|x64.Build.0 = Debug|x64
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Debug|x86.ActiveCfg = Debug|x86
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Debug|x86.Build.0 = Debug|x86
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Release|x64.ActiveCfg = Release|x64
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Release|x64.Build.0 = Release|x64
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Release|x86.ActiveCfg = Release|x86
+ {DB701E6F-BDDC-4CEC-B662-335A9DC11809}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE