diff --git a/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java b/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java
index d0a5af4..715e3a5 100644
--- a/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java
+++ b/Tethering/apishim/30/com/android/networkstack/tethering/apishim/api30/BpfCoordinatorShimImpl.java
@@ -134,27 +134,14 @@
     }
 
     @Override
-    public boolean tetherOffloadRuleAdd(@NonNull Tether4Key key,
+    public boolean tetherOffloadRuleAdd(boolean downstream, @NonNull Tether4Key key,
             @NonNull Tether4Value value) {
         /* no op */
         return true;
     }
 
     @Override
-    public boolean tetherOffloadRuleRemove(@NonNull Tether4Key key) {
-        /* no op */
-        return true;
-    }
-
-    @Override
-    public boolean tetherOffloadRuleAdd(@NonNull Tether4Key key,
-            @NonNull Tether4Value value) {
-        /* no op */
-        return true;
-    }
-
-    @Override
-    public boolean tetherOffloadRuleRemove(@NonNull Tether4Key key) {
+    public boolean tetherOffloadRuleRemove(boolean downstream, @NonNull Tether4Key key) {
         /* no op */
         return true;
     }
diff --git a/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java b/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java
index e6a2823..389ba7b 100644
--- a/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java
+++ b/Tethering/apishim/31/com/android/networkstack/tethering/apishim/api31/BpfCoordinatorShimImpl.java
@@ -248,7 +248,7 @@
     }
 
     @Override
-    public boolean tetherOffloadRuleAdd(@NonNull Tether4Key key,
+    public boolean tetherOffloadRuleAdd(boolean downstream, @NonNull Tether4Key key,
             @NonNull Tether4Value value) {
         if (!isInitialized()) return false;
 
@@ -257,41 +257,11 @@
             // map pair twice causes the unexpected refresh. Must be fixed before starting the
             // conntrack timeout extension implementation.
             // TODO: consider using insertEntry.
-            mBpfDownstream4Map.updateEntry(key, value);
-        } catch (ErrnoException e) {
-            mLog.e("Could not update entry: ", e);
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public boolean tetherOffloadRuleRemove(@NonNull Tether4Key key) {
-        if (!isInitialized()) return false;
-
-        try {
-            mBpfDownstream4Map.deleteEntry(key);
-        } catch (ErrnoException e) {
-            // Silent if the rule did not exist.
-            if (e.errno != OsConstants.ENOENT) {
-                mLog.e("Could not delete entry: ", e);
-                return false;
+            if (downstream) {
+                mBpfDownstream4Map.updateEntry(key, value);
+            } else {
+                mBpfUpstream4Map.updateEntry(key, value);
             }
-        }
-        return true;
-    }
-
-    @Override
-    public boolean tetherOffloadRuleAdd(@NonNull Tether4Key key,
-            @NonNull Tether4Value value) {
-        if (!isInitialized()) return false;
-
-        try {
-            // The last used time field of the value is updated by the bpf program. Adding the same
-            // map pair twice causes the unexpected refresh. Must be fixed before starting the
-            // conntrack timeout extension implementation.
-            // TODO: consider using insertEntry.
-            mBpfUpstream4Map.updateEntry(key, value);
         } catch (ErrnoException e) {
             mLog.e("Could not update entry: ", e);
             return false;
@@ -300,11 +270,15 @@
     }
 
     @Override
-    public boolean tetherOffloadRuleRemove(@NonNull Tether4Key key) {
+    public boolean tetherOffloadRuleRemove(boolean downstream, @NonNull Tether4Key key) {
         if (!isInitialized()) return false;
 
         try {
-            mBpfUpstream4Map.deleteEntry(key);
+            if (downstream) {
+                mBpfDownstream4Map.deleteEntry(key);
+            } else {
+                mBpfUpstream4Map.deleteEntry(key);
+            }
         } catch (ErrnoException e) {
             // Silent if the rule did not exist.
             if (e.errno != OsConstants.ENOENT) {
diff --git a/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java b/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java
index 6bcec18..cbd843b 100644
--- a/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java
+++ b/Tethering/apishim/common/com/android/networkstack/tethering/apishim/common/BpfCoordinatorShim.java
@@ -112,25 +112,14 @@
     public abstract TetherStatsValue tetherOffloadGetAndClearStats(int ifIndex);
 
     /**
-     * Adds a tethering IPv4 downstream offload rule to BPF map.
+     * Adds a tethering IPv4 offload rule to appropriate BPF map.
      */
-    public abstract boolean tetherOffloadRuleAdd(@NonNull Tether4Key key,
+    public abstract boolean tetherOffloadRuleAdd(boolean downstream, @NonNull Tether4Key key,
             @NonNull Tether4Value value);
 
     /**
-     * Deletes a tethering IPv4 downstream offload rule from the BPF map.
+     * Deletes a tethering IPv4 offload rule from the appropriate BPF map.
      */
-    public abstract boolean tetherOffloadRuleRemove(@NonNull Tether4Key key);
-
-    /**
-     * Adds a tethering IPv4 upstream offload rule to BPF map.
-     */
-    public abstract boolean tetherOffloadRuleAdd(@NonNull Tether4Key key,
-            @NonNull Tether4Value value);
-
-    /**
-     * Deletes a tethering IPv4 upstream offload rule from the BPF map.
-     */
-    public abstract boolean tetherOffloadRuleRemove(@NonNull Tether4Key key);
+    public abstract boolean tetherOffloadRuleRemove(boolean downstream, @NonNull Tether4Key key);
 }
 
diff --git a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java
index 0c8784b..ffb4557 100644
--- a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java
+++ b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java
@@ -968,8 +968,8 @@
 
             if (e.msgType == (NetlinkConstants.NFNL_SUBSYS_CTNETLINK << 8
                     | NetlinkConstants.IPCTNL_MSG_CT_DELETE)) {
-                mBpfCoordinatorShim.tetherOffloadRuleRemove(upstream4Key);
-                mBpfCoordinatorShim.tetherOffloadRuleRemove(downstream4Key);
+                mBpfCoordinatorShim.tetherOffloadRuleRemove(false, upstream4Key);
+                mBpfCoordinatorShim.tetherOffloadRuleRemove(true, downstream4Key);
                 return;
             }
 
@@ -978,8 +978,8 @@
             final Tether4Value downstream4Value = makeTether4Value(e,
                     tetherClient, upstreamIndex);
 
-            mBpfCoordinatorShim.tetherOffloadRuleAdd(upstream4Key, upstream4Value);
-            mBpfCoordinatorShim.tetherOffloadRuleAdd(downstream4Key, downstream4Value);
+            mBpfCoordinatorShim.tetherOffloadRuleAdd(false, upstream4Key, upstream4Value);
+            mBpfCoordinatorShim.tetherOffloadRuleAdd(true, downstream4Key, downstream4Value);
         }
     }
 
