diff --git a/Android.bp b/Android.bp
index d6179cb..6b1c3c5 100644
--- a/Android.bp
+++ b/Android.bp
@@ -74,6 +74,7 @@
         "src/core/CL/CLHelpers.cpp",
         "src/core/CL/CLKernelLibrary.cpp",
         "src/core/CL/CLUtils.cpp",
+        "src/core/CL/DefaultLWSHeuristics.cpp",
         "src/core/CL/ICLKernel.cpp",
         "src/core/CL/ICLSimple2DKernel.cpp",
         "src/core/CL/ICLSimple3DKernel.cpp",
diff --git a/filelist.json b/filelist.json
index f255d76..b426411 100644
--- a/filelist.json
+++ b/filelist.json
@@ -26,6 +26,7 @@
   "gpu": {
     "common": [
       "src/core/CL/CLCompileContext.cpp",
+      "src/core/CL/DefaultLWSHeuristics.cpp",
       "src/core/CL/CLHelpers.cpp",
       "src/core/CL/CLKernelLibrary.cpp",
       "src/core/CL/CLUtils.cpp",
diff --git a/src/core/CL/DefaultLWSHeuristics.cpp b/src/core/CL/DefaultLWSHeuristics.cpp
new file mode 100644
index 0000000..c082d7f
--- /dev/null
+++ b/src/core/CL/DefaultLWSHeuristics.cpp
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2021 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.
+ */
+#include "src/core/CL/DefaultLWSHeuristics.h"
+
+#include "arm_compute/core/CL/CLKernelLibrary.h"
+
+namespace
+{
+cl::NDRange get_gemm_lws(size_t gws_x, size_t gws_y, size_t gws_z)
+{
+    ARM_COMPUTE_UNUSED(gws_y);
+
+    if(gws_z != 1)
+    {
+        return cl::NDRange(4, 4, 2);
+    }
+    else
+    {
+        if(gws_x > 256)
+        {
+            return cl::NDRange(2, 16, 1);
+        }
+        else
+        {
+            return cl::NDRange(32, 4, 1);
+        }
+    }
+}
+
+cl::NDRange get_winograd_lws(size_t gws_x, size_t gws_y, size_t gws_z)
+{
+    ARM_COMPUTE_UNUSED(gws_x, gws_y, gws_z);
+
+    return cl::NDRange(4, 2, 1);
+}
+
+cl::NDRange get_direct_lws(size_t gws_x, size_t gws_y, size_t gws_z)
+{
+    ARM_COMPUTE_UNUSED(gws_z);
+
+    if(gws_x < gws_y)
+    {
+        return cl::NDRange(4, 16, 1);
+    }
+    else
+    {
+        return cl::NDRange(8, 4, 1);
+    }
+}
+} // namespace
+
+namespace arm_compute
+{
+cl::NDRange get_default_lws_for_type(CLKernelType kernel_type, cl::NDRange gws)
+{
+    const size_t gws_x = gws[0];
+    const size_t gws_y = gws[1];
+    const size_t gws_z = gws[2];
+
+    switch(kernel_type)
+    {
+        case CLKernelType::GEMM:
+        {
+            return get_gemm_lws(gws_x, gws_y, gws_z);
+        }
+        case CLKernelType::DIRECT:
+        {
+            return get_direct_lws(gws_x, gws_y, gws_z);
+        }
+        case CLKernelType::WINOGRAD:
+        {
+            return get_winograd_lws(gws_x, gws_y, gws_z);
+        }
+        default:
+        {
+            return CLKernelLibrary::get().default_ndrange();
+        }
+    }
+}
+} // namespace arm_compute
\ No newline at end of file
diff --git a/src/core/CL/DefaultLWSHeuristics.h b/src/core/CL/DefaultLWSHeuristics.h
new file mode 100644
index 0000000..e646b9a
--- /dev/null
+++ b/src/core/CL/DefaultLWSHeuristics.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2021 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_DEFAULT_LWS_HEURISTICS_H
+#define ARM_COMPUTE_DEFAULT_LWS_HEURISTICS_H
+
+#include "arm_compute/core/CL/CLTypes.h"
+#include "arm_compute/core/CL/OpenCL.h"
+
+namespace arm_compute
+{
+cl::NDRange get_default_lws_for_type(CLKernelType kernel_type, cl::NDRange gws);
+} // namespace arm_compute
+#endif // ARM_COMPUTE_DEFAULT_LWS_HEURISTICS_H
\ No newline at end of file
diff --git a/src/core/CL/ICLKernel.h b/src/core/CL/ICLKernel.h
index ae3077a..3b3217d 100644
--- a/src/core/CL/ICLKernel.h
+++ b/src/core/CL/ICLKernel.h
@@ -33,6 +33,8 @@
 #include "arm_compute/core/experimental/Types.h"
 #include "arm_compute/runtime/CL/CLTuningParams.h"
 
+#include "src/core/CL/DefaultLWSHeuristics.h"
+
 #include <string>
 
 namespace arm_compute
@@ -87,8 +89,7 @@
 
     cl::NDRange default_lws_tune(const Window &window)
     {
-        ARM_COMPUTE_UNUSED(window);
-        return CLKernelLibrary::get().default_ndrange();
+        return get_default_lws_for_type(_type, gws_from_window(window));
     }
 
     using IKernel::configure; //Prevent children from calling IKernel::configure() directly
