diff --git a/arm_compute/core/Window.h b/arm_compute/core/Window.h
index 73c8d43..a562279 100644
--- a/arm_compute/core/Window.h
+++ b/arm_compute/core/Window.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018 ARM Limited.
+ * Copyright (c) 2016-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -56,6 +56,13 @@
      * @param[in] src Copy the values from src to a new object
      */
     Window(const Window &src);
+    /** Copy assignment operator
+     *
+     * @param[in] rhs Copy the values from rhs to the current object
+     *
+     * @return Reference to the updated object
+     */
+    Window &operator=(const Window &rhs);
 
     /** Describe one of the image's dimensions with a start, end and step.
      *
@@ -384,6 +391,12 @@
     {
         return broadcast_if_dimension_le_one(info.tensor_shape());
     }
+    /** Friend function that swaps the contents of two windows
+     *
+     * @param[in] lhs First window to swap.
+     * @param[in] rhs Second window to swap.
+     */
+    friend void swap(Window &lhs, Window &rhs);
 
 private:
     /** First slice of the window
@@ -407,6 +420,6 @@
 private:
     std::array<Dimension, Coordinates::num_max_dimensions> _dims;
 };
-}
+} // namespace arm_compute
 #include "Window.inl"
 #endif /*__ARM_COMPUTE_WINDOW_H__ */
diff --git a/arm_compute/core/Window.inl b/arm_compute/core/Window.inl
index c6fc884..eeef3df 100644
--- a/arm_compute/core/Window.inl
+++ b/arm_compute/core/Window.inl
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016-2018 ARM Limited.
+ * Copyright (c) 2016-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -32,6 +32,13 @@
     }
 }
 
+inline Window &Window::operator=(const arm_compute::Window &rhs)
+{
+    Window tmp(rhs);
+    swap(*this, tmp);
+    return *this;
+}
+
 inline constexpr const Window::Dimension &Window::operator[](size_t dimension) const
 {
     // Precondition: dimension < Coordinates::num_max_dimensions
@@ -267,4 +274,9 @@
     }
     return total;
 }
+
+inline void swap(Window &lhs, Window &rhs)
+{
+    lhs._dims.swap(rhs._dims);
 }
+} // namespace arm_compute
diff --git a/arm_compute/graph/GraphBuilder.h b/arm_compute/graph/GraphBuilder.h
index bcf80f9..f1d387b 100644
--- a/arm_compute/graph/GraphBuilder.h
+++ b/arm_compute/graph/GraphBuilder.h
@@ -217,7 +217,7 @@
      *
      * @return Node ID of the created node, EmptyNodeID in case of error
      */
-    static NodeID add_detection_output_node(Graph &g, NodeParams params, NodeIdxPair input_loc, NodeIdxPair input_conf, NodeIdxPair input_priorbox, DetectionOutputLayerInfo detect_info);
+    static NodeID add_detection_output_node(Graph &g, NodeParams params, NodeIdxPair input_loc, NodeIdxPair input_conf, NodeIdxPair input_priorbox, const DetectionOutputLayerInfo &detect_info);
     /** Adds a Dummy node to the graph
      *
      * @note this node if for debugging purposes. Just alters the shape of the graph pipeline as requested.
@@ -353,7 +353,7 @@
      *
      * @return Node ID of the created node, EmptyNodeID in case of error
      */
-    static NodeID add_priorbox_node(Graph &g, NodeParams params, NodeIdxPair input0, NodeIdxPair input1, PriorBoxLayerInfo prior_info);
+    static NodeID add_priorbox_node(Graph &g, NodeParams params, NodeIdxPair input0, NodeIdxPair input1, const PriorBoxLayerInfo &prior_info);
     /** Adds a reorg layer node to the graph
      *
      * @param[in] g      Graph to add the node to
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index 4e6f0ee..a4c03a6 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -478,7 +478,7 @@
      * @param[in] sub_stream_prior PriorBox graph sub-stream.
      * @param[in] detect_info      DetectionOutput parameters.
      */
-    DetectionOutputLayer(SubStream &&sub_stream_conf, SubStream &&sub_stream_prior, DetectionOutputLayerInfo detect_info)
+    DetectionOutputLayer(SubStream &&sub_stream_conf, SubStream &&sub_stream_prior, const DetectionOutputLayerInfo &detect_info)
         : _ss_conf(std::move(sub_stream_conf)), _ss_prior(std::move(sub_stream_prior)), _detect_info(detect_info)
     {
     }
@@ -838,7 +838,7 @@
      * @param[in] sub_stream First graph sub-stream
      * @param[in] prior_info PriorBox parameters.
      */
-    PriorBoxLayer(SubStream &&sub_stream, PriorBoxLayerInfo prior_info)
+    PriorBoxLayer(SubStream &&sub_stream, const PriorBoxLayerInfo &prior_info)
         : _ss(std::move(sub_stream)), _prior_info(prior_info)
     {
     }
