diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i
index c64fef3..9374945 100644
--- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i
+++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i
@@ -388,7 +388,9 @@
     bool       m_BiasEnabled;
     DataLayout m_DataLayout;
 
-     bool operator ==(const DepthwiseConvolution2dDescriptor& rhs) const;
+    bool operator ==(const DepthwiseConvolution2dDescriptor& rhs) const;
+
+    uint32_t GetNumInputs() const;
 };
 
 %feature("docstring",
@@ -544,7 +546,13 @@
         m_PeepholeEnabled (bool): Enable/disable peephole. Default: false.
         m_ProjectionEnabled (bool): Enable/disable the projection layer. Default: false.
         m_LayerNormEnabled (bool): Enable/disable layer normalization. Default: false.
-
+        m_TimeMajor (bool): Enable/disable time major. Default: false.
+        m_InputIntermediateScale (float): Input intermediate quantization scale. Default: 0.0.
+        m_ForgetIntermediateScale (float): Forget intermediate quantization scale. Default: 0.0.
+        m_CellIntermediateScale (float): Cell intermediate quantization scale. Default: 0.0.
+        m_OutputIntermediateScale (float): Output intermediate quantization scale. Default: 0.0.
+        m_HiddenStateZeroPoint (int): Hidden State zero point. Default: 0.
+        m_HiddenStateScale (float): Hidden State quantization scale. Default: 0.0.
     ") LstmDescriptor;
 struct LstmDescriptor
 {
@@ -557,6 +565,13 @@
     bool m_PeepholeEnabled;
     bool m_ProjectionEnabled;
     bool m_LayerNormEnabled;
+    bool m_TimeMajor;
+    float m_InputIntermediateScale;
+    float m_ForgetIntermediateScale;
+    float m_CellIntermediateScale;
+    float m_OutputIntermediateScale;
+    int32_t m_HiddenStateZeroPoint;
+    float m_HiddenStateScale;
 
     bool operator ==(const LstmDescriptor& rhs) const;
 };
diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i
index 74ae8c1..a2f57a3 100644
--- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i
+++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i
@@ -534,6 +534,22 @@
 
     %feature("docstring",
         "
+        Adds a 2D Depthwise Convolution layer to the network.
+
+        Args:
+            convolution2dDescriptor (DepthwiseConvolution2dDescriptor): Description of the 2D depthwise convolution layer.
+            name (str): Optional name for the layer.
+
+        Returns:
+            IConnectableLayer: Interface for configuring the layer.
+        ") AddDepthwiseConvolution2dLayer;
+
+    armnn::IConnectableLayer* AddDepthwiseConvolution2dLayer(
+        const armnn::DepthwiseConvolution2dDescriptor& convolution2dDescriptor,
+        const char* name = nullptr);
+
+    %feature("docstring",
+        "
         Adds a Dequantize layer to the network.
 
         Args:
@@ -544,7 +560,6 @@
         ") AddDequantizeLayer;
     armnn::IConnectableLayer* AddDequantizeLayer(const char* name = nullptr);
 
-
     %feature("docstring",
         "
         Adds a Detection PostProcess layer to the network. Detection PostProcess is a custom layer for SSD MobilenetV1.
@@ -869,7 +884,6 @@
     armnn::IConnectableLayer* AddQuantizedLstmLayer(const armnn::QuantizedLstmInputParams& params,
                                                      const char* name = nullptr);
 
-
     %feature("docstring",
         "
         Adds a Rank layer to the network.
@@ -924,7 +938,6 @@
     armnn::IConnectableLayer* AddResizeLayer(const armnn::ResizeDescriptor& resizeDescriptor,
                                               const char* name = nullptr);
 
-
     %feature("docstring",
         "
         Adds a Shape layer to the network.
@@ -1184,7 +1197,6 @@
         }
     }
 
-
     %feature("docstring",
         "
         Adds a 2D Depthwise Convolution layer to the network.
@@ -1205,6 +1217,7 @@
         const armnn::ConstTensor* biases = nullptr,
         const char* name = nullptr) {
 
+        ARMNN_NO_DEPRECATE_WARN_BEGIN
         if (biases) {
             return $self->AddDepthwiseConvolution2dLayer(convolution2dDescriptor, weights,
                                                  armnn::Optional<armnn::ConstTensor>(*biases), name);
@@ -1212,7 +1225,9 @@
             return $self->AddDepthwiseConvolution2dLayer(convolution2dDescriptor, weights,
                                                  armnn::Optional<armnn::ConstTensor>(), name);
         }
+        ARMNN_NO_DEPRECATE_WARN_END
     }
+
 }
 
 %feature("docstring",
diff --git a/python/pyarmnn/test/test_network.py b/python/pyarmnn/test/test_network.py
index 5522bf6..ce1dffb 100644
--- a/python/pyarmnn/test/test_network.py
+++ b/python/pyarmnn/test/test_network.py
@@ -251,34 +251,6 @@
 def test_network_method_exists(method):
     assert getattr(ann.INetwork, method, None)
 
-def test_DepthwiseConvolution2d_layer_optional_none():
-    net = ann.INetwork()
-    layer = net.AddDepthwiseConvolution2dLayer(convolution2dDescriptor=ann.DepthwiseConvolution2dDescriptor(),
-                                               weights=ann.ConstTensor())
-
-    assert layer
-
-
-def test_DepthwiseConvolution2d_layer_optional_provided():
-    net = ann.INetwork()
-    layer = net.AddDepthwiseConvolution2dLayer(convolution2dDescriptor=ann.DepthwiseConvolution2dDescriptor(),
-                                               weights=ann.ConstTensor(),
-                                               biases=ann.ConstTensor())
-
-    assert layer
-
-
-def test_DepthwiseConvolution2d_layer_all_args():
-    net = ann.INetwork()
-    layer = net.AddDepthwiseConvolution2dLayer(convolution2dDescriptor=ann.DepthwiseConvolution2dDescriptor(),
-                                               weights=ann.ConstTensor(),
-                                               biases=ann.ConstTensor(),
-                                               name='NAME1')
-
-    assert layer
-    assert 'NAME1' == layer.GetName()
-
-
 def test_Convolution2d_layer_optional_none():
     net = ann.INetwork()
     layer = net.AddConvolution2dLayer(convolution2dDescriptor=ann.Convolution2dDescriptor(),
