diff --git a/source/Lib/CommonLib/Contexts.cpp b/source/Lib/CommonLib/Contexts.cpp
index f5b508b785e978f9f1e199a0184d7a32a3bef3de..efb02a61969f77993d668542cd4dea00e54c4f4b 100644
--- a/source/Lib/CommonLib/Contexts.cpp
+++ b/source/Lib/CommonLib/Contexts.cpp
@@ -379,11 +379,18 @@ const CtxSet ContextSetCfg::AffMergeIdx = ContextSetCfg::addCtxSet
 
 const CtxSet ContextSetCfg::GBiIdx = ContextSetCfg::addCtxSet
 ({
+#if JVET_N0286_SIMPLIFIED_GBI_IDX
+  { 228, },
+  { 242, },
+  { CNU, },
+  { 4, },
+#else
   // 4 ctx for 1st bin; 1 ctx for each of rest bins
   { 228, CNU, CNU, CNU, 125, 155, 175, },
   { 242, CNU, CNU, CNU, 154, 170, 237, },
   { CNU, CNU, CNU, CNU, CNU, CNU, CNU, },
   { 4, DWS, DWS, DWS, 4, 0, 0, },
+#endif
 });
 
 const CtxSet ContextSetCfg::Mvd = ContextSetCfg::addCtxSet
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 0e5083fa02e5597adc95421284f1ddf75ee92f67..a3a4dd41ab54b6b502f33b5ed274f29e558e5feb 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -50,6 +50,8 @@
 #include <assert.h>
 #include <cassert>
 
+#define JVET_N0286_SIMPLIFIED_GBI_IDX                     1 // Simplified coding of the GBi index
+
 #define JVET_N600_AMVR_TPM_CTX_REDUCTION                  1
 
 #define JVET_N0334_MVCLIPPING                             1 // prevention of MV stroage overflow and alignment with spec of MV/CPMV modular for AMVP mode
diff --git a/source/Lib/DecoderLib/CABACReader.cpp b/source/Lib/DecoderLib/CABACReader.cpp
index ccc13a375b9e5b454d314d74b2a2583ce519fddc..6fa451665a24aa881d020b81ad286b5d97e55bb7 100644
--- a/source/Lib/DecoderLib/CABACReader.cpp
+++ b/source/Lib/DecoderLib/CABACReader.cpp
@@ -980,18 +980,26 @@ void CABACReader::cu_gbi_flag(CodingUnit& cu)
     uint32_t prefixNumBits = numGBi - 2;
     uint32_t step = 1;
 
+#if !JVET_N0286_SIMPLIFIED_GBI_IDX
     unsigned ctxIdGBi = 4;
+#endif
     idx = 1;
 
     for(int ui = 0; ui < prefixNumBits; ++ui)
     {
+#if JVET_N0286_SIMPLIFIED_GBI_IDX
+      symbol = m_BinDecoder.decodeBinEP();
+#else
       symbol = m_BinDecoder.decodeBin(Ctx::GBiIdx(ctxIdGBi));
+#endif
 
       if (symbol == 1)
       {
         break;
       }
+#if !JVET_N0286_SIMPLIFIED_GBI_IDX
       ctxIdGBi += step;
+#endif
       idx += step;
     }
   }
diff --git a/source/Lib/EncoderLib/CABACWriter.cpp b/source/Lib/EncoderLib/CABACWriter.cpp
index be2085b92978bfe93a19e651a2f1f7e236010481..4aa704fb80230a567c42e2db76a943fc06969653 100644
--- a/source/Lib/EncoderLib/CABACWriter.cpp
+++ b/source/Lib/EncoderLib/CABACWriter.cpp
@@ -761,19 +761,29 @@ void CABACWriter::cu_gbi_flag(const CodingUnit& cu)
     const uint32_t prefixNumBits = numGBi - 2;
     const uint32_t step = 1;
 
+#if !JVET_N0286_SIMPLIFIED_GBI_IDX
     int ctxIdGBi = 4;
+#endif
     uint8_t idx = 1;
     for(int ui = 0; ui < prefixNumBits; ++ui)
     {
       if (gbiCodingIdx == idx)
       {
+#if JVET_N0286_SIMPLIFIED_GBI_IDX
+        m_BinEncoder.encodeBinEP(1);
+#else
         m_BinEncoder.encodeBin(1, Ctx::GBiIdx(ctxIdGBi));
+#endif
         break;
       }
       else
       {
+#if JVET_N0286_SIMPLIFIED_GBI_IDX
+        m_BinEncoder.encodeBinEP(0);
+#else
         m_BinEncoder.encodeBin(0, Ctx::GBiIdx(ctxIdGBi));
         ctxIdGBi += step;
+#endif
         idx += step;
       }
     }