diff --git a/arm_compute/graph/GraphBuilder.h b/arm_compute/graph/GraphBuilder.h
index 23541c4..612703c 100644
--- a/arm_compute/graph/GraphBuilder.h
+++ b/arm_compute/graph/GraphBuilder.h
@@ -335,15 +335,16 @@
                                                 ITensorAccessorUPtr mean_accessor = nullptr, ITensorAccessorUPtr std_accessor = nullptr);
     /** Adds a pad layer node to the graph
      *
-     * @param[in] g       Graph to add the node to
-     * @param[in] params  Common node parameters
-     * @param[in] input   Input to the reshape layer node as a NodeID-Index pair
-     * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i]
-     *                    specifies the front and the end padding in the i-th dimension.
+     * @param[in] g         Graph to add the node to
+     * @param[in] params    Common node parameters
+     * @param[in] input     Input to the reshape layer node as a NodeID-Index pair
+     * @param[in] paddings  The padding for each spatial dimension of the input tensor. The pair padding[i]
+     *                      specifies the front and the end padding in the i-th dimension.
+     * @param[in] pad_value Padding value to be used. Defaults to 0
      *
      * @return Node ID of the created node, EmptyNodeID in case of error
      */
-    static NodeID add_pad_node(Graph &g, NodeParams params, NodeIdxPair input, PaddingList padding);
+    static NodeID add_pad_node(Graph &g, NodeParams params, NodeIdxPair input, const PaddingList &paddings, PixelValue pad_value = PixelValue());
     /** Adds a permute layer node to the graph
      *
      * @param[in] g      Graph to add the node to
diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h
index 7c81641..296f757 100644
--- a/arm_compute/graph/Types.h
+++ b/arm_compute/graph/Types.h
@@ -25,6 +25,7 @@
 #define ARM_COMPUTE_GRAPH_TYPES_H
 
 #include "arm_compute/core/Error.h"
+#include "arm_compute/core/PixelValue.h"
 #include "arm_compute/core/Types.h"
 #include "arm_compute/runtime/CL/CLTunerTypes.h"
 
@@ -45,6 +46,7 @@
 using arm_compute::TensorShape;
 using arm_compute::Size2D;
 using arm_compute::PermutationVector;
+using arm_compute::PixelValue;
 
 using arm_compute::ActivationLayerInfo;
 using arm_compute::DetectionOutputLayerInfo;
diff --git a/arm_compute/graph/backends/FunctionHelpers.h b/arm_compute/graph/backends/FunctionHelpers.h
index 9f352ed..20c69bf 100644
--- a/arm_compute/graph/backends/FunctionHelpers.h
+++ b/arm_compute/graph/backends/FunctionHelpers.h
@@ -1048,15 +1048,16 @@
     validate_node<TargetInfo>(node, 1 /* expected inputs */, 1 /* expected outputs */);
 
     // Extract IO and info
-    typename TargetInfo::TensorType *input   = get_backing_tensor<TargetInfo>(node.input(0));
-    typename TargetInfo::TensorType *output  = get_backing_tensor<TargetInfo>(node.output(0));
-    const PaddingList               &padding = node.padding();
+    typename TargetInfo::TensorType *input     = get_backing_tensor<TargetInfo>(node.input(0));
+    typename TargetInfo::TensorType *output    = get_backing_tensor<TargetInfo>(node.output(0));
+    const PaddingList               &padding   = node.padding();
+    const PixelValue                 pad_value = node.pad_value();
     ARM_COMPUTE_ERROR_ON(input == nullptr);
     ARM_COMPUTE_ERROR_ON(output == nullptr);
 
     // Create and configure function
     auto func = support::cpp14::make_unique<PadLayerFunction>();
-    func->configure(input, output, padding);
+    func->configure(input, output, padding, pad_value);
 
     // Log info
     ARM_COMPUTE_LOG_GRAPH_INFO("Instantiated "
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index 420f715..61a6fd4 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -832,11 +832,12 @@
 public:
     /** Construct a pad layer.
      *
-     * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i]
-     *                    specifies the front and the end padding in the i-th dimension.
+     * @param[in] padding   The padding for each spatial dimension of the input tensor. The pair padding[i]
+     *                      specifies the front and the end padding in the i-th dimension.
+     * @param[in] pad_value Padding value to use. Defaults to 0.
      */
-    PadLayer(PaddingList padding)
-        : _padding(padding)
+    PadLayer(PaddingList padding, PixelValue pad_value = PixelValue())
+        : _padding(padding), _pad_value(pad_value)
     {
     }
 
@@ -844,11 +845,12 @@
     {
         NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
-        return GraphBuilder::add_pad_node(s.graph(), common_params, input, _padding);
+        return GraphBuilder::add_pad_node(s.graph(), common_params, input, _padding, _pad_value);
     }
 
 private:
     PaddingList _padding;
+    PixelValue  _pad_value;
 };
 
 /** Permute Layer */
diff --git a/arm_compute/graph/nodes/PadLayerNode.h b/arm_compute/graph/nodes/PadLayerNode.h
index 0b1bdda..852427a 100644
--- a/arm_compute/graph/nodes/PadLayerNode.h
+++ b/arm_compute/graph/nodes/PadLayerNode.h
@@ -36,15 +36,21 @@
 public:
     /** Constructor
      *
-     * @param[in] padding The padding for each spatial dimension of the input tensor. The pair padding[i]
-     *                    specifies the front and the end padding in the i-th dimension.
+     * @param[in] padding   The padding for each spatial dimension of the input tensor. The pair padding[i]
+     *                      specifies the front and the end padding in the i-th dimension.
+     * @param[in] pad_value Padding value to be used. Defaults to 0
      */
-    PadLayerNode(const PaddingList &padding);
+    PadLayerNode(const PaddingList &padding, PixelValue pad_value = PixelValue());
     /** Padding list accessor
      *
      * @return Padding list
      */
     const PaddingList &padding() const;
+    /** Padding value accessor
+     *
+     * @return Padding value
+     */
+    PixelValue pad_value() const;
 
     // Inherited overridden methods:
     NodeType         type() const override;
@@ -54,6 +60,7 @@
 
 private:
     PaddingList _padding;
+    PixelValue  _pad_value;
 };
 } // namespace graph
 } // namespace arm_compute
