diff --git a/arm_compute/runtime/CL/CLHelpers.h b/arm_compute/runtime/CL/CLHelpers.h
new file mode 100644
index 0000000..f3b11f8
--- /dev/null
+++ b/arm_compute/runtime/CL/CLHelpers.h
@@ -0,0 +1,41 @@
+/*
+ * 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_CL_HELPERS_H__
+#define __ARM_COMPUTE_CL_HELPERS_H__
+
+#include "arm_compute/core/CL/OpenCL.h"
+
+namespace arm_compute
+{
+/** This function creates an OpenCL context and a device.
+ *
+ * @note In debug builds, the function will automatically enable cl_arm_printf if the driver/device supports it.
+ *
+ * @return A std::tuple where the first element is the opencl context, the second element is the opencl device
+ *         and the third one an error code. The error code will be CL_SUCCESS upon successful creation, otherwise
+ *         a value telling why the function failed.
+ */
+std::tuple<cl::Context, cl::Device, cl_int> create_opencl_context_and_device();
+} // namespace arm_compute
+#endif /* __ARM_COMPUTE_CL_HELPERS_H__ */
diff --git a/arm_compute/runtime/CL/CLScheduler.h b/arm_compute/runtime/CL/CLScheduler.h
index 663f78a..53cb88a 100644
--- a/arm_compute/runtime/CL/CLScheduler.h
+++ b/arm_compute/runtime/CL/CLScheduler.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018 ARM Limited.
+ * Copyright (c) 2016-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -59,6 +59,14 @@
      * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr)
      */
     void default_init(ICLTuner *cl_tuner = nullptr);
+    /** Initialises the scheduler with context and device provided by the user
+     *
+     * @param[in] device   OpenCL device to be used
+     * @param[in] ctx      OpenCL ctx to be used
+     * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr)
+     */
+    void default_init_with_context(cl::Device &device, cl::Context &ctx, ICLTuner *cl_tuner = nullptr);
+
     /** Schedule the execution of the passed kernel if possible.
      *
      * @param[in] kernel Kernel to execute.
@@ -74,14 +82,7 @@
      * @param[in] cl_tuner (Optional) Pointer to OpenCL tuner (default=nullptr)
      *                     Note: It is caller's responsibility to release the allocated memory for CLTuner
      */
-    void init(cl::Context context, cl::CommandQueue queue, cl::Device device, ICLTuner *cl_tuner = nullptr)
-    {
-        set_context(context);
-        _queue          = std::move(queue);
-        _target         = get_target_from_device(device);
-        _is_initialised = true;
-        _cl_tuner       = cl_tuner;
-    }
+    void init(cl::Context context, cl::CommandQueue queue, const cl::Device &device, ICLTuner *cl_tuner = nullptr);
 
     /** Accessor for the associated CL context.
      *
@@ -117,11 +118,7 @@
      *
      * @param[in] context A CL context.
      */
-    void set_context(cl::Context context)
-    {
-        _context = std::move(context);
-        CLKernelLibrary::get().set_context(_context);
-    }
+    void set_context(cl::Context context);
 
     /** Accessor to set the CL command queue to be used by the scheduler.
      *
