diff --git a/arm_compute/runtime/CL/CLScheduler.h b/arm_compute/runtime/CL/CLScheduler.h
index 26b459c..bdd779b 100644
--- a/arm_compute/runtime/CL/CLScheduler.h
+++ b/arm_compute/runtime/CL/CLScheduler.h
@@ -32,16 +32,6 @@
 #include "arm_compute/core/Types.h"
 #include "arm_compute/runtime/CL/ICLTuner.h"
 
-#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);
-}
-}
-#endif /* defined(ARM_COMPUTE_DEBUG_ENABLED) */
-
 namespace arm_compute
 {
 class ICLKernel;
@@ -68,43 +58,7 @@
      *
      * @param[in] cl_tuner (Optional) Pointer to ICLTuner (default=nullptr)
      */
-    void default_init(ICLTuner *cl_tuner = nullptr)
-    {
-        if(!_is_initialised)
-        {
-#if defined(ARM_COMPUTE_DEBUG_ENABLED)
-            bool is_cl_arm_printf_supported = false;
-
-            //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);
-            is_cl_arm_printf_supported = device_supports_extension(def_platform_devices[0], "cl_arm_printf");
-
-            if(is_cl_arm_printf_supported)
-            {
-                // Create a cl_context with a printf_callback and user specified buffer size.
-                cl_context_properties properties[] =
-                {
-                    // 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, static_cast<cl_context_properties>(0x100000),
-                    CL_CONTEXT_PLATFORM, reinterpret_cast<cl_context_properties>(cl::Platform::get()()),
-                    0
-                };
-                cl::Context::setDefault(cl::Context(CL_DEVICE_TYPE_DEFAULT, properties));
-            }
-#endif // defined(ARM_COMPUTE_DEBUG_ENABLED)
-
-            CLKernelLibrary::get().init("./cl_kernels/", cl::Context::getDefault(), cl::Device::getDefault());
-            init(cl::Context::getDefault(), cl::CommandQueue::getDefault(), cl::Device::getDefault(), cl_tuner);
-        }
-        else
-        {
-            _cl_tuner = cl_tuner;
-        }
-    }
+    void default_init(ICLTuner *cl_tuner = nullptr);
     /** Schedule the execution of the passed kernel if possible.
      *
      * @param[in] kernel Kernel to execute.
