diff --git a/arm_compute/graph/Workload.h b/arm_compute/graph/Workload.h
index 11bb22e..5ca9fd6 100644
--- a/arm_compute/graph/Workload.h
+++ b/arm_compute/graph/Workload.h
@@ -39,6 +39,27 @@
 class Tensor;
 class Graph;
 
+struct ExecutionTask;
+
+void execute_task(ExecutionTask &task);
+
+/** Task executor */
+class TaskExecutor final
+{
+private:
+    /** Default constructor **/
+    TaskExecutor();
+
+public:
+    /** Task executor accessor
+     *
+     * @return Task executor instance
+     */
+    static TaskExecutor &get();
+    /** Function that is responsible for executing tasks */
+    std::function<decltype(execute_task)> execute_function;
+};
+
 /** Execution task
  *
  * Contains all the information required to execute a given task
diff --git a/arm_compute/graph/frontend/ILayer.h b/arm_compute/graph/frontend/ILayer.h
index 5add8ab..f7caaea 100644
--- a/arm_compute/graph/frontend/ILayer.h
+++ b/arm_compute/graph/frontend/ILayer.h
@@ -46,6 +46,28 @@
      * @return ID of the created node.
      */
     virtual NodeID create_layer(IStream &s) = 0;
+    /** Sets the name of the layer
+     *
+     * @param[in] name Name of the layer
+     *
+     * @return The layer object
+     */
+    ILayer &set_name(std::string name)
+    {
+        _name = name;
+        return *this;
+    }
+    /** Layer name accessor
+     *
+     * @return Returns the name of the layer
+     */
+    const std::string &name() const
+    {
+        return _name;
+    }
+
+private:
+    std::string _name = {};
 };
 } // namespace frontend
 } // namespace graph
diff --git a/arm_compute/graph/frontend/IStreamOperators.h b/arm_compute/graph/frontend/IStreamOperators.h
index 1eb6522..350d78f 100644
--- a/arm_compute/graph/frontend/IStreamOperators.h
+++ b/arm_compute/graph/frontend/IStreamOperators.h
@@ -48,6 +48,18 @@
     s.add_layer(layer);
     return s;
 }
+/** Overloaded stream operator to add a node to the graph
+ *
+ * @param[in, out] s     Stream to add the tensor
+ * @param[in]      layer Layer to be added
+ *
+ * @return Updated stream
+ */
+inline IStream &operator<<(IStream &s, ILayer &layer)
+{
+    s.add_layer(layer);
+    return s;
+}
 /** Overloaded stream operator to provide a target hint to the graph
  *
  * @param[in, out] s           Stream to provide the hint to
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index 2e7c50e..54cf515 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -57,7 +57,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams common_params = { "", s.hints().target_hint };
+        NodeParams common_params = { name(), s.hints().target_hint };
         return GraphBuilder::add_input_node(s.graph(), common_params, _desc, std::move(_accessor));
     }
 
@@ -81,7 +81,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_output_node(s.graph(), common_params, input, std::move(_accessor));
     }
@@ -105,7 +105,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_activation_node(s.graph(), common_params, input, _act_info);
     }
@@ -140,7 +140,7 @@
         ARM_COMPUTE_ERROR_ON(_mean == nullptr);
         ARM_COMPUTE_ERROR_ON(_var == nullptr);
 
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_batch_normalization_node(s.graph(), common_params, input, _epsilon,
                                                           std::move(_mean), std::move(_var), std::move(_beta), std::move(_gamma));
@@ -194,7 +194,7 @@
     NodeID create_layer(IStream &s) override
     {
         NodeIdxPair input         = { s.tail_node(), 0 };
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         return GraphBuilder::add_convolution_node(s.graph(), common_params, input,
                                                   Size2D(_conv_width, _conv_height), _ofm, _conv_info, _num_groups,
                                                   s.hints().convolution_method_hint,
@@ -244,7 +244,7 @@
     NodeID create_layer(IStream &s) override
     {
         NodeIdxPair input         = { s.tail_node(), 0 };
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         return GraphBuilder::add_depthwise_convolution_node(s.graph(), common_params,
                                                             input, Size2D(_conv_width, _conv_height), _conv_info,
                                                             s.hints().depthwise_convolution_method_hint,
@@ -271,7 +271,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_flatten_node(s.graph(), common_params, input);
     }
@@ -296,7 +296,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_fully_connected_layer(s.graph(), common_params, input, _num_outputs,
                                                        std::move(_weights), std::move(_bias));
@@ -323,7 +323,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_normalization_node(s.graph(), common_params, input, _norm_info);
     }
@@ -347,7 +347,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_pooling_node(s.graph(), common_params, input, _pool_info);
     }
@@ -371,7 +371,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_reshape_node(s.graph(), common_params, input, _shape);
     }
@@ -395,7 +395,7 @@
 
     NodeID create_layer(IStream &s) override
     {
-        NodeParams  common_params = { "", s.hints().target_hint };
+        NodeParams  common_params = { name(), s.hints().target_hint };
         NodeIdxPair input         = { s.tail_node(), 0 };
         return GraphBuilder::add_softmax_node(s.graph(), common_params, input, _beta);
     }
@@ -441,7 +441,7 @@
     NodeID create_layer(IStream &s) override
     {
         NodeID     nid           = EmptyNodeID;
-        NodeParams common_params = { "", s.hints().target_hint };
+        NodeParams common_params = { name(), s.hints().target_hint };
         if(_sub_streams.size() == 1 && _sub_streams.at(0) != nullptr)
         {
             nid = _sub_streams[0]->tail_node();
