diff --git includes/flag.views.inc includes/flag.views.inc
index e31dd3f..798caf8 100644
--- includes/flag.views.inc
+++ includes/flag.views.inc
@@ -193,20 +193,21 @@ function flag_views_data_alter(&$data) {
 
   // Add a relationship for the user that flagged any type of content.
   $data['users']['flag_user_content_rel'] = array(
     'group' => t('Flags'),
     'title' => t("User's flagged content"),
     'help' => t('Limit results to users that have flagged certain content.'),
     'relationship' => array(
       'base' => 'flag_content',
       'base field' => 'uid',
       'relationship field' => 'uid',
+      'disable flag link' => TRUE,
       'handler' => 'flag_handler_relationship_user_content',
       'label' => t('user flagged content'),
     ),
   );
 }
 
 /**
  * A helper function that creates a radio list of available flags.
  *
  * This function is used to select the desired flag when setting up flag
diff --git includes/flag_handler_field_ops.inc includes/flag_handler_field_ops.inc
index cc1a65c..94a9e75 100644
--- includes/flag_handler_field_ops.inc
+++ includes/flag_handler_field_ops.inc
@@ -38,30 +38,63 @@ class flag_handler_field_ops extends views_handler_field {
       return $this->view->relationship[$parent]->alias;
     }
   }
 
   function option_definition() {
     $options = parent::option_definition();
     $options['link_type'] = array('default' => '');
     return $options;
   }
 
+  /**
+   * Returns TRUE if the Ops field makes sense here.
+   *
+   * The Ops field is peculiar: although it's defined on the flagging table
+   * (flag_content), it doesn't operate at all on the object pointed at by this
+   * flagging. Instead, it operates on the object to which we're JOINed. (This
+   * peculiarity is the reason for the complexity of this handler.)
+   *
+   * So, for example, if we bring in the "Flags: User's flagged content"
+   * relationship, its Ops won't operate on this content but on its flagging
+   * user. This unintuitive behavior is certainly not what one would expect.
+   *
+   * Therefore we make it possible to "disable" the Ops in such scenarios.
+   */
+  function is_valid_here() {
+    // We can't use $this->view->relationship[] here as the view isn't being executed.
+    $relationship = $this->view->display_handler->get_handler('relationship', $this->options['relationship']);
+    return empty($relationship->definition['disable flag link']);
+  }
+
+  function validate() {
+    $errors = array();
+    if (!$this->is_valid_here()) {
+      $errors[] = t("Sorry, but you can't use the <em>Flag link</em> field here.");
+    }
+    return $errors;
+  }
+
   function options_form(&$form, &$form_state) {
+    if (!$this->is_valid_here()) {
+      list($message, ) = $this->validate();
+      drupal_set_message($message, 'error');
+    }
+    else {
     parent::options_form($form, $form_state);
-
     $form['link_type'] = array(
       '#type' => 'radios',
       '#title' => t('Link type'),
       '#options' => array('' => t('Use flag link settings')) + _flag_link_type_options(),
       '#default_value' => $this->options['link_type'],
     );
   }
+  }
 
   /**
    * Override base ::query(). The purpose here is to make it possible for the
    * render() method to know two things: what's the content ID, and whether
    * it's flagged.
    */
   function query() {
     $parent = $this->get_parent_relationship();
     $flag = $this->get_flag();
     $info = $flag->get_views_info();
