diff --git a/av1/common/optical_flow_ref.c b/av1/common/optical_flow_ref.c
index f87c967..60e5b99 100644
--- a/av1/common/optical_flow_ref.c
+++ b/av1/common/optical_flow_ref.c
@@ -1211,12 +1211,14 @@
       MV this_mvs[2] = { mv_ref->mv[0].as_mv, mv_ref->mv[1].as_mv };
       MV_REFERENCE_FRAME ref_frame[2] = { mv_ref->ref_frame[0],
                                           mv_ref->ref_frame[1] };
+#if OPFL_TPL
       if (ref_frame[0] == OPFL_FRAME && ref_frame[1] == NONE_FRAME) {
         this_mvs[0] = mv_ref->opfl_ref_mvs[0].as_mv;
         this_mvs[1] = mv_ref->opfl_ref_mvs[1].as_mv;
         ref_frame[0] = mv_ref->opfl_ref_frame[0];
         ref_frame[1] = mv_ref->opfl_ref_frame[1];
       }
+#endif
 
       for (int r = 0; r < 2; r++) {
         if (ref_frame[r] == NONE_FRAME || ref_frame[r] == OPFL_FRAME) continue;
@@ -1353,14 +1355,14 @@
       MV this_mvs[2] = { mv_ref->mv[0].as_mv, mv_ref->mv[1].as_mv };
       MV_REFERENCE_FRAME ref_frame[2] = { mv_ref->ref_frame[0],
                                           mv_ref->ref_frame[1] };
-
+#if OPFL_TPL
       if (ref_frame[0] == OPFL_FRAME && ref_frame[1] == NONE_FRAME) {
         this_mvs[0] = mv_ref->opfl_ref_mvs[0].as_mv;
         this_mvs[1] = mv_ref->opfl_ref_mvs[1].as_mv;
         ref_frame[0] = mv_ref->opfl_ref_frame[0];
         ref_frame[1] = mv_ref->opfl_ref_frame[1];
       }
-
+#endif
       for (int r = 0; r < 2; r++) {
         int ref_offset;
         switch (ref_frame[r]) {
@@ -1407,13 +1409,14 @@
       MV this_mvs[2] = { mv_ref->mv[0].as_mv, mv_ref->mv[1].as_mv };
       MV_REFERENCE_FRAME ref_frame[2] = { mv_ref->ref_frame[0],
                                           mv_ref->ref_frame[1] };
+#if OPFL_TPL
       if (ref_frame[0] == OPFL_FRAME && ref_frame[1] == NONE_FRAME) {
         this_mvs[0] = mv_ref->opfl_ref_mvs[0].as_mv;
         this_mvs[1] = mv_ref->opfl_ref_mvs[1].as_mv;
         ref_frame[0] = mv_ref->opfl_ref_frame[0];
         ref_frame[1] = mv_ref->opfl_ref_frame[1];
       }
-
+#endif
       for (int r = 0; r < 2; r++) {
         int ref_offset;
         switch (ref_frame[r]) {
@@ -1845,7 +1848,7 @@
   DB_MV *mv_start_new = mf_new + AVG_MF_BORDER * mvstr + AVG_MF_BORDER;
   int i, j;
 
-  // allocate buffers
+  // allocate temp buffers
   Ex = buf_struct->Ex;
   Ey = buf_struct->Ey;
   Et = buf_struct->Et;
@@ -1910,8 +1913,8 @@
   SPARSE_MTX A, L, LtL;
   // check if pointing out of bound
   double boundFactor = 0.01;
-  double pixExpFactor = 0.005;
-  double mvExpFactor = 0.008;
+  double pixExpFactor = 0.001;
+  double mvExpFactor = 0.001;
   for (i = 0; i < height; i++) {
     for (j = 0; j < width; j++) {
       pixel_weight[i * width + j] = 1;
@@ -1931,20 +1934,31 @@
            (1 - buf_struct->dst_pos) * mv_start[i * mvstr + j].col;
       int is_out = (i0 < 0 || i0 > fheight - 1 || i1 < 0 || i1 > fheight - 1 ||
                     j0 < 0 || j0 > fwidth - 1 || j1 < 0 || j1 > fwidth - 1);
-      if (is_out) {
-        pixel_weight[i * width + j] = 0.001;
+      if (is_out && OPFL_BOUND_HANDLING) {
+        pixel_weight[i * width + j] = boundFactor * boundFactor;
         mv_weight[i * width + j] = boundFactor;
-      } else if (level > 2 && numWarpedRounds > 2) {
-        pixel_weight[i * width + j] =
-            exp(-pixExpFactor * Et[i * width + j] * Et[i * width + j]);
-        pixel_weight[i * width + j] = (pixel_weight[i * width + j] > 0.001)
-                                          ? pixel_weight[i * width + j]
-                                          : 0.001;
-        mv_weight[i * width + j] =
-            exp(-mvExpFactor * Et[i * width + j] * Et[i * width + j]);
+      } else if (level >= 0 && numWarpedRounds >= 0 && OPFL_CONF_WTS) {
+        double avg = 0;
+        double minDiff = 1000;
+        double curWt;
+        double count = 0;
+        for (int ii = -2; ii <= 2; ii++) {
+          for (int jj = -2; jj <= 2; jj++) {
+            if (i + ii < 0 || i + ii >= height || j + jj < 0 || j + jj >= width)
+              continue;
+            count += 1;
+            curWt =
+                Et[(i + ii) * width + j + jj] * Et[(i + ii) * width + j + jj];
+            avg = avg * (count - 1) / count + curWt / count;
+            if (curWt > minDiff) minDiff = curWt;
+          }
+        }
+        mv_weight[i * width + j] = exp(-mvExpFactor * avg);
         mv_weight[i * width + j] = (mv_weight[i * width + j] > boundFactor)
                                        ? mv_weight[i * width + j]
                                        : boundFactor;
+        pixel_weight[i * width + j] =
+            mv_weight[i * width + j] * mv_weight[i * width + j];
       }
     }
   }
@@ -3652,17 +3666,19 @@
       // if refs agrees better, weights should be closer to each other
       double diffWts = (dstpel_y0[i * width + j] - dstpel_y1[i * width + j]);
       diffWts = 0.1 * diffWts * diffWts;
-      if (diffWts > 2) diffWts = 2;
+      if (diffWts > 50) diffWts = 50;
+      if (diffWts < 10) diffWts = 0;
       if (inside0 == 0 && inside1 == 0) {
         ref0wts[i * width + j] = 1 - pos;
         ref1wts[i * width + j] = pos;
       } else {
         if (inside0)
-          ref0wts[i * width + j] = exp(-diffWts * totalused0);
+          ref0wts[i * width + j] =
+              exp(-0.01 * diffWts * totalused0) * (1 - dstpos);
         else
           ref0wts[i * width + j] = 0;
         if (inside1)
-          ref1wts[i * width + j] = exp(-diffWts * totalused1);
+          ref1wts[i * width + j] = exp(-0.01 * diffWts * totalused1) * dstpos;
         else
           ref1wts[i * width + j] = 0;
       }
diff --git a/av1/common/optical_flow_ref.h b/av1/common/optical_flow_ref.h
index 0d2e3f4..9770d71 100644
--- a/av1/common/optical_flow_ref.h
+++ b/av1/common/optical_flow_ref.h
@@ -23,7 +23,8 @@
 #if CONFIG_OPFL
 
 // Constant MACRO defs
-#define AVG_MF_BORDER 32
+#define AVG_MF_BORDER 4
+#define OPFL_MF_FRAME_BORDER 32
 #define MAX_MV_LENGTH_1D 160
 #define DERIVATIVE_FILTER_LENGTH 7
 
@@ -49,11 +50,13 @@
 #define OPFL_MV_PRED 1
 #define OPFL_TPL 1
 #define OPFL_TPL_NEIGHBOR 1
+#define OPFL_BOUND_HANDLING 1
+#define OPFL_CONF_WTS 1
 
 #define OPFL_EXP_INIT 1
 #define OPFL_DERIVE_INIT_MV 1
-#define OPFL_CHECK_INIT_MV 1
-#define OPFL_INIT_MOTION_SEARCH 1
+#define OPFL_CHECK_INIT_MV 0
+#define OPFL_INIT_MOTION_SEARCH 0
 
 #define OPFL_EXP_DERV 0
 
@@ -73,7 +76,6 @@
 } OPFL_BLEND_METHOD;
 
 #define OPFL_BLEND_METHOD_USED OPFL_SIMPLE_BLEND
-
 // motion field struct with double precision
 typedef struct db_mv {
   double row;
