diff --git a/source/Lib/CommonLib/Slice.cpp b/source/Lib/CommonLib/Slice.cpp
index b70cd5767514829112b92041d475f16514f5fd3e..808aa60c998f8f5b46c27ecd7509e3c195400066 100644
--- a/source/Lib/CommonLib/Slice.cpp
+++ b/source/Lib/CommonLib/Slice.cpp
@@ -2711,7 +2711,11 @@ PPS::PPS()
 , m_picHeightInLumaSamples( 288 )
 #if JVET_Q0764_WRAP_AROUND_WITH_RPR
 , m_wrapAroundEnabledFlag            (false)
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+, m_picWidthMinusWrapAroundOffset    (0)
+#else
 , m_wrapAroundOffsetMinusCtbSize     (0)
+#endif
 , m_wrapAroundOffset                 (0)
 #endif
 , pcv                                (NULL)
diff --git a/source/Lib/CommonLib/Slice.h b/source/Lib/CommonLib/Slice.h
index fada6a97b8b94cd614a021fefcc93cc5d6ea151d..4d447a0e110770e061542e78aa5559d544c8d153 100644
--- a/source/Lib/CommonLib/Slice.h
+++ b/source/Lib/CommonLib/Slice.h
@@ -1959,7 +1959,11 @@ private:
 
 #if JVET_Q0764_WRAP_AROUND_WITH_RPR
   bool             m_wrapAroundEnabledFlag;               //< reference wrap around enabled or not
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+  unsigned         m_picWidthMinusWrapAroundOffset;          // <pic_width_in_minCbSizeY - wraparound_offset_in_minCbSizeY
+#else
   unsigned         m_wrapAroundOffsetMinusCtbSize;        //< reference wrap around offset minus ( CtbSizeY / MinCbSizeY ) + 2 in units of MinCbSizeY luma samples
+#endif
   unsigned         m_wrapAroundOffset;                    //< reference wrap around offset in luma samples
 #endif
 
@@ -2052,8 +2056,13 @@ public:
 #if JVET_Q0764_WRAP_AROUND_WITH_RPR
   void                   setWrapAroundEnabledFlag(bool b)                                 { m_wrapAroundEnabledFlag = b;                  }
   bool                   getWrapAroundEnabledFlag() const                                 { return m_wrapAroundEnabledFlag;               }  
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+  void                   setPicWidthMinusWrapAroundOffset(unsigned offset)                { m_picWidthMinusWrapAroundOffset = offset;     }
+  unsigned               getPicWidthMinusWrapAroundOffset() const                         { return m_picWidthMinusWrapAroundOffset;       }
+#else
   void                   setWrapAroundOffsetMinusCtbSize(unsigned offset)                 { m_wrapAroundOffsetMinusCtbSize = offset;      }
   unsigned               getWrapAroundOffsetMinusCtbSize() const                          { return m_wrapAroundOffsetMinusCtbSize;        }
+#endif
   void                   setWrapAroundOffset(unsigned offset)                             { m_wrapAroundOffset = offset;                  }
   unsigned               getWrapAroundOffset() const                                      { return m_wrapAroundOffset;                    }
 #endif
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 2687c367fb58b4bffe68e392f3ae02e6493581d2..c3a34d03ead1927041c4c05590b5d2cf9e955ad4 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -52,6 +52,8 @@
 
 //########### place macros to be removed in next cycle below this line ###############
 
+#define JVET_R0162_WRAPAROUND_OFFSET_SIGNALING            1 // JVET-R0162 proposal 1 : signal "picture width minus wraparound offset" instead of "wraparound offset"
+
 #define JVET_R0188                                        1 // JVET-R0188: Signalling slice_width_in_tiles_minus1[i] and slice_height_in_tiles_minus1[i]
 
 #define JVET_R0203_IRAP_LEADING_CONSTRAINT                1 // JVET-R0203: Constraint that IRAP NAL unit type cannot be mixed with RASL_NUT / RADL_NUT
diff --git a/source/Lib/DecoderLib/VLCReader.cpp b/source/Lib/DecoderLib/VLCReader.cpp
index f67cf62e0b474522a2026c01b1b8bc407bce47f2..a78ff59b806c1fc401a574137435a1ce16e90557 100644
--- a/source/Lib/DecoderLib/VLCReader.cpp
+++ b/source/Lib/DecoderLib/VLCReader.cpp
@@ -938,11 +938,20 @@ void HLSyntaxReader::parsePPS( PPS* pcPPS )
   READ_FLAG(uiCode, "pps_ref_wraparound_enabled_flag");           pcPPS->setWrapAroundEnabledFlag( uiCode ? true : false );
   if (pcPPS->getWrapAroundEnabledFlag())
   {
-    READ_UVLC(uiCode, "pps_ref_wraparound_offset");               pcPPS->setWrapAroundOffsetMinusCtbSize( uiCode );
+    READ_UVLC(uiCode, "pps_ref_wraparound_offset");               
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+    pcPPS->setPicWidthMinusWrapAroundOffset(uiCode);
+#else
+    pcPPS->setWrapAroundOffsetMinusCtbSize( uiCode );
+#endif
   }
   else
   {
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+    pcPPS->setPicWidthMinusWrapAroundOffset(0);
+#else
     pcPPS->setWrapAroundOffsetMinusCtbSize( 0 );
+#endif
   }
 #endif
 
@@ -2804,7 +2813,12 @@ void HLSyntaxReader::parsePictureHeader( PicHeader* picHeader, ParameterSetManag
   CHECK( (((sps->getCTUSize() / minCbSizeY) + 1) > ((pps->getPicWidthInLumaSamples() / minCbSizeY) - 1)) && pps->getWrapAroundEnabledFlag(), "When the value of CtbSizeY / MinCbSizeY + 1 is greater than pic_width_in_luma_samples / MinCbSizeY - 1, the value of pps_ref_wraparound_enabled_flag shall be equal to 0.");
   if( pps->getWrapAroundEnabledFlag() )
   {
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+    CHECK((pps->getPicWidthMinusWrapAroundOffset() > (pps->getPicWidthInLumaSamples() / minCbSizeY - sps->getCTUSize() / minCbSizeY - 2)), "pps_pic_width_minus_wraparound_ofsfet shall be less than or equal to pps_pic_width_in_luma_samples/MinCbSizeY - CtbSizeY/MinCbSizeY-2");
+    pps->setWrapAroundOffset(minCbSizeY * (pps->getPicWidthInLumaSamples()/minCbSizeY- pps->getPicWidthMinusWrapAroundOffset()));
+#else
     pps->setWrapAroundOffset( minCbSizeY * (pps->getWrapAroundOffsetMinusCtbSize() + 2 + sps->getCTUSize() / minCbSizeY) );
+#endif
   }
   else
   {
diff --git a/source/Lib/EncoderLib/EncLib.cpp b/source/Lib/EncoderLib/EncLib.cpp
index 6f8c06a57d37f25c1f2e14af1b46a3d7d9c5dc71..f41c61ec452f19ef7888d9029f24b79cf6753dab 100644
--- a/source/Lib/EncoderLib/EncLib.cpp
+++ b/source/Lib/EncoderLib/EncLib.cpp
@@ -316,12 +316,22 @@ void EncLib::init( bool isFieldCoding, AUWriterIf* auWriterIf )
     if( pps.getWrapAroundEnabledFlag() )
     {
       int minCbSizeY = (1 << sps0.getLog2MinCodingBlockSize());
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+      pps.setPicWidthMinusWrapAroundOffset      ((pps.getPicWidthInLumaSamples()/minCbSizeY) - (m_wrapAroundOffset * pps.getPicWidthInLumaSamples() / pps0.getPicWidthInLumaSamples() / minCbSizeY) );
+      pps.setWrapAroundOffset                   (minCbSizeY * (pps.getPicWidthInLumaSamples() / minCbSizeY - pps.getPicWidthMinusWrapAroundOffset()));
+#else
       pps.setWrapAroundOffsetMinusCtbSize       ( ((m_wrapAroundOffset * pps.getPicWidthInLumaSamples() / pps0.getPicWidthInLumaSamples()) / minCbSizeY) - 2 - (sps0.getCTUSize() / minCbSizeY) );
       pps.setWrapAroundOffset                   ( minCbSizeY * (pps.getWrapAroundOffsetMinusCtbSize() + 2 + sps0.getCTUSize() / minCbSizeY) );
+#endif
+
     }
     else 
     {
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+      pps.setPicWidthMinusWrapAroundOffset      (0);
+#else
       pps.setWrapAroundOffsetMinusCtbSize       ( 0 );
+#endif
       pps.setWrapAroundOffset                   ( 0 );       
     }
 #endif
@@ -1597,12 +1607,21 @@ void EncLib::xInitPPS(PPS &pps, const SPS &sps)
   pps.setWrapAroundEnabledFlag                ( m_wrapAround );
   if( m_wrapAround )
   {
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+    pps.setPicWidthMinusWrapAroundOffset      ((pps.getPicWidthInLumaSamples()/minCbSizeY) - (m_wrapAroundOffset / minCbSizeY));
+    pps.setWrapAroundOffset                   (minCbSizeY *(pps.getPicWidthInLumaSamples() / minCbSizeY- pps.getPicWidthMinusWrapAroundOffset()));
+#else
     pps.setWrapAroundOffsetMinusCtbSize       ( (m_wrapAroundOffset / minCbSizeY) - 2 - (sps.getCTUSize() / minCbSizeY) );
     pps.setWrapAroundOffset                   ( minCbSizeY * (pps.getWrapAroundOffsetMinusCtbSize() + 2 + sps.getCTUSize() / minCbSizeY) );
+#endif
   }
   else 
   {
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+    pps.setPicWidthMinusWrapAroundOffset      ( 0 );
+#else
     pps.setWrapAroundOffsetMinusCtbSize       ( 0 );
+#endif
     pps.setWrapAroundOffset                   ( 0 );       
   }
   CHECK( !sps.getWrapAroundEnabledFlag() && pps.getWrapAroundEnabledFlag(), "When sps_ref_wraparound_enabled_flag is equal to 0, the value of pps_ref_wraparound_enabled_flag shall be equal to 0.");
diff --git a/source/Lib/EncoderLib/VLCWriter.cpp b/source/Lib/EncoderLib/VLCWriter.cpp
index e96e7040ce4c21b537f1b6aaf33dadddc55fe781..58bbfd3c1bdc8ad2b4fea37919416f51b3678859 100644
--- a/source/Lib/EncoderLib/VLCWriter.cpp
+++ b/source/Lib/EncoderLib/VLCWriter.cpp
@@ -535,7 +535,11 @@ void HLSWriter::codePPS( const PPS* pcPPS )
   WRITE_FLAG( pcPPS->getWrapAroundEnabledFlag() ? 1 : 0, "pps_ref_wraparound_enabled_flag" );
   if( pcPPS->getWrapAroundEnabledFlag() )
   {
+#if JVET_R0162_WRAPAROUND_OFFSET_SIGNALING
+    WRITE_UVLC(pcPPS->getPicWidthMinusWrapAroundOffset(), "pps_pic_width_minus_wraparound_offset");
+#else
     WRITE_UVLC( pcPPS->getWrapAroundOffsetMinusCtbSize(), "pps_ref_wraparound_offset");
+#endif
   }
 #endif