diff --git a/source/Lib/CommonLib/CommonDef.h b/source/Lib/CommonLib/CommonDef.h
index 5f71bfbbb6c431760c851fcae50dee9140206188..34b2d2e8c47902433cdb4a385f0fcffb268a8cd7 100644
--- a/source/Lib/CommonLib/CommonDef.h
+++ b/source/Lib/CommonLib/CommonDef.h
@@ -1326,6 +1326,13 @@ static const int CFLM_MAX_REF_SAMPLES = CCCM_MAX_REF_SAMPLES;
 static const int INTER_CCCM_NUM_PARAMS = 8;
 static const int INTER_CCCM_MAX_REF_SAMPLES = 256;
 #endif
+#if JVET_AG0058_EIP
+#if JVET_AI0066_REGULARIZED_EIP
+static const int REGULARIZED_EIP_L2_SAMPLE_THRESHOLD = 2024;
+static const int REGULARIZED_EIP_L2_SMALL = 192;
+static const int REGULARIZED_EIP_L2_LARGE = 128;
+#endif
+#endif
 #if JVET_AC0071_DBV
 static const int NUM_DBV_POSITION = 5;
 static const int DBV_TEMPLATE_SIZE = 1;
diff --git a/source/Lib/CommonLib/IntraPrediction.cpp b/source/Lib/CommonLib/IntraPrediction.cpp
index e717263c4ee6bfd93aeb4ba3c5c372294a2a5581..5edefec9884b96f9ad8c81a2555cd8dcb7b27349 100644
--- a/source/Lib/CommonLib/IntraPrediction.cpp
+++ b/source/Lib/CommonLib/IntraPrediction.cpp
@@ -26224,6 +26224,16 @@ void CccmCovariance::solveEip(const TCccmCoeff* A, const TCccmCoeff* Y, const in
     }
   }
 
+#if JVET_AI0066_REGULARIZED_EIP
+  // Regularization parameter: L2 multiplier * number of parameters
+  const int regularizationParam = (sampleNum <= REGULARIZED_EIP_L2_SAMPLE_THRESHOLD) ? REGULARIZED_EIP_L2_SMALL * numParams : REGULARIZED_EIP_L2_LARGE * numParams;
+  
+  for (int coli0 = 0; coli0 < numParams - 1; coli0++) // The last term (bias) is not regularized.
+  {
+    ATA[coli0][coli0] += regularizationParam;
+  }
+#endif
+
   for (int coli = 0; coli < numParams; coli++)
   {
     ATCb[coli] = Y[coli];
diff --git a/source/Lib/CommonLib/TypeDef.h b/source/Lib/CommonLib/TypeDef.h
index 31fc98b0568d5cb2ca8e2c848ca6aa7742680c9d..91f1464be74d9366fdfd837e0f0ba373c2b8dcc8 100644
--- a/source/Lib/CommonLib/TypeDef.h
+++ b/source/Lib/CommonLib/TypeDef.h
@@ -204,6 +204,9 @@
 #define JVET_AD0120_LBCCP                                 1 // JVET-AD0120: Local-Boosting Cross-Component Prediction, wherein the template part is controlled by CCCM SPS
 #define JVET_AE0043_CCP_MERGE_TEMPORAL                    1 // JVET-AE0043: Cross-component merge mode with temporal candidates
 #define JVET_AG0058_EIP                                   1 // JVET-AG0058: Extrapolation filter-based intra prediction mode
+#if JVET_AG0058_EIP
+#define JVET_AI0066_REGULARIZED_EIP                       1 // JVET-AI0066: L2 Regularization for EIP
+#endif
 #define JVET_AG0154_DECODER_DERIVED_CCP_FUSION            1 // JVET-AG0154: Decoder derived CCP mode with fusion candidates
 #define JVET_AG0059_CCP_MERGE_ENHANCEMENT                 1 // JVET-AG0059: Enhancements on CCP merge for chroma intra coding
 #define JVET_AH0065_RELAX_LINE_BUFFER                     1 // JVET-AH0065: Relaxing line buffer restriction