diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index bdbbe8f..da5d1a8 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -48,7 +48,6 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.compat.ActivityCompat;
 import com.android.dialer.configprovider.ConfigProviderBindings;
-import com.android.dialer.feedback.FeedbackComponent;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.multimedia.MultimediaData;
@@ -154,11 +153,6 @@
     return !TextUtils.isEmpty(call.getCallSubject());
   }
 
-  private void addCallFeedbackListener(Context context) {
-    LogUtil.d("CallCardPresenter.addCallFeedbackListener", "Adding call feedback listener");
-    CallList.getInstance().addListener(FeedbackComponent.get(context).getCallFeedbackListener());
-  }
-
   @Override
   public void onInCallScreenDelegateInit(InCallScreen inCallScreen) {
     Assert.isNotNull(inCallScreen);
@@ -173,7 +167,6 @@
         this.inCallScreen.showNoteSentToast();
       }
       call.addListener(this);
-      addCallFeedbackListener(context);
       // start processing lookups right away.
       if (!call.isConferenceCall()) {
         startContactInfoSearch(call, true, call.getState() == DialerCall.State.INCOMING);
diff --git a/java/com/android/incallui/InCallServiceImpl.java b/java/com/android/incallui/InCallServiceImpl.java
index 539dba8..1cb6c47 100644
--- a/java/com/android/incallui/InCallServiceImpl.java
+++ b/java/com/android/incallui/InCallServiceImpl.java
@@ -24,6 +24,7 @@
 import android.telecom.CallAudioState;
 import android.telecom.InCallService;
 import com.android.dialer.blocking.FilteredNumberAsyncQueryHandler;
+import com.android.dialer.feedback.FeedbackComponent;
 import com.android.incallui.audiomode.AudioModeProvider;
 import com.android.incallui.call.CallList;
 import com.android.incallui.call.ExternalCallList;
@@ -39,6 +40,7 @@
 
   private ReturnToCallController returnToCallController;
   private NewReturnToCallController newReturnToCallController;
+  private CallList.Listener feedbackListener;
 
   @Override
   public void onCallAudioStateChanged(CallAudioState audioState) {
@@ -102,6 +104,8 @@
       newReturnToCallController =
           new NewReturnToCallController(this, ContactInfoCache.getInstance(context));
     }
+    feedbackListener = FeedbackComponent.get(context).getCallFeedbackListener();
+    CallList.getInstance().addListener(feedbackListener);
 
     IBinder iBinder = super.onBind(intent);
     Trace.endSection();
@@ -134,6 +138,10 @@
       newReturnToCallController.tearDown();
       newReturnToCallController = null;
     }
+    if (feedbackListener != null) {
+      CallList.getInstance().removeListener(feedbackListener);
+      feedbackListener = null;
+    }
     Trace.endSection();
   }
 }
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index e581ba3..1785ece 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -173,6 +173,8 @@
   private List<PhoneAccountHandle> callCapableAccounts;
   private String countryIso;
 
+  private volatile boolean feedbackRequested = false;
+
   public static String getNumberFromHandle(Uri handle) {
     return handle == null ? "" : handle.getSchemeSpecificPart();
   }
@@ -438,7 +440,7 @@
   /* package-private */ Call getTelecomCall() {
     return telecomCall;
   }
-
+  
   public StatusHints getStatusHints() {
     return telecomCall.getDetails().getStatusHints();
   }
@@ -1450,6 +1452,14 @@
     return selectedAvailableVideoTechType;
   }
 
+  public void markFeedbackRequested() {
+    feedbackRequested = true;
+  }
+
+  public boolean isFeedbackRequested() {
+    return feedbackRequested;
+  }
+
   /**
    * Specifies whether a number is in the call history or not. {@link #CALL_HISTORY_STATUS_UNKNOWN}
    * means there is no result.
