diff --git a/src/runtime/CL/CLMemory.cpp b/src/runtime/CL/CLMemory.cpp
index 534c4f9..bbc513d 100644
--- a/src/runtime/CL/CLMemory.cpp
+++ b/src/runtime/CL/CLMemory.cpp
@@ -61,7 +61,7 @@
 
 void CLMemory::create_empty_region()
 {
-    _region_owned = std::make_shared<CLBufferMemoryRegion>(cl::Context::getDefault(), CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE, 0);
+    _region_owned = std::make_shared<CLBufferMemoryRegion>(cl::Context(), CL_MEM_ALLOC_HOST_PTR | CL_MEM_READ_WRITE, 0);
     _region       = _region_owned.get();
 }
 } // namespace arm_compute
\ No newline at end of file
diff --git a/src/runtime/CL/CLScheduler.cpp b/src/runtime/CL/CLScheduler.cpp
index fdae615..c348dfa 100644
--- a/src/runtime/CL/CLScheduler.cpp
+++ b/src/runtime/CL/CLScheduler.cpp
@@ -28,6 +28,16 @@
 
 using namespace arm_compute;
 
+#if defined(ARM_COMPUTE_DEBUG_ENABLED)
+namespace
+{
+void printf_callback(const char *buffer, unsigned int len, size_t complete, void *user_data)
+{
+    printf("%.*s", len, buffer);
+}
+} // namespace
+#endif /* defined(ARM_COMPUTE_DEBUG_ENABLED) */
+
 std::once_flag CLScheduler::_initialize_symbols;
 
 CLScheduler::CLScheduler()
@@ -42,6 +52,44 @@
     return scheduler;
 }
 
+void CLScheduler::default_init(ICLTuner *cl_tuner)
+{
+    if(!_is_initialised)
+    {
+        cl::Context ctx              = cl::Context::getDefault();
+        auto        queue_properties = cl::CommandQueue::getDefault().getInfo<CL_QUEUE_PROPERTIES>(nullptr);
+#if defined(ARM_COMPUTE_DEBUG_ENABLED)
+        // Query devices in the context for cl_arm_printf support
+        std::vector<cl::Device> def_platform_devices;
+        cl::Platform::getDefault().getDevices(CL_DEVICE_TYPE_DEFAULT, &def_platform_devices);
+
+        if(device_supports_extension(def_platform_devices[0], "cl_arm_printf"))
+        {
+            // Create a cl_context with a printf_callback and user specified buffer size.
+            cl_context_properties properties[] =
+            {
+                CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>(cl::Platform::get()()),
+                // Enable a printf callback function for this context.
+                CL_PRINTF_CALLBACK_ARM, reinterpret_cast<cl_context_properties>(printf_callback),
+                // Request a minimum printf buffer size of 4MB for devices in the
+                // context that support this extension.
+                CL_PRINTF_BUFFERSIZE_ARM, 0x1000,
+                0
+            };
+            ctx = cl::Context(CL_DEVICE_TYPE_DEFAULT, properties);
+        }
+#endif // defined(ARM_COMPUTE_DEBUG_ENABLED)
+
+        cl::CommandQueue queue = cl::CommandQueue(ctx, cl::Device::getDefault(), queue_properties);
+        CLKernelLibrary::get().init("./cl_kernels/", ctx, cl::Device::getDefault());
+        init(ctx, queue, cl::Device::getDefault(), cl_tuner);
+    }
+    else
+    {
+        _cl_tuner = cl_tuner;
+    }
+}
+
 void CLScheduler::enqueue(ICLKernel &kernel, bool flush)
 {
     ARM_COMPUTE_ERROR_ON_MSG(!_is_initialised,
