diff --git a/cfg/sei_vui/encoder_optimization_info.cfg b/cfg/sei_vui/encoder_optimization_info.cfg
index f2d7c3ded976f405fa44ea407c1382877c6f0b4b..7db20f90c88cc9278c196db69a837185bbe9a399 100644
--- a/cfg/sei_vui/encoder_optimization_info.cfg
+++ b/cfg/sei_vui/encoder_optimization_info.cfg
@@ -9,6 +9,9 @@ SEIEOIType:          39                 #Bitmask for type of optmiization applie
 SEIEOIObjectBasedIdc: 0                 #Bitmask for object based optimization type
 SEIEOITemporalResamplingTypeFlag: 1     #Type of temporal resampling (0: subsampling, 1: upsampling)
 SEIEOINumIntPics: 2                     #Num of added picture between two pics when temporal resampling type optimization is enabled
+SEIEOIOrigPicDimensionsFlag: 1		# Whether original source picture dimensions are present
+SEIEOIOrigPicWidth: 1280		# Original source picture width
+SEIEOIOrigPicHeight: 720		# Original source picture height
 SEIEOISpatialResamplingTypeFlag: 0      #Type of spatial resampling (0: subsampling, 1: upsampling)
 SEIEOIPrivacyProtectionTypeIdc: 0       #Type of privacy protection method that is applied (0: Undefined, 1: Blurring, 2: Replacing, 3: Masking)
 SEIEOIPrivacyProtectedInfoType: 128     #Type of privacy information that is protected
diff --git a/doc/software-manual.tex b/doc/software-manual.tex
index 9991d426e9d8ee3349ea6bff8660d62e82d4bc1e..345845e2592f2a8682b2681b33d7f53eda13be5e 100644
--- a/doc/software-manual.tex
+++ b/doc/software-manual.tex
@@ -6072,6 +6072,18 @@ Specifies whether temporal resampling type optimization is enabled.
 \Default{2} &
 Specifies the number of added picture between two pics when temporal resampling type optimization is enabled.
 \\
+\Option{SEIEOIOrigPicDimensionsFlag} &
+\Default{0} &
+Specifies if original source picture dimensions are present.
+\\
+\Option{SEIEOIOrigPicWidth} &
+\Default{0} &
+Specifies the width of the original source picture.
+\\
+\Option{SEIEOIOrigPicHeight} &
+\Default{0} &
+Specifies the height of the original source picture.
+\\
 \Option{SEIEOISpatialResamplingTypeFlag} &
 \Default{0} &
 Specifies whether spatial resampling type optimization is enabled.
diff --git a/source/App/EncoderApp/EncApp.cpp b/source/App/EncoderApp/EncApp.cpp
index 8473d3676ee8cab6859294e5e861fa8038ceb096..e6a37beaff7e58c010034502167898df7f47079b 100644
--- a/source/App/EncoderApp/EncApp.cpp
+++ b/source/App/EncoderApp/EncApp.cpp
@@ -1122,6 +1122,11 @@ void EncApp::xInitLibCfg( int layerIdx )
   m_cEncLib.setEOISEIObjectBasedIdc(m_eoiSEIObjectBasedIdc);
   m_cEncLib.setEOISEITemporalResamplingTypeFlag(m_eoiSEITemporalResamplingTypeFlag);
   m_cEncLib.setEOISEINumIntPics(m_eoiSEINumIntPics);
+#if JVET_AI0180
+  m_cEncLib.setEOISEIOrigPicDimensionsFlag(m_eoiSEIOrigPicDimensionsFlag);
+  m_cEncLib.setEOISEIOrigPicWidth(m_eoiSEIOrigPicWidth);
+  m_cEncLib.setEOISEIOrigPicHeight(m_eoiSEIOrigPicHeight);
+#endif
   m_cEncLib.setEOISEISpatialResamplingTypeFlag(m_eoiSEISpatialResamplingTypeFlag);
   m_cEncLib.setEOISEIPrivacyProtectionTypeIdc(m_eoiSEIPrivacyProtectionTypeIdc);
   m_cEncLib.setEOISEIPrivacyProtectedInfoType(m_eoiSEIPrivacyProtectedInfoType);
diff --git a/source/App/EncoderApp/EncAppCfg.cpp b/source/App/EncoderApp/EncAppCfg.cpp
index 418a915e631a5d490e3bad0a85f546e23d2443fe..bec861e796c6c38ee91d07d4b4b46f64513982bb 100644
--- a/source/App/EncoderApp/EncAppCfg.cpp
+++ b/source/App/EncoderApp/EncAppCfg.cpp
@@ -1488,6 +1488,11 @@ bool EncAppCfg::parseCfg( int argc, char* argv[] )
 ("SEIEOIObjectBasedIdc", m_eoiSEIObjectBasedIdc, 0u, "Indicates the type of object-based optimization")
 ("SEIEOITemporalResamplingTypeFlag", m_eoiSEITemporalResamplingTypeFlag, false, "specifies the type of the temporal resampling optimization.")
 ("SEIEOINumIntPics", m_eoiSEINumIntPics, 0u, "indicates that the count of pictures that the encoding system excluded or added between each pair of coded pictures in output order within the persistence of this SEI message is constant")
+#if JVET_AI0180
+("SEIEOIOrigPicDimensionsFlag",m_eoiSEIOrigPicDimensionsFlag, false, "specifies if original source picture dimensions are present.")
+("SEIEOIOrigPicWidth", m_eoiSEIOrigPicWidth, 0u, "indicates the width of the original source picture.")
+("SEIEOIOrigPicHeight", m_eoiSEIOrigPicHeight, 0u, "indicates the height of the original source picture.")
+#endif
 ("SEIEOISpatialResamplingTypeFlag", m_eoiSEISpatialResamplingTypeFlag, false, "specifies the type of the spatial resampling optimization.")
 ("SEIEOIPrivacyProtectionTypeIdc", m_eoiSEIPrivacyProtectionTypeIdc, 0u, "indicates the type of privacy protection optimization")
 ("SEIEOIPrivacyProtectedInfoType", m_eoiSEIPrivacyProtectedInfoType, 0u, "indicates the types of protected information")
diff --git a/source/App/EncoderApp/EncAppCfg.h b/source/App/EncoderApp/EncAppCfg.h
index cba5782fc7e6657f04bb51a772d4a120636dba5b..e3d3579ab5de7de08a4ae53dc4ca057694040352 100644
--- a/source/App/EncoderApp/EncAppCfg.h
+++ b/source/App/EncoderApp/EncAppCfg.h
@@ -550,6 +550,11 @@ protected:
   uint32_t m_eoiSEIObjectBasedIdc;
   bool m_eoiSEITemporalResamplingTypeFlag;
   uint32_t m_eoiSEINumIntPics;
+#if JVET_AI0180
+  bool     m_eoiSEIOrigPicDimensionsFlag;
+  uint32_t m_eoiSEIOrigPicWidth;
+  uint32_t m_eoiSEIOrigPicHeight;
+#endif
   bool m_eoiSEISpatialResamplingTypeFlag;
   uint32_t m_eoiSEIPrivacyProtectionTypeIdc;
   uint32_t m_eoiSEIPrivacyProtectedInfoType;
diff --git a/source/Lib/CommonLib/SEI.cpp b/source/Lib/CommonLib/SEI.cpp
index 75cc4c3007cb5f0d150d7d1468dfd85c2ca90039..c055d125e954b777367ace66acef800b090f502e 100644
--- a/source/Lib/CommonLib/SEI.cpp
+++ b/source/Lib/CommonLib/SEI.cpp
@@ -1149,6 +1149,11 @@ SEIEncoderOptimizationInfo::SEIEncoderOptimizationInfo(
   m_objectBasedIdc = sei.m_objectBasedIdc;
   m_temporalResamplingTypeFlag = sei.m_temporalResamplingTypeFlag;
   m_numIntPics = sei.m_numIntPics;
+#if JVET_AI0180
+  m_origPicDimensionsFlag = sei.m_origPicDimensionsFlag;
+  m_origPicWidth = sei.m_origPicWidth;
+  m_origPicHeight = sei.m_origPicHeight;
+#endif
   m_spatialResamplingTypeFlag = sei.m_spatialResamplingTypeFlag;
   m_privacyProtectionTypeIdc = sei.m_privacyProtectionTypeIdc;
   m_privacyProtectedInfoType = sei.m_privacyProtectedInfoType;
diff --git a/source/Lib/CommonLib/SEI.h b/source/Lib/CommonLib/SEI.h
index 27cac5298724827f07ad59e34eeaf355aabf16af..412d666cb6481d70ca834cfeac74bb1e939b95bc 100644
--- a/source/Lib/CommonLib/SEI.h
+++ b/source/Lib/CommonLib/SEI.h
@@ -1505,6 +1505,11 @@ public:
     , m_objectBasedIdc(0)
     , m_temporalResamplingTypeFlag(false)
     , m_numIntPics(0)
+ #if JVET_AI0180
+    , m_origPicDimensionsFlag(false)
+    , m_origPicWidth(0)
+    , m_origPicHeight(0)
+ #endif
     , m_spatialResamplingTypeFlag(false)
     , m_privacyProtectionTypeIdc(0)
     , m_privacyProtectedInfoType(0)
@@ -1521,6 +1526,11 @@ public:
   uint32_t m_objectBasedIdc;
   bool     m_temporalResamplingTypeFlag;
   uint32_t m_numIntPics;
+#if JVET_AI0180
+  bool     m_origPicDimensionsFlag;
+  uint32_t m_origPicWidth;
+  uint32_t m_origPicHeight;
+#endif
   bool     m_spatialResamplingTypeFlag;
   uint32_t m_privacyProtectionTypeIdc;
   uint32_t m_privacyProtectedInfoType;
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 1685cdd509fe34b0ac3a616f1b6af21c2db9c8b4..b8f82c914912ef6b98bf9ae35ff8d5deec18f454 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -54,6 +54,7 @@
 
 // clang-format off
 
+#define JVET_AI0180   1   // JVET AI0180: "AHG9: Adding original source picture dimensions to EOI SEI"
 
 //########### place macros to be removed in next cycle below this line ###############
 
diff --git a/source/Lib/DecoderLib/SEIread.cpp b/source/Lib/DecoderLib/SEIread.cpp
index 4cb9daca8a0b62ace5c7064623b57e7b1a3835ea..4792791c34617b843ac96669cff9753f0c3d969a 100644
--- a/source/Lib/DecoderLib/SEIread.cpp
+++ b/source/Lib/DecoderLib/SEIread.cpp
@@ -1882,8 +1882,25 @@ void SEIReader::xParseSEIEncoderOptimizationInfo(SEIEncoderOptimizationInfo& sei
 
     if ((sei.m_type & EOI_OptimizationType::SPATIAL_RESAMPLING) != 0)
     {
+#if JVET_AI0180
+      sei_read_flag(pDecodedMessageOutputStream, val, "eoi_orig_pic_dimensions_flag");
+      sei.m_origPicDimensionsFlag = val;
+      if (sei.m_origPicDimensionsFlag) 
+      {
+        sei_read_code(pDecodedMessageOutputStream, 16, val, "eoi_orig_pic_width");
+        sei.m_origPicWidth = val;
+        sei_read_code(pDecodedMessageOutputStream, 16, val, "eoi_orig_pic_height");
+        sei.m_origPicHeight = val;
+      }
+      else
+      {
+        sei_read_flag(pDecodedMessageOutputStream, val, "eoi_spatial_resampling_type_flag");
+        sei.m_spatialResamplingTypeFlag = val;
+      }
+#else
       sei_read_flag(pDecodedMessageOutputStream, val, "eoi_spatial_resampling_type_flag");
       sei.m_spatialResamplingTypeFlag = val;
+#endif
     }
     
     if ((sei.m_type & EOI_OptimizationType::PRIVACY_PROTECTION_OPTIMIZATION) != 0)
diff --git a/source/Lib/EncoderLib/EncCfg.h b/source/Lib/EncoderLib/EncCfg.h
index ff898d5789fdb538e365cc39d2b07052d35dec5f..cc4a56a0753c98d0a630f1337a40463529ce3576 100644
--- a/source/Lib/EncoderLib/EncCfg.h
+++ b/source/Lib/EncoderLib/EncCfg.h
@@ -787,6 +787,11 @@ protected:
   uint32_t m_eoiSEIObjectBasedIdc;
   bool m_eoiSEITemporalResamplingTypeFlag;
   uint32_t m_eoiSEINumIntPics;
+#if JVET_AI0180
+  bool     m_eoiSEIOrigPicDimensionsFlag;
+  uint32_t m_eoiSEIOrigPicWidth;
+  uint32_t m_eoiSEIOrigPicHeight;
+#endif
   bool m_eoiSEISpatialResamplingTypeFlag;
   uint32_t m_eoiSEIPrivacyProtectionTypeIdc;
   uint32_t m_eoiSEIPrivacyProtectedInfoType;
@@ -2406,6 +2411,14 @@ public:
   bool getEOISEITemporalResamplingTypeFlag() const { return m_eoiSEITemporalResamplingTypeFlag; }
   void setEOISEINumIntPics(uint32_t numIntPics) { m_eoiSEINumIntPics = numIntPics; }
   uint32_t getEOISEINumIntPics() const { return m_eoiSEINumIntPics; }
+#if JVET_AI0180
+  void setEOISEIOrigPicDimensionsFlag(bool origPicDimensionsFlag) { m_eoiSEIOrigPicDimensionsFlag = origPicDimensionsFlag; }
+  bool getEOISEIOrigPicDimensionsFlag() { return m_eoiSEIOrigPicDimensionsFlag; }
+  void setEOISEIOrigPicWidth(uint32_t origPicWidth) { m_eoiSEIOrigPicWidth = origPicWidth; }
+  uint32_t getEOISEIOrigPicWidth() { return m_eoiSEIOrigPicWidth; }
+  void     setEOISEIOrigPicHeight(uint32_t origPicHeight) { m_eoiSEIOrigPicHeight = origPicHeight; }
+  uint32_t getEOISEIOrigPicHeight() { return m_eoiSEIOrigPicHeight; }
+#endif
   void setEOISEISpatialResamplingTypeFlag(bool spatialResamplingTypeFlag) { m_eoiSEISpatialResamplingTypeFlag = spatialResamplingTypeFlag; }
   bool getEOISEISpatialResamplingTypeFlag() const { return m_eoiSEISpatialResamplingTypeFlag; }
   void setEOISEIPrivacyProtectionTypeIdc(uint32_t privacyProtectionTypeIdc) { m_eoiSEIPrivacyProtectionTypeIdc = privacyProtectionTypeIdc; }
diff --git a/source/Lib/EncoderLib/SEIEncoder.cpp b/source/Lib/EncoderLib/SEIEncoder.cpp
index 71ab049bf5eed7ad546c818941d9e55e65e8eaf2..7f2b11fc48482925c7ac8f0c29c41d2d210efa32 100644
--- a/source/Lib/EncoderLib/SEIEncoder.cpp
+++ b/source/Lib/EncoderLib/SEIEncoder.cpp
@@ -1595,7 +1595,20 @@ void SEIEncoder::initSEIEncoderOptimizationInfo(SEIEncoderOptimizationInfo *sei)
     }
     if ((sei->m_type & EOI_OptimizationType::SPATIAL_RESAMPLING) != 0)
     {
+#if JVET_AI0180
+      sei->m_origPicDimensionsFlag = m_pcCfg->getEOISEIOrigPicDimensionsFlag();
+      if (sei->m_origPicDimensionsFlag)
+      {
+        sei->m_origPicWidth  = m_pcCfg->getEOISEIOrigPicWidth();
+        sei->m_origPicHeight = m_pcCfg->getEOISEIOrigPicHeight();
+      }
+      else
+      {
+        sei->m_spatialResamplingTypeFlag = m_pcCfg->getEOISEISpatialResamplingTypeFlag();
+      }
+#else
       sei->m_spatialResamplingTypeFlag = m_pcCfg->getEOISEISpatialResamplingTypeFlag();
+#endif
     }
     if ((sei->m_type & EOI_OptimizationType::PRIVACY_PROTECTION_OPTIMIZATION) != 0)
     {
diff --git a/source/Lib/EncoderLib/SEIwrite.cpp b/source/Lib/EncoderLib/SEIwrite.cpp
index c3417c5a34d6e5a7aa9d8cc7e5817effa330d09b..97bf8b0cb185cde36557fdc2ab867d191565595c 100644
--- a/source/Lib/EncoderLib/SEIwrite.cpp
+++ b/source/Lib/EncoderLib/SEIwrite.cpp
@@ -2006,7 +2006,20 @@ void SEIWriter::xWriteSEIEncoderOptimizationInfo(const SEIEncoderOptimizationInf
     }
     if ((sei.m_type & EOI_OptimizationType::SPATIAL_RESAMPLING) != 0)
     {
+#if JVET_AI0180
+      xWriteFlag(sei.m_origPicDimensionsFlag, "eoi_orig_pic_dimensions_flag");
+      if (sei.m_origPicDimensionsFlag)
+      {
+        xWriteCode(sei.m_origPicWidth, 16, "eoi_orig_pic_width");
+        xWriteCode(sei.m_origPicHeight, 16, "eoi_orig_pic_height");
+      }
+      else
+      {
+        xWriteFlag(sei.m_spatialResamplingTypeFlag, "eoi_spatial_resampling_type_flag");
+      }
+#else
       xWriteFlag(sei.m_spatialResamplingTypeFlag, "eoi_spatial_resampling_type_flag");
+#endif
     }
     if ((sei.m_type & EOI_OptimizationType::PRIVACY_PROTECTION_OPTIMIZATION) != 0)
     {