diff --git a/arm_compute/runtime/CL/CLRuntimeContext.h b/arm_compute/runtime/CL/CLRuntimeContext.h
new file mode 100644
index 0000000..971dfd2
--- /dev/null
+++ b/arm_compute/runtime/CL/CLRuntimeContext.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2019 ARM Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef __ARM_COMPUTE_CLRUNTIME_CONTEXT_H__
+#define __ARM_COMPUTE_CLRUNTIME_CONTEXT_H__
+
+#include "arm_compute/core/CL/CLCoreRuntimeContext.h"
+#include "arm_compute/core/CL/CLKernelLibrary.h"
+#include "arm_compute/core/CL/OpenCL.h"
+#include "arm_compute/runtime/CL/CLScheduler.h"
+#include "arm_compute/runtime/CL/CLTuner.h"
+#include "arm_compute/runtime/IScheduler.h"
+#include "arm_compute/runtime/RuntimeContext.h"
+
+namespace arm_compute
+{
+/** Runtime context */
+class CLRuntimeContext : public RuntimeContext
+{
+public:
+    /** Default Constructor */
+    CLRuntimeContext();
+    /** Destructor */
+    ~CLRuntimeContext() = default;
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    CLRuntimeContext(const CLRuntimeContext &) = delete;
+    /** Default move constructor */
+    CLRuntimeContext(CLRuntimeContext &&) = default;
+    /** Prevent instances of this class from being copied (As this class contains pointers) */
+    CLRuntimeContext &operator=(const CLRuntimeContext &) = delete;
+    /** Default move assignment operator */
+    CLRuntimeContext &operator=(CLRuntimeContext &&) = default;
+    /** CPU Scheduler setter */
+    void set_gpu_scheduler(CLScheduler *scheduler);
+
+    // Inherited overridden methods
+    CLScheduler          *gpu_scheduler();
+    CLKernelLibrary      &kernel_library();
+    CLCoreRuntimeContext *core_runtime_context();
+
+private:
+    std::unique_ptr<CLScheduler> _gpu_owned_scheduler{ nullptr };
+    CLScheduler                 *_gpu_scheduler{ nullptr };
+    CLTuner                      _tuner{ false };
+    CLKernelLibrary              _kernel_lib{};
+    CLSymbols                    _symbols{};
+    CLCoreRuntimeContext         _core_context{};
+};
+} // namespace arm_compute
+#endif /*__ARM_COMPUTE_CLRUNTIME_CONTEXT_H__ */
