diff --git a/cfg/sei_vui/neural_network_post_filter_characteristics.cfg b/cfg/sei_vui/neural_network_post_filter_characteristics.cfg
index 352f8e252d871cd977d0bfd29a0cd475fe3d4c4c..86f252a92995fccd92c6563f6d2d7e72fc1f9818 100644
--- a/cfg/sei_vui/neural_network_post_filter_characteristics.cfg
+++ b/cfg/sei_vui/neural_network_post_filter_characteristics.cfg
@@ -25,12 +25,17 @@ SEINNPostFilterCharacteristicsConstantPatchSizeFlag0:          1
 SEINNPostFilterCharacteristicsPatchWidthMinus10:               127
 SEINNPostFilterCharacteristicsPatchHeightMinus10:              127
 SEINNPostFilterCharacteristicsOverlap0:                        4
-SEINNPostFilterCharacteristicsPaddingType0:                    1
+SEINNPostFilterCharacteristicsPaddingType0:                     1
 SEINNPostFilterCharacteristicsComplexityIdc0:                  1
 
-SEINNPostFilterCharacteristicsParameterTypeFlag0:              1
+SEINNPostFilterCharacteristicsParameterTypeIdc0:              1
 SEINNPostFilterCharacteristicsLog2ParameterBitLengthMinus30:   3
 SEINNPostFilterCharacteristicsNumParametersIdc0:               2
 SEINNPostFilterCharacteristicsNumKmacOperationsIdc0:           512
 
 SEINNPostFilterCharacteristicsPayloadFilename0:                test.nnr
+
+
+SEINNPostFilterCharacteristicsLumaPadding0:                     12
+SEINNPostFilterCharacteristicsCbPadding0:                          6
+SEINNPostFilterCharacteristicsCrPadding0:                          6
\ No newline at end of file
diff --git a/doc/software-manual.tex b/doc/software-manual.tex
index 7390f04751d67ddc60ecd6fde54250cec15e1884..8096945d336d2fdbb92e04623d7cdbb8dcfb1f04 100644
--- a/doc/software-manual.tex
+++ b/doc/software-manual.tex
@@ -5526,19 +5526,34 @@ Specifies sii_num_units_in_shutter_interval for single entry.If multiple entries
     0 & zero padding \\
     1 & replication padding \\
     2 & reflection padding \\
+    3 & wrap-around padding \\
+    4 & fixed padding \\
   \end{tabular}
   \\
+  \Option{SEINNPostFilterCharacteristicsLumaPadding\emph{i}} &
+  \Default{0} &
+  Specifies the luma padding when when nnpfc_padding_type is equal to 4 of the \emph{i}-th neural network post-filter.
+  \\
+  \Option{SEINNPostFilterCharacteristicsCrPadding\emph{i}} &
+  \Default{0} &
+  Specifies the Cr padding when when nnpfc_padding_type is equal to 4 of the \emph{i}-th neural network post-filter.
+  \\
+  \Option{SEINNPostFilterCharacteristicsCbPadding\emph{i}} &
+  \Default{0} &
+  Specifies the Cb padding when when nnpfc_padding_type is equal to 4 of the \emph{i}-th neural network post-filter.
+  \\
   \Option{SEINNPostFilterCharacteristicsComplexityIdc\emph{i}} &
   \Default{0} &
   Specifies the nnpfc_complexity_idc of the \emph{i}-th neural network post-filter.
   \\
-  \Option{SEINNPostFilterCharacteristicsParameterTypeFlag\emph{i}} &
-  \Default{false} &
-  Specifies the nnpfc_parameter_type_flag of the \emph{i}-th neural network post-filter.
+  \Option{SEINNPostFilterCharacteristicsParameterTypeIdc\emph{i}} &
+  \Default{0} &
+  Specifies the nnpfc_parameter_type_idc of the \emph{i}-th neural network post-filter.
   \par
   \begin{tabular}{cp{0.35\textwidth}}
-    false & Indicates that the \emph{i}-th neural network post-filter uses only integer parameters \\
-    true & Indicates that the \emph{i}-th neural network post-filter may use floating point or integer parameters \\
+    0 & Indicates that the \emph{i}-th neural network post-filter uses only integer parameters \\
+    1 & Indicates that the \emph{i}-th neural network post-filter may use floating point or integer parameters \\
+    2 & Indicates that the \emph{i}-th neural network post-filter may use binary parameters \\
   \end{tabular}
   \\
   \Option{SEINNPostFilterCharacteristicsLog2ParameterBitLengthMinus3\emph{i}} &
diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index b5e7fee33a0e0d2b80938878d95a38591b7a8063..c47847d564e6e70f2e2d05f2e12e1e5baf9911c3 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -1174,10 +1174,24 @@ void EncApp::xInitLibCfg()
       m_cEncLib.setNNPostFilterSEICharacteristicsPatchHeightMinus1       ( m_nnPostFilterSEICharacteristicsPatchHeightMinus1[i], i);
       m_cEncLib.setNNPostFilterSEICharacteristicsOverlap                 ( m_nnPostFilterSEICharacteristicsOverlap[i], i);
       m_cEncLib.setNNPostFilterSEICharacteristicsPaddingType             ( m_nnPostFilterSEICharacteristicsPaddingType[i], i);
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+      m_cEncLib.setNNPostFilterSEICharacteristicsLumaPadding             (m_nnPostFilterSEICharacteristicsLumaPadding[i], i);
+      m_cEncLib.setNNPostFilterSEICharacteristicsCrPadding               (m_nnPostFilterSEICharacteristicsCrPadding[i], i);
+      m_cEncLib.setNNPostFilterSEICharacteristicsCbPadding               (m_nnPostFilterSEICharacteristicsCbPadding[i], i);
+#endif
       m_cEncLib.setNNPostFilterSEICharacteristicsComplexityIdc           ( m_nnPostFilterSEICharacteristicsComplexityIdc[i], i);
       if (m_cEncLib.getNNPostFilterSEICharacteristicsComplexityIdc(i) > 0)
       {
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+      m_cEncLib.setNNPostFilterSEICharacteristicsLumaPadding             (m_nnPostFilterSEICharacteristicsLumaPadding[i], i);
+      m_cEncLib.setNNPostFilterSEICharacteristicsCrPadding               (m_nnPostFilterSEICharacteristicsCrPadding[i], i);
+      m_cEncLib.setNNPostFilterSEICharacteristicsCbPadding               (m_nnPostFilterSEICharacteristicsCbPadding[i], i);
+#endif
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+      m_cEncLib.setNNPostFilterSEICharacteristicsParameterTypeIdc        (m_nnPostFilterSEICharacteristicsParameterTypeIdc[i], i);
+#else
         m_cEncLib.setNNPostFilterSEICharacteristicsParameterTypeFlag       ( m_nnPostFilterSEICharacteristicsParameterTypeFlag[i], i);
+#endif
         m_cEncLib.setNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3     ( m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[i], i);
         m_cEncLib.setNNPostFilterSEICharacteristicsNumParametersIdc        ( m_nnPostFilterSEICharacteristicsNumParametersIdc[i], i);
         m_cEncLib.setNNPostFilterSEICharacteristicsNumKmacOperationsIdc    ( m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[i], i);
@@ -1217,7 +1231,11 @@ void EncApp::xInitLibCfg()
     m_cEncLib.setNNPostFilterSEICharacteristicsPaddingType             ( m_nnPostFilterSEICharacteristicsPaddingType[i], i);
     m_cEncLib.setNNPostFilterSEICharacteristicsPayloadFilename         ( m_nnPostFilterSEICharacteristicsPayloadFilename[i], i);
     m_cEncLib.setNNPostFilterSEICharacteristicsComplexityIdc           ( m_nnPostFilterSEICharacteristicsComplexityIdc[i], i);
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+    m_cEncLib.setNNPostFilterSEICharacteristicsParameterTypeIdc        (m_nnPostFilterSEICharacteristicsParameterTypeIdc[i], i);
+#else
     m_cEncLib.setNNPostFilterSEICharacteristicsParameterTypeFlag       ( m_nnPostFilterSEICharacteristicsParameterTypeFlag[i], i);
+#endif
     m_cEncLib.setNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3     ( m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[i], i);
     m_cEncLib.setNNPostFilterSEICharacteristicsNumParametersIdc        ( m_nnPostFilterSEICharacteristicsNumParametersIdc[i], i);
     m_cEncLib.setNNPostFilterSEICharacteristicsNumKmacOperationsIdc    ( m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[i], i);
diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 60ee1bc90d77bac2bfa534f62c3e9077086f7999..de7146ac5088a455e55f2c38801c64dd2eacb472 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -1800,13 +1800,33 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
     paddingType << "SEINNPostFilterCharacteristicsPaddingType" << i;
     opts.addOptions()(paddingType.str(), m_nnPostFilterSEICharacteristicsPaddingType[i], 0u, "Specifies the process of padding when referencing sample locations outside the boundaries of the cropped decoded output picture ");
 
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+    std::ostringstream lumaPadding;
+    lumaPadding << "SEINNPostFilterCharacteristicsLumaPadding" << i;
+    opts.addOptions()(lumaPadding.str(), m_nnPostFilterSEICharacteristicsLumaPadding[i], 0u, "Specifies the luma padding when when the padding type is fixed padding ");
+
+    std::ostringstream crPadding;
+    crPadding << "SEINNPostFilterCharacteristicsCrPadding" << i;
+    opts.addOptions()(crPadding.str(), m_nnPostFilterSEICharacteristicsCrPadding[i], 0u, "Specifies the Cr padding when when the padding type is fixed padding ");
+
+    std::ostringstream cbPadding;
+    cbPadding << "SEINNPostFilterCharacteristicsCbPadding" << i;
+    opts.addOptions()(cbPadding.str(), m_nnPostFilterSEICharacteristicsCbPadding[i], 0u, "Specifies the Cb padding when when the padding type is fixed padding ");
+#endif
+
     std::ostringstream complexityIdc;
     complexityIdc << "SEINNPostFilterCharacteristicsComplexityIdc" << i;
     opts.addOptions()(complexityIdc.str(), m_nnPostFilterSEICharacteristicsComplexityIdc[i], 0u, "Specifies the value of nnpfc_complexity_idc in the Neural Network Post Filter Characteristics SEI message");
 
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+    std::ostringstream parameterTypeIdc;
+    parameterTypeIdc << "SEINNPostFilterCharacteristicsParameterTypeIdc" << i;
+    opts.addOptions()(parameterTypeIdc.str(), m_nnPostFilterSEICharacteristicsParameterTypeIdc[i], 0u, "Specifies the data type of parameters in the Neural Network Post Filter Characteristics SEI message");
+#else
     std::ostringstream parameterTypeFlag;
     parameterTypeFlag << "SEINNPostFilterCharacteristicsParameterTypeFlag" << i;
     opts.addOptions()(parameterTypeFlag.str(), m_nnPostFilterSEICharacteristicsParameterTypeFlag[i], false, "Specifies the data type of parameters in the Neural Network Post Filter Characteristics SEI message");
+#endif
 
     std::ostringstream log2ParameterBitLengthMinus3;
     log2ParameterBitLengthMinus3 << "SEINNPostFilterCharacteristicsLog2ParameterBitLengthMinus3" << i;
diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h
index 5069dab0552af65c432257606a29232d4a8752d0..5885cbe7d2f1bbc9fcfd06cd11c2eafc4195bffe 100644
--- a/source/App/EncoderApp/EncAppCfg.h
+++ b/source/App/EncoderApp/EncAppCfg.h
@@ -765,9 +765,18 @@ protected:
   uint32_t              m_nnPostFilterSEICharacteristicsPatchHeightMinus1[MAX_NUM_NN_POST_FILTERS];
   uint32_t              m_nnPostFilterSEICharacteristicsOverlap[MAX_NUM_NN_POST_FILTERS];
   uint32_t              m_nnPostFilterSEICharacteristicsPaddingType[MAX_NUM_NN_POST_FILTERS];
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+  uint32_t              m_nnPostFilterSEICharacteristicsLumaPadding[MAX_NUM_NN_POST_FILTERS];
+  uint32_t              m_nnPostFilterSEICharacteristicsCbPadding[MAX_NUM_NN_POST_FILTERS];
+  uint32_t              m_nnPostFilterSEICharacteristicsCrPadding[MAX_NUM_NN_POST_FILTERS];
+#endif
   std::string           m_nnPostFilterSEICharacteristicsPayloadFilename[MAX_NUM_NN_POST_FILTERS];
   uint32_t              m_nnPostFilterSEICharacteristicsComplexityIdc[MAX_NUM_NN_POST_FILTERS];
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+  uint32_t              m_nnPostFilterSEICharacteristicsParameterTypeIdc[MAX_NUM_NN_POST_FILTERS];
+#else
   bool                  m_nnPostFilterSEICharacteristicsParameterTypeFlag[MAX_NUM_NN_POST_FILTERS];
+#endif
   uint32_t              m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[MAX_NUM_NN_POST_FILTERS];
   uint32_t              m_nnPostFilterSEICharacteristicsNumParametersIdc[MAX_NUM_NN_POST_FILTERS];
   uint32_t              m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[MAX_NUM_NN_POST_FILTERS];
diff --git a/source/Lib/CommonLib/SEI.h b/source/Lib/CommonLib/SEI.h
index b002e9087b8b89853628f03ada2ba6c247c00ee3..93cad1ad29e1d42f2f767268ea97a1eae22eee4c 100644
--- a/source/Lib/CommonLib/SEI.h
+++ b/source/Lib/CommonLib/SEI.h
@@ -1137,9 +1137,18 @@ public:
   , m_patchHeightMinus1(0)
   , m_overlap(0)
   , m_paddingType(0)
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+  , m_lumaPadding(0)
+  , m_cbPadding(0)
+  , m_crPadding(0)
+#endif
   , m_payloadByte(nullptr)
   , m_complexityIdc(0)
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+  , m_parameterTypeIdc(0)
+#else
   , m_parameterTypeFlag(false)
+#endif
   , m_log2ParameterBitLengthMinus3(0)
   , m_numParametersIdc(0)
   , m_numKmacOperationsIdc(0)
@@ -1189,10 +1198,19 @@ public:
   uint32_t       m_patchHeightMinus1;
   uint32_t       m_overlap;
   uint32_t       m_paddingType;
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+  uint32_t       m_lumaPadding;
+  uint32_t       m_cbPadding;
+  uint32_t       m_crPadding;
+#endif
   uint64_t       m_payloadLength;
   char*          m_payloadByte;
   uint32_t       m_complexityIdc;
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+  uint32_t       m_parameterTypeIdc;
+#else
   bool           m_parameterTypeFlag;
+#endif
   uint32_t       m_log2ParameterBitLengthMinus3;
   uint32_t       m_numParametersIdc;
   uint32_t       m_numKmacOperationsIdc;
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index ca5bd314182422bd27037f0f054f152fa99b6652..1d6b05c0c305ea51f5713d69ddb24fe9803bcf8e 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -61,6 +61,8 @@
 #define JVET_AA0054_CHROMA_FORMAT_FLAG                    1 // JVET-AA0054 PROPOSAL2: Signalling improvements to specify output chroma information
 #define JVET_AA0054_CHROMA_UPSAMPLING_CONSTRAINT          1 // JVET-AA0054 PROPOSAL3: Constraint to prevent chroma upsampling when input chroma format is monochrome or YUV444
 #define JVET_AA0102_JVET_AA2027_SEI_PROCESSING_ORDER      1 // JVET-AA0102 and JVET-AA2027: SEI processing order SEI message in VVC (Draft 1) (SEI processing order SEI message carries information indicating the preferred processing order, as determined by the encoder)
+#define JVET_AA0055_SIGNAL_ADDITIONAL_PADDING             1 // JVET-AA0055 PROPOSAL A: Allow for signalling additional padding types for the neural network
+#define JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK         1 // JVET-AA0055 PROPOSAL B: Allow for signalling the use of binary neural network
 
 //########### place macros to be be kept below this line ###############
 #define JVET_X0143_ALF_APS_ID_OFFSET                      0 // A value between 0 to 7 inclusive. This macro should be kept, or to be defined as a configuration parameter if possible.
@@ -681,6 +683,17 @@ enum SAOEOClasses
   NUM_SAO_EO_CLASSES,
 };
 
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+enum NNPC_PaddingType
+{
+  ZERO_PADDING = 0,
+  REPLICATION_PADDING = 1,
+  REFLECTION_PADDING = 2,
+  WRAP_AROUND_PADDING = 3,
+  FIXED_PADDING = 4
+};
+#endif
+
 #define NUM_SAO_BO_CLASSES_LOG2  5
 #define NUM_SAO_BO_CLASSES       (1<<NUM_SAO_BO_CLASSES_LOG2)
 
diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp
index 6afd8d990d07914c46b411d0e36df956adbe5448..6a38be7d2094d9b0d899a89156e5bbd7e475ca31 100644
--- a/source/Lib/DecoderLib/SEIread.cpp
+++ b/source/Lib/DecoderLib/SEIread.cpp
@@ -2652,6 +2652,20 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC
     sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_padding_type");
     sei.m_paddingType = val;
 
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+    if (sei.m_paddingType == NNPC_PaddingType::FIXED_PADDING)
+    {
+      sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_luma_padding_val");
+      sei.m_lumaPadding = val;
+
+      sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_cb_padding_val");
+      sei.m_cbPadding = val;
+
+      sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_cr_padding_val");
+      sei.m_crPadding = val;
+    }
+#endif
+
     sei_read_uvlc(pDecodedMessageOutputStream, val, "nnpfc_complexity_idc");
     sei.m_complexityIdc = val;
 
@@ -2659,11 +2673,21 @@ void SEIReader::xParseSEINNPostFilterCharacteristics(SEINeuralNetworkPostFilterC
     {
       if(sei.m_complexityIdc == 1)
       {
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+        sei_read_code(pDecodedMessageOutputStream, 2, val, "nnpfc_parameter_type_idc");
+        sei.m_parameterTypeIdc = val;
+        if (sei.m_parameterTypeIdc != 2)
+        {
+          sei_read_code(pDecodedMessageOutputStream, 2, val, "nnpfc_log2_parameter_bit_length_minus3");
+          sei.m_log2ParameterBitLengthMinus3 = val;
+        }
+#else
         sei_read_flag(pDecodedMessageOutputStream, val, "nnpfc_parameter_type_flag");
         sei.m_parameterTypeFlag = val;
 
         sei_read_code(pDecodedMessageOutputStream, 2, val, "nnpfc_log2_parameter_bit_length_minus3");
         sei.m_log2ParameterBitLengthMinus3 = val;
+#endif
 
 #if JVET_AA0067_NNPFC_SEI_FIX
         sei_read_code(pDecodedMessageOutputStream, 6, val, "nnpfc_num_parameters_idc");
diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h
index f07e33be1e9fc24e7b73cb07b2863cc0ed533911..f8465094ef1b1dfe330818c3c25abc97e8cb3d53 100644
--- a/source/Lib/EncoderLib/EncCfg.h
+++ b/source/Lib/EncoderLib/EncCfg.h
@@ -707,9 +707,18 @@ protected:
   uint32_t                m_nnPostFilterSEICharacteristicsPatchHeightMinus1[MAX_NUM_NN_POST_FILTERS];
   uint32_t                m_nnPostFilterSEICharacteristicsOverlap[MAX_NUM_NN_POST_FILTERS];
   uint32_t                m_nnPostFilterSEICharacteristicsPaddingType[MAX_NUM_NN_POST_FILTERS];
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+  uint32_t                m_nnPostFilterSEICharacteristicsLumaPadding[MAX_NUM_NN_POST_FILTERS];
+  uint32_t                m_nnPostFilterSEICharacteristicsCrPadding[MAX_NUM_NN_POST_FILTERS];
+  uint32_t                m_nnPostFilterSEICharacteristicsCbPadding[MAX_NUM_NN_POST_FILTERS];
+#endif
   std::string             m_nnPostFilterSEICharacteristicsPayloadFilename[MAX_NUM_NN_POST_FILTERS];
   uint32_t                m_nnPostFilterSEICharacteristicsComplexityIdc[MAX_NUM_NN_POST_FILTERS];
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+  uint32_t                m_nnPostFilterSEICharacteristicsParameterTypeIdc[MAX_NUM_NN_POST_FILTERS];
+#else
   bool                    m_nnPostFilterSEICharacteristicsParameterTypeFlag [MAX_NUM_NN_POST_FILTERS];
+#endif
   uint32_t                m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[MAX_NUM_NN_POST_FILTERS];
   uint32_t                m_nnPostFilterSEICharacteristicsNumParametersIdc[MAX_NUM_NN_POST_FILTERS];
   uint32_t                m_nnPostFilterSEICharacteristicsNumKmacOperationsIdc[MAX_NUM_NN_POST_FILTERS];
@@ -1864,10 +1873,24 @@ public:
   void        setNNPostFilterSEICharacteristicsPaddingType(uint32_t paddingType, int filterIdx)                         { m_nnPostFilterSEICharacteristicsPaddingType[filterIdx] = paddingType; }
   uint32_t    getNNPostFilterSEICharacteristicsPaddingType(int filterIdx) const                                         { return m_nnPostFilterSEICharacteristicsPaddingType[filterIdx]; }
 
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+  void        setNNPostFilterSEICharacteristicsLumaPadding(uint32_t lumaPadding, int filterIdx) { m_nnPostFilterSEICharacteristicsLumaPadding[filterIdx] = lumaPadding; }
+  uint32_t    getNNPostFilterSEICharacteristicsLumaPadding(int filterIdx) const { return m_nnPostFilterSEICharacteristicsLumaPadding[filterIdx]; }
+  void        setNNPostFilterSEICharacteristicsCbPadding(uint32_t cbPadding, int filterIdx) { m_nnPostFilterSEICharacteristicsCbPadding[filterIdx] = cbPadding; }
+  uint32_t    getNNPostFilterSEICharacteristicsCbPadding(int filterIdx) const { return m_nnPostFilterSEICharacteristicsCbPadding[filterIdx]; }
+  void        setNNPostFilterSEICharacteristicsCrPadding(uint32_t crPadding, int filterIdx) { m_nnPostFilterSEICharacteristicsCrPadding[filterIdx] = crPadding; }
+  uint32_t    getNNPostFilterSEICharacteristicsCrPadding(int filterIdx) const { return m_nnPostFilterSEICharacteristicsCrPadding[filterIdx]; }
+#endif
+
   void        setNNPostFilterSEICharacteristicsComplexityIdc (uint32_t complexityIdc , int filterIdx)                   { m_nnPostFilterSEICharacteristicsComplexityIdc[filterIdx] = complexityIdc ; }
   uint32_t    getNNPostFilterSEICharacteristicsComplexityIdc (int filterIdx) const                                      { return m_nnPostFilterSEICharacteristicsComplexityIdc[filterIdx]; }
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+  void        setNNPostFilterSEICharacteristicsParameterTypeIdc(uint32_t parameterTypeIdc, int filterIdx) { m_nnPostFilterSEICharacteristicsParameterTypeIdc[filterIdx] = parameterTypeIdc; }
+  uint32_t    getNNPostFilterSEICharacteristicsParameterTypeIdc(int filterIdx) const { return m_nnPostFilterSEICharacteristicsParameterTypeIdc[filterIdx]; }
+#else
   void        setNNPostFilterSEICharacteristicsParameterTypeFlag(bool parameterTypeFlag, int filterIdx)                 { m_nnPostFilterSEICharacteristicsParameterTypeFlag[filterIdx] = parameterTypeFlag; }
   bool        getNNPostFilterSEICharacteristicsParameterTypeFlag(int filterIdx) const                                   { return m_nnPostFilterSEICharacteristicsParameterTypeFlag[filterIdx]; }
+#endif
   void        setNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3 (uint32_t log2ParameterBitLengthMinus3 , int filterIdx) { m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[filterIdx] = log2ParameterBitLengthMinus3 ; }
   uint32_t    getNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3 (int filterIdx) const                       { return m_nnPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3[filterIdx]; }
   void        setNNPostFilterSEICharacteristicsNumParametersIdc  (uint32_t numParametersIdc  , int filterIdx)           { m_nnPostFilterSEICharacteristicsNumParametersIdc[filterIdx] = numParametersIdc  ; }
diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp
index 2a706588f27d2371d222ca6f99e80692f8e0a05e..a22e52e4bfa7e6e596f71464d0a2646e893baeb2 100644
--- a/source/Lib/EncoderLib/SEIEncoder.cpp
+++ b/source/Lib/EncoderLib/SEIEncoder.cpp
@@ -1258,13 +1258,22 @@ void SEIEncoder::initSEINeuralNetworkPostFilterCharacteristics(SEINeuralNetworkP
     sei->m_patchHeightMinus1 = m_pcCfg->getNNPostFilterSEICharacteristicsPatchHeightMinus1(filterIdx);
     sei->m_overlap = m_pcCfg->getNNPostFilterSEICharacteristicsOverlap(filterIdx);
     sei->m_paddingType = m_pcCfg->getNNPostFilterSEICharacteristicsPaddingType(filterIdx);
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+    sei->m_lumaPadding = m_pcCfg->getNNPostFilterSEICharacteristicsLumaPadding(filterIdx);
+    sei->m_cbPadding = m_pcCfg->getNNPostFilterSEICharacteristicsCbPadding(filterIdx);
+    sei->m_crPadding = m_pcCfg->getNNPostFilterSEICharacteristicsCrPadding(filterIdx);
+#endif
 
     sei->m_complexityIdc = m_pcCfg->getNNPostFilterSEICharacteristicsComplexityIdc(filterIdx);
     if(sei->m_complexityIdc > 0)
     {
       if(sei->m_complexityIdc == 1)
       {
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+        sei->m_parameterTypeIdc = m_pcCfg->getNNPostFilterSEICharacteristicsParameterTypeIdc(filterIdx);
+#else
         sei->m_parameterTypeFlag = m_pcCfg->getNNPostFilterSEICharacteristicsParameterTypeFlag(filterIdx);
+#endif
         sei->m_log2ParameterBitLengthMinus3 = m_pcCfg->getNNPostFilterSEICharacteristicsLog2ParameterBitLengthMinus3(filterIdx);
         sei->m_numParametersIdc = m_pcCfg->getNNPostFilterSEICharacteristicsNumParametersIdc(filterIdx);
         sei->m_numKmacOperationsIdc = m_pcCfg->getNNPostFilterSEICharacteristicsNumKmacOperationsIdc(filterIdx);
diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp
index ca2e6c07b7b120c2456cc47c6155a79769bad560..4ca4b4f2338c1928866948715a87c50dfc459851 100644
--- a/source/Lib/EncoderLib/SEIwrite.cpp
+++ b/source/Lib/EncoderLib/SEIwrite.cpp
@@ -1484,6 +1484,14 @@ void SEIWriter::xWriteSEINeuralNetworkPostFilterCharacteristics(const SEINeuralN
     WRITE_UVLC(sei.m_patchHeightMinus1, "nnpfc_patch_height_minus1");
     WRITE_UVLC(sei.m_overlap, "nnpfc_overlap");
     WRITE_UVLC(sei.m_paddingType, "nnpfc_padding_type");
+#if JVET_AA0055_SIGNAL_ADDITIONAL_PADDING
+    if (sei.m_paddingType == NNPC_PaddingType::FIXED_PADDING)
+    {
+      WRITE_UVLC(sei.m_lumaPadding, "nnpfc_luma_padding_val");
+      WRITE_UVLC(sei.m_cbPadding, "nnpfc_cb_padding_val");
+      WRITE_UVLC(sei.m_crPadding, "nnpfc_cr_padding_val");
+    }
+#endif
 
     WRITE_UVLC(sei.m_complexityIdc, "nnpfc_complexity_idc");
     if(sei.m_complexityIdc > 0)
@@ -1508,8 +1516,16 @@ void SEIWriter::xWriteNNPFCComplexityElement(const SEINeuralNetworkPostFilterCha
 {
   if(sei.m_complexityIdc == 1)
   {
+#if JVET_AA0055_SUPPORT_BINARY_NEURAL_NETWORK
+    WRITE_CODE(sei.m_parameterTypeIdc, 2, "nnpfc_parameter_type_idc");
+    if (sei.m_parameterTypeIdc != 2)
+    {
+      WRITE_CODE(sei.m_log2ParameterBitLengthMinus3, 2, "nnpfc_log2_parameter_bit_length_minus3");
+  }
+#else
     WRITE_FLAG(sei.m_parameterTypeFlag, "nnpfc_parameter_type_flag");
     WRITE_CODE(sei.m_log2ParameterBitLengthMinus3, 2, "nnpfc_log2_parameter_bit_length_minus3");
+#endif
 #if JVET_AA0067_NNPFC_SEI_FIX
     WRITE_CODE(sei.m_numParametersIdc, 6, "nnpfc_num_parameters_idc");
 #else