diff --git a/SafeExamBrowser.Client.UnitTests/Behaviour/Operations/ClientControllerOperationTests.cs b/SafeExamBrowser.Client.UnitTests/Behaviour/Operations/ClientControllerOperationTests.cs
index 41970c76..ebffe149 100644
--- a/SafeExamBrowser.Client.UnitTests/Behaviour/Operations/ClientControllerOperationTests.cs
+++ b/SafeExamBrowser.Client.UnitTests/Behaviour/Operations/ClientControllerOperationTests.cs
@@ -9,7 +9,7 @@
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using SafeExamBrowser.Client.Behaviour.Operations;
-using SafeExamBrowser.Contracts.Client;
+using SafeExamBrowser.Contracts.Behaviour;
 using SafeExamBrowser.Contracts.Logging;
 using SafeExamBrowser.Contracts.UserInterface;
 
diff --git a/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs b/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs
index 6755d3cd..dcf71857 100644
--- a/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs
+++ b/SafeExamBrowser.Client.UnitTests/ClientControllerTests.cs
@@ -10,7 +10,7 @@ using System;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using Moq;
 using SafeExamBrowser.Client.Behaviour;
-using SafeExamBrowser.Contracts.Client;
+using SafeExamBrowser.Contracts.Behaviour;
 using SafeExamBrowser.Contracts.Logging;
 using SafeExamBrowser.Contracts.Monitoring;
 using SafeExamBrowser.Contracts.UserInterface.Taskbar;
diff --git a/SafeExamBrowser.Client/Behaviour/ClientController.cs b/SafeExamBrowser.Client/Behaviour/ClientController.cs
index c54f430b..eda5a1c1 100644
--- a/SafeExamBrowser.Client/Behaviour/ClientController.cs
+++ b/SafeExamBrowser.Client/Behaviour/ClientController.cs
@@ -7,7 +7,7 @@
  */
 
 using System;
-using SafeExamBrowser.Contracts.Client;
+using SafeExamBrowser.Contracts.Behaviour;
 using SafeExamBrowser.Contracts.Logging;
 using SafeExamBrowser.Contracts.Monitoring;
 using SafeExamBrowser.Contracts.UserInterface.Taskbar;
diff --git a/SafeExamBrowser.Client/Behaviour/Operations/ClientControllerOperation.cs b/SafeExamBrowser.Client/Behaviour/Operations/ClientControllerOperation.cs
index bbd34ceb..b48984cb 100644
--- a/SafeExamBrowser.Client/Behaviour/Operations/ClientControllerOperation.cs
+++ b/SafeExamBrowser.Client/Behaviour/Operations/ClientControllerOperation.cs
@@ -7,7 +7,6 @@
  */
 
 using SafeExamBrowser.Contracts.Behaviour;
-using SafeExamBrowser.Contracts.Client;
 using SafeExamBrowser.Contracts.I18n;
 using SafeExamBrowser.Contracts.Logging;
 using SafeExamBrowser.Contracts.UserInterface;
diff --git a/SafeExamBrowser.Client/CompositionRoot.cs b/SafeExamBrowser.Client/CompositionRoot.cs
index 6ace1af4..c81d5985 100644
--- a/SafeExamBrowser.Client/CompositionRoot.cs
+++ b/SafeExamBrowser.Client/CompositionRoot.cs
@@ -11,7 +11,6 @@ using SafeExamBrowser.Browser;
 using SafeExamBrowser.Configuration;
 using SafeExamBrowser.Configuration.Settings;
 using SafeExamBrowser.Contracts.Behaviour;
-using SafeExamBrowser.Contracts.Client;
 using SafeExamBrowser.Contracts.Configuration;
 using SafeExamBrowser.Contracts.Configuration.Settings;
 using SafeExamBrowser.Contracts.I18n;
diff --git a/SafeExamBrowser.Contracts/Client/IClientController.cs b/SafeExamBrowser.Contracts/Behaviour/IClientController.cs
similarity index 92%
rename from SafeExamBrowser.Contracts/Client/IClientController.cs
rename to SafeExamBrowser.Contracts/Behaviour/IClientController.cs
index 1b828385..52efcfe9 100644
--- a/SafeExamBrowser.Contracts/Client/IClientController.cs
+++ b/SafeExamBrowser.Contracts/Behaviour/IClientController.cs
@@ -6,7 +6,7 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-namespace SafeExamBrowser.Contracts.Client
+namespace SafeExamBrowser.Contracts.Behaviour
 {
 	public interface IClientController
 	{
diff --git a/SafeExamBrowser.Contracts/Runtime/IRuntimeController.cs b/SafeExamBrowser.Contracts/Behaviour/IRuntimeController.cs
similarity index 54%
rename from SafeExamBrowser.Contracts/Runtime/IRuntimeController.cs
rename to SafeExamBrowser.Contracts/Behaviour/IRuntimeController.cs
index c6452974..675b1776 100644
--- a/SafeExamBrowser.Contracts/Runtime/IRuntimeController.cs
+++ b/SafeExamBrowser.Contracts/Behaviour/IRuntimeController.cs
@@ -1,23 +1,18 @@
 /*
  * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
- * 
+ *
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-namespace SafeExamBrowser.Contracts.Runtime
+namespace SafeExamBrowser.Contracts.Behaviour
 {
-	public interface IRuntimeController
+	public interface IRuntimeController : IStartupController
 	{
 		/// 
-		/// Wires up and starts the application event handling.
+		/// Reverts any changes performed during the startup or runtime and releases all used resources.
 		/// 
-		void Start();
-
-		/// 
-		/// Stops the event handling and removes all event subscriptions.
-		/// 
-		void Stop();
+		void FinalizeApplication();
 	}
 }
diff --git a/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj b/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj
index 3b391f27..c8f5181c 100644
--- a/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj
+++ b/SafeExamBrowser.Contracts/SafeExamBrowser.Contracts.csproj
@@ -54,16 +54,16 @@
   
   
     
+    
     
     
     
     
     
     
-    
     
     
-    
+    
     
     
     
@@ -122,6 +122,8 @@
     
     
   
-  
+  
+    
+  
   
 
\ No newline at end of file
diff --git a/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/RuntimeControllerOperationTests.cs b/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/RuntimeControllerOperationTests.cs
deleted file mode 100644
index f6db421b..00000000
--- a/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/RuntimeControllerOperationTests.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Moq;
-using SafeExamBrowser.Contracts.Logging;
-using SafeExamBrowser.Contracts.Runtime;
-using SafeExamBrowser.Contracts.UserInterface;
-using SafeExamBrowser.Runtime.Behaviour.Operations;
-
-namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
-{
-	[TestClass]
-	public class RuntimeControllerOperationTests
-	{
-		private Mock loggerMock;
-		private Mock runtimeControllerMock;
-		private Mock splashScreenMock;
-
-		private RuntimeControllerOperation sut;
-
-		[TestInitialize]
-		public void Initialize()
-		{
-			loggerMock = new Mock();
-			runtimeControllerMock = new Mock();
-			splashScreenMock = new Mock();
-
-			sut = new RuntimeControllerOperation(runtimeControllerMock.Object, loggerMock.Object)
-			{
-				SplashScreen = splashScreenMock.Object
-			};
-		}
-
-		[TestMethod]
-		public void MustPerformCorrectly()
-		{
-			sut.Perform();
-
-			runtimeControllerMock.Verify(r => r.Start(), Times.Once);
-		}
-
-		[TestMethod]
-		public void MustRevertCorrectly()
-		{
-			sut.Revert();
-
-			runtimeControllerMock.Verify(r => r.Stop(), Times.Once);
-		}
-	}
-}
diff --git a/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/ServiceOperationTests.cs b/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/ServiceOperationTests.cs
index 10d4df4b..499af334 100644
--- a/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/ServiceOperationTests.cs
+++ b/SafeExamBrowser.Runtime.UnitTests/Behaviour/Operations/ServiceOperationTests.cs
@@ -16,7 +16,7 @@ namespace SafeExamBrowser.Runtime.UnitTests.Behaviour.Operations
 		[TestMethod]
 		public void Test()
 		{
-			// TODO
+			Assert.Fail();
 		}
 	}
 }
diff --git a/SafeExamBrowser.Runtime.UnitTests/Behaviour/RuntimeControllerTests.cs b/SafeExamBrowser.Runtime.UnitTests/Behaviour/RuntimeControllerTests.cs
new file mode 100644
index 00000000..91bd5b3d
--- /dev/null
+++ b/SafeExamBrowser.Runtime.UnitTests/Behaviour/RuntimeControllerTests.cs
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
+ * 
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+
+namespace SafeExamBrowser.Runtime.UnitTests.Behaviour
+{
+	[TestClass]
+	public class RuntimeControllerTests
+	{
+		[TestMethod]
+		public void Test()
+		{
+			Assert.Fail();
+		}
+	}
+}
diff --git a/SafeExamBrowser.Runtime.UnitTests/SafeExamBrowser.Runtime.UnitTests.csproj b/SafeExamBrowser.Runtime.UnitTests/SafeExamBrowser.Runtime.UnitTests.csproj
index e3b1a600..2b314531 100644
--- a/SafeExamBrowser.Runtime.UnitTests/SafeExamBrowser.Runtime.UnitTests.csproj
+++ b/SafeExamBrowser.Runtime.UnitTests/SafeExamBrowser.Runtime.UnitTests.csproj
@@ -81,8 +81,8 @@
   
   
     
-    
     
+    
     
   
   
diff --git a/SafeExamBrowser.Runtime/App.cs b/SafeExamBrowser.Runtime/App.cs
index f7118da0..b4a8d348 100644
--- a/SafeExamBrowser.Runtime/App.cs
+++ b/SafeExamBrowser.Runtime/App.cs
@@ -7,12 +7,9 @@
  */
 
 using System;
-using System.Collections.Generic;
 using System.ComponentModel;
-using System.Linq;
 using System.Threading;
 using System.Windows;
-using SafeExamBrowser.Contracts.Behaviour;
 
 namespace SafeExamBrowser.Runtime
 {
@@ -62,7 +59,7 @@ namespace SafeExamBrowser.Runtime
 			instances.BuildObjectGraph();
 			instances.LogStartupInformation();
 
-			var success = instances.StartupController.TryInitializeApplication(instances.StartupOperations);
+			var success = instances.RuntimeController.TryInitializeApplication(instances.StartupOperations);
 
 			if (success)
 			{
@@ -86,10 +83,8 @@ namespace SafeExamBrowser.Runtime
 
 		private void MainWindow_Closing(object sender, CancelEventArgs e)
 		{
-			var operations = new Queue(instances.StartupOperations.Reverse());
-
 			MainWindow.Hide();
-			instances.ShutdownController.FinalizeApplication(operations);
+			instances.RuntimeController.FinalizeApplication();
 		}
 	}
 }
diff --git a/SafeExamBrowser.Runtime/Behaviour/Operations/RuntimeControllerOperation.cs b/SafeExamBrowser.Runtime/Behaviour/Operations/RuntimeControllerOperation.cs
deleted file mode 100644
index 49c80c60..00000000
--- a/SafeExamBrowser.Runtime/Behaviour/Operations/RuntimeControllerOperation.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
- * 
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-using SafeExamBrowser.Contracts.Behaviour;
-using SafeExamBrowser.Contracts.I18n;
-using SafeExamBrowser.Contracts.Logging;
-using SafeExamBrowser.Contracts.Runtime;
-using SafeExamBrowser.Contracts.UserInterface;
-
-namespace SafeExamBrowser.Runtime.Behaviour.Operations
-{
-	internal class RuntimeControllerOperation : IOperation
-	{
-		private ILogger logger;
-		private IRuntimeController controller;
-
-		public bool AbortStartup { get; private set; }
-		public ISplashScreen SplashScreen { private get; set; }
-
-		public RuntimeControllerOperation(IRuntimeController controller, ILogger logger)
-		{
-			this.controller = controller;
-			this.logger = logger;
-		}
-
-		public void Perform()
-		{
-			logger.Info("Starting event handling...");
-			SplashScreen.UpdateText(TextKey.SplashScreen_StartEventHandling);
-
-			controller.Start();
-		}
-
-		public void Revert()
-		{
-			logger.Info("Stopping event handling...");
-			SplashScreen.UpdateText(TextKey.SplashScreen_StopEventHandling);
-
-			controller.Stop();
-		}
-	}
-}
diff --git a/SafeExamBrowser.Runtime/Behaviour/RuntimeController.cs b/SafeExamBrowser.Runtime/Behaviour/RuntimeController.cs
index c6d89845..f040316e 100644
--- a/SafeExamBrowser.Runtime/Behaviour/RuntimeController.cs
+++ b/SafeExamBrowser.Runtime/Behaviour/RuntimeController.cs
@@ -6,31 +6,72 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+using System.Collections.Generic;
+using System.Linq;
+using SafeExamBrowser.Contracts.Behaviour;
+using SafeExamBrowser.Contracts.Communication;
 using SafeExamBrowser.Contracts.Configuration.Settings;
 using SafeExamBrowser.Contracts.Logging;
-using SafeExamBrowser.Contracts.Runtime;
 
 namespace SafeExamBrowser.Runtime.Behaviour
 {
 	internal class RuntimeController : IRuntimeController
 	{
+		private ICommunicationHost serviceProxy;
+		private Queue operations;
 		private ILogger logger;
+		private ISettingsRepository settingsRepository;
+		private IShutdownController shutdownController;
+		private IStartupController startupController;
 
 		public ISettings Settings { private get; set; }
 
-		public RuntimeController(ILogger logger)
+		public RuntimeController(
+			ICommunicationHost serviceProxy,
+			ILogger logger,
+			ISettingsRepository settingsRepository,
+			IShutdownController shutdownController,
+			IStartupController startupController)
 		{
+			this.serviceProxy = serviceProxy;
 			this.logger = logger;
+			this.settingsRepository = settingsRepository;
+			this.shutdownController = shutdownController;
+			this.startupController = startupController;
+
+			operations = new Queue();
 		}
 
-		public void Start()
+		public bool TryInitializeApplication(Queue operations)
 		{
-			// TODO
+			operations = new Queue(operations);
+
+			var success = startupController.TryInitializeApplication(operations);
+
+			if (success)
+			{
+				Start();
+			}
+
+			return success;
 		}
 
-		public void Stop()
+		public void FinalizeApplication()
 		{
-			// TODO
+			Stop();
+			shutdownController.FinalizeApplication(new Queue(operations.Reverse()));
+		}
+
+		private void Start()
+		{
+			logger.Info("Starting event handling...");
+			// TODO SplashScreen.UpdateText(TextKey.SplashScreen_StartEventHandling);
+		}
+
+		private void Stop()
+		{
+			logger.Info("Stopping event handling...");
+			// TODO SplashScreen.UpdateText(TextKey.SplashScreen_StopEventHandling);
 		}
 	}
 }
diff --git a/SafeExamBrowser.Runtime/CompositionRoot.cs b/SafeExamBrowser.Runtime/CompositionRoot.cs
index 02ed3b77..d667158b 100644
--- a/SafeExamBrowser.Runtime/CompositionRoot.cs
+++ b/SafeExamBrowser.Runtime/CompositionRoot.cs
@@ -33,8 +33,7 @@ namespace SafeExamBrowser.Runtime
 		private RuntimeInfo runtimeInfo;
 		private ISystemInfo systemInfo;
 
-		internal IShutdownController ShutdownController { get; private set; }
-		internal IStartupController StartupController { get; private set; }
+		internal IRuntimeController RuntimeController { get; private set; }
 		internal Queue StartupOperations { get; private set; }
 
 		internal void BuildObjectGraph()
@@ -52,18 +51,17 @@ namespace SafeExamBrowser.Runtime
 			InitializeLogging();
 
 			var text = new Text(logger);
-			var runtimeController = new RuntimeController(new ModuleLogger(logger, typeof(RuntimeController)));
 			var serviceProxy = new CommunicationHostProxy(new ModuleLogger(logger, typeof(CommunicationHostProxy)), "net.pipe://localhost/safeexambrowser/service");
+			var shutdownController = new ShutdownController(logger, runtimeInfo, text, uiFactory);
+			var startupController = new StartupController(logger, runtimeInfo, systemInfo, text, uiFactory);
 
-			ShutdownController = new ShutdownController(logger, runtimeInfo, text, uiFactory);
-			StartupController = new StartupController(logger, runtimeInfo, systemInfo, text, uiFactory);
+			RuntimeController = new RuntimeController(serviceProxy, new ModuleLogger(logger, typeof(RuntimeController)), settingsRepository, shutdownController, startupController);
 
 			StartupOperations = new Queue();
 			StartupOperations.Enqueue(new I18nOperation(logger, text));
 			StartupOperations.Enqueue(new ConfigurationOperation(logger, runtimeInfo, settingsRepository, text, uiFactory, args));
 			StartupOperations.Enqueue(new ServiceOperation(serviceProxy, logger, settingsRepository));
 			//StartupOperations.Enqueue(new KioskModeOperation());
-			StartupOperations.Enqueue(new RuntimeControllerOperation(runtimeController, logger));
 		}
 
 		internal void LogStartupInformation()
diff --git a/SafeExamBrowser.Runtime/SafeExamBrowser.Runtime.csproj b/SafeExamBrowser.Runtime/SafeExamBrowser.Runtime.csproj
index 2b04d1f4..8a5d9433 100644
--- a/SafeExamBrowser.Runtime/SafeExamBrowser.Runtime.csproj
+++ b/SafeExamBrowser.Runtime/SafeExamBrowser.Runtime.csproj
@@ -88,7 +88,6 @@
   
     
     
-