diff --git a/src/armnn/Network.hpp b/src/armnn/Network.hpp
index 19a0286..8bd56d3 100644
--- a/src/armnn/Network.hpp
+++ b/src/armnn/Network.hpp
@@ -76,18 +76,18 @@
     IConnectableLayer* AddConvolution2dLayer(const Convolution2dDescriptor& convolution2dDescriptor,
                                              const char* name = nullptr);
 
-    ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This AddConvolution2dLayer overload is deprecated", "22.11")
+    ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This AddConvolution2dLayer overload is deprecated", "23.02")
     IConnectableLayer* AddConvolution2dLayer(const Convolution2dDescriptor& convolution2dDescriptor,
                                              const ConstTensor& weights,
                                              const Optional<ConstTensor>& biases,
                                              const char* name = nullptr);
 
-    ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This AddConvolution2dLayer overload is deprecated", "22.11")
+    ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This AddConvolution2dLayer overload is deprecated", "23.02")
     IConnectableLayer* AddConvolution2dLayer(const Convolution2dDescriptor& convolution2dDescriptor,
                                              const ConstTensor& weights,
                                              const char* name = nullptr);
 
-    ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This AddConvolution2dLayer overload is deprecated", "22.11")
+    ARMNN_DEPRECATED_MSG_REMOVAL_DATE("This AddConvolution2dLayer overload is deprecated", "23.02")
     IConnectableLayer* AddConvolution2dLayer(const Convolution2dDescriptor& convolution2dDescriptor,
                                              const ConstTensor& weights,
                                              const ConstTensor& biases,
diff --git a/src/armnn/layers/Convolution2dLayer.hpp b/src/armnn/layers/Convolution2dLayer.hpp
index 185a672..02ae05f 100644
--- a/src/armnn/layers/Convolution2dLayer.hpp
+++ b/src/armnn/layers/Convolution2dLayer.hpp
@@ -17,10 +17,10 @@
 public:
 
     /// A unique pointer to store Weight values.
-    /// @Note: Deprecated. Removal date is 22.11. Weights are stored in ConstantLayers now.
+    /// @Note: Deprecated. Removal date is 23.02. Weights are stored in ConstantLayers now.
     std::shared_ptr<ConstTensorHandle> m_Weight;
     /// A unique pointer to store Bias values.
-    /// @Note: Deprecated. Removal date is 22.11. Bias are stored in ConstantLayers now.
+    /// @Note: Deprecated. Removal date is 23.02. Bias are stored in ConstantLayers now.
     std::shared_ptr<ConstTensorHandle> m_Bias;
 
     /// Makes a workload for the Convolution2d type.
diff --git a/src/armnn/layers/DepthwiseConvolution2dLayer.hpp b/src/armnn/layers/DepthwiseConvolution2dLayer.hpp
index 9b0e6ad..baae7f1 100644
--- a/src/armnn/layers/DepthwiseConvolution2dLayer.hpp
+++ b/src/armnn/layers/DepthwiseConvolution2dLayer.hpp
@@ -16,10 +16,10 @@
 {
 public:
     /// A unique pointer to store Weight values.
-    /// @Note Deprecated. Bias are stored in ConstantLayers now.
+    /// @Note Deprecated. Removal date is 23.02. Weights are stored in ConstantLayers now.
     std::shared_ptr<ConstTensorHandle> m_Weight;
     /// A unique pointer to store Bias values.
-    /// @Note Deprecated. Bias are stored in ConstantLayers now.
+    /// @Note Deprecated. Removal date is 23.02. Bias are stored in ConstantLayers now.
     std::shared_ptr<ConstTensorHandle> m_Bias;
 
     /// Makes a workload for the DepthwiseConvolution2d type.
diff --git a/src/armnn/layers/FullyConnectedLayer.hpp b/src/armnn/layers/FullyConnectedLayer.hpp
index 09dbb5f..07f4a93 100644
--- a/src/armnn/layers/FullyConnectedLayer.hpp
+++ b/src/armnn/layers/FullyConnectedLayer.hpp
@@ -16,10 +16,10 @@
 {
 public:
     /// A unique pointer to store Weight values.
-    /// @Note: Deprecated. Weights are stored in ConstantLayers now.
+    /// @Note: Deprecated. Removal date is 23.02. Weights are stored in ConstantLayers now.
     std::shared_ptr<ConstTensorHandle> m_Weight;
     /// A unique pointer to store Bias values.
-    /// @Note: Deprecated. Bias are stored in ConstantLayers now.
+    /// @Note: Deprecated. Removal date is 23.02. Bias are stored in ConstantLayers now.
     std::shared_ptr<ConstTensorHandle> m_Bias;
 
     /// Makes a workload for the FullyConnected type.
diff --git a/src/armnn/optimizations/FoldPadIntoLayer2d.hpp b/src/armnn/optimizations/FoldPadIntoLayer2d.hpp
index 4c4bd80..7a50c4a 100644
--- a/src/armnn/optimizations/FoldPadIntoLayer2d.hpp
+++ b/src/armnn/optimizations/FoldPadIntoLayer2d.hpp
@@ -200,7 +200,7 @@
             ARMNN_ASSERT_MSG(newConv2dLayer->GetInputSlot(1).GetConnection() != nullptr,
                              "FoldPadIntoConvolution2d: New convolution layer is missing connection to weights layer");
 
-            // Deprecated 22.11
+            // Deprecated. Removal date is 23.02.
             newConv2dLayer->m_Weight = std::move(conv2dLayer->m_Weight);
 
             if (conv2dLayer->GetParameters().m_BiasEnabled)
@@ -209,7 +209,7 @@
                                  "FoldPadIntoConvolution2d: New convolution layer is missing "
                                  "connection to bias layer.");
 
-                // Deprecated 22.11
+                // Deprecated. Removal date is 23.02.
                 newConv2dLayer->m_Bias = std::move(conv2dLayer->m_Bias);
             }
         }
@@ -234,7 +234,7 @@
             ARMNN_ASSERT_MSG(newConv2dLayer->GetInputSlot(1).GetConnection() != nullptr,
             "FoldPadIntoDepthwiseConvolution2d: New convolution layer is missing connection to weights layer");
 
-            // Deprecated 22.11
+            // Deprecated. Removal date is 23.02.
             newConv2dLayer->m_Weight = std::move(conv2dLayer->m_Weight);
 
             if (conv2dLayer->GetParameters().m_BiasEnabled)
@@ -242,7 +242,7 @@
                 ARMNN_ASSERT_MSG(newConv2dLayer->GetInputSlot(2).GetConnection() != nullptr,
                                  "FoldPadIntoConvolution2d: New convolution layer is missing "
                                  "connection to bias layer.");
-                // Deprecated 22.11
+                // Deprecated. Removal date is 23.02.
                 newConv2dLayer->m_Bias = std::move(conv2dLayer->m_Bias);
             }
         }
