diff --git a/arm_compute/core/Window.inl b/arm_compute/core/Window.inl
index c33613f..01cd988 100644
--- a/arm_compute/core/Window.inl
+++ b/arm_compute/core/Window.inl
@@ -24,7 +24,7 @@
 namespace arm_compute
 {
 inline Window::Window(const Window &src)
-    : _dims(), _thread_id(src._thread_id), _num_threads(src._num_threads)
+    : _dims()
 {
     for(size_t i = 0; i < Coordinates::num_max_dimensions; ++i)
     {
@@ -32,12 +32,12 @@
     }
 }
 
-inline constexpr const Window::Dimension &Window::operator[](const size_t dimension) const
+inline constexpr const Window::Dimension &Window::operator[](size_t dimension) const
 {
     // Precondition: dimension < Coordinates::num_max_dimensions
     return _dims.at(dimension);
 }
-inline void Window::set(const size_t dimension, const Window::Dimension &dim)
+inline void Window::set(size_t dimension, const Window::Dimension &dim)
 {
     ARM_COMPUTE_ERROR_ON(dimension >= Coordinates::num_max_dimensions);
     _dims[dimension] = dim;
@@ -72,7 +72,7 @@
     return collapsed;
 }
 
-inline void Window::shift(const size_t dimension, const int shift_value)
+inline void Window::shift(size_t dimension, int shift_value)
 {
     ARM_COMPUTE_ERROR_ON(dimension >= Coordinates::num_max_dimensions);
     Window::Dimension &d = _dims[dimension];
@@ -94,7 +94,7 @@
     }
 }
 
-inline void Window::scale(const size_t dimension, float scale_value)
+inline void Window::scale(size_t dimension, float scale_value)
 {
     ARM_COMPUTE_ERROR_ON(dimension >= Coordinates::num_max_dimensions);
     Window::Dimension &d           = _dims[dimension];
@@ -103,7 +103,7 @@
     d                              = Window::Dimension(d.start() * scale_value, scaled_end, scaled_step);
 }
 
-inline void Window::set_dimension_step(const size_t dimension, const int step)
+inline void Window::set_dimension_step(size_t dimension, int step)
 {
     ARM_COMPUTE_ERROR_ON(dimension >= Coordinates::num_max_dimensions);
     _dims[dimension].set_step(step);
@@ -126,7 +126,7 @@
     return (_dims.at(dimension).end() - _dims.at(dimension).start()) / _dims.at(dimension).step();
 }
 
-inline Window Window::split_window(const size_t dimension, const size_t id, const size_t total) const
+inline Window Window::split_window(size_t dimension, size_t id, size_t total) const
 {
     ARM_COMPUTE_ERROR_ON(id >= total);
     ARM_COMPUTE_ERROR_ON(dimension >= Coordinates::num_max_dimensions);
@@ -201,7 +201,7 @@
     return slice;
 }
 
-inline void Window::use_tensor_dimensions(const ITensorInfo *info, const size_t first_dimension)
+inline void Window::use_tensor_dimensions(const ITensorInfo *info, size_t first_dimension)
 {
     for(unsigned int n = first_dimension; n < info->num_dimensions(); ++n)
     {
