diff --git a/arm_compute/runtime/CL/CLScheduler.h b/arm_compute/runtime/CL/CLScheduler.h
index 89c3bc1..e1e7ff6 100644
--- a/arm_compute/runtime/CL/CLScheduler.h
+++ b/arm_compute/runtime/CL/CLScheduler.h
@@ -30,7 +30,7 @@
 #include "arm_compute/core/CL/OpenCL.h"
 #include "arm_compute/core/Error.h"
 #include "arm_compute/core/Types.h"
-#include "arm_compute/runtime/CL/CLTuner.h"
+#include "arm_compute/runtime/CL/ICLTuner.h"
 
 #if defined(ARM_COMPUTE_DEBUG_ENABLED)
 namespace
@@ -194,17 +194,19 @@
         return event;
     }
 
-private:
-    /** Tune OpenCL kernel
-     *
-     * @note This method uses a brute force approach to find the optimal LWS
+    /** Tunes OpenCL kernel
      *
      * @param[in] kernel Kernel to tune
-     *
-     * @return The optimal LWS for the specified kernel
      */
-    cl::NDRange tune_kernel(ICLKernel &kernel);
+    void tune_kernel_static(ICLKernel &kernel)
+    {
+        if(_cl_tuner != nullptr)
+        {
+            _cl_tuner->tune_kernel_static(kernel);
+        }
+    }
 
+private:
     /** Flag to ensure symbols initialisation is happening before Scheduler creation */
     static std::once_flag _initialize_symbols;
 
diff --git a/arm_compute/runtime/CL/CLTuner.h b/arm_compute/runtime/CL/CLTuner.h
index c1fbfd2..f789500 100644
--- a/arm_compute/runtime/CL/CLTuner.h
+++ b/arm_compute/runtime/CL/CLTuner.h
@@ -99,7 +99,8 @@
     void save_to_file(const std::string &filename) const;
 
     // Inherited methods overridden:
-    void tune_kernel(ICLKernel &kernel) override;
+    void tune_kernel_static(ICLKernel &kernel) override;
+    void tune_kernel_dynamic(ICLKernel &kernel) override;
 
     /** Is the kernel_event set ?
      *
diff --git a/arm_compute/runtime/CL/ICLTuner.h b/arm_compute/runtime/CL/ICLTuner.h
index c71835c..95b22b5 100644
--- a/arm_compute/runtime/CL/ICLTuner.h
+++ b/arm_compute/runtime/CL/ICLTuner.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 ARM Limited.
+ * Copyright (c) 2017-2018 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -34,11 +34,21 @@
 public:
     /** Virtual destructor */
     virtual ~ICLTuner() = default;
-    /** Tune OpenCL kernel
+    /** Tune OpenCL kernel statically
+     *
+     * @note Tuning is performed using only kernel and tensor metadata,
+     *       thus can be performed when memory is not available
      *
      * @param[in] kernel Kernel to tune
      */
-    virtual void tune_kernel(ICLKernel &kernel) = 0;
+    virtual void tune_kernel_static(ICLKernel &kernel) = 0;
+    /** Tune OpenCL kernel dynamically
+     *
+     * @note Tuning requires memory to be available on all kernel tensors and objects in order to be performed
+     *
+     * @param[in] kernel Kernel to tune
+     */
+    virtual void tune_kernel_dynamic(ICLKernel &kernel) = 0;
 };
 }
 #endif /*__ARM_COMPUTE_ICLTUNER_H__ */
diff --git a/arm_compute/runtime/CL/tuners/BifrostTuner.h b/arm_compute/runtime/CL/tuners/BifrostTuner.h
new file mode 100644
index 0000000..080a37c
--- /dev/null
+++ b/arm_compute/runtime/CL/tuners/BifrostTuner.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018 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_TUNERS_BIFROST_TUNER_H__
+#define __ARM_COMPUTE_TUNERS_BIFROST_TUNER_H__
+
+#include "arm_compute/runtime/CL/ICLTuner.h"
+
+namespace arm_compute
+{
+namespace tuners
+{
+/** Bifrost based OpenCL tuner implementation */
+class BifrostTuner final : public ICLTuner
+{
+public:
+    // Inherited overriden methods
+    void tune_kernel_static(ICLKernel &kernel) override;
+    void tune_kernel_dynamic(ICLKernel &kernel) override;
+};
+} // namespace tuners
+} // namespace arm_compute
+#endif /*__ARM_COMPUTE_TUNERS_BIFROST_TUNER_H__ */
