diff --git a/CRM/Campaign/BAO/Query.php b/CRM/Campaign/BAO/Query.php
index 7cfb65353f043600ce4f3afd6b0df4ada7e92971..3d1359febfcc3978e2d91c01f3544d6909564e24 100755
--- a/CRM/Campaign/BAO/Query.php
+++ b/CRM/Campaign/BAO/Query.php
@@ -95,7 +95,7 @@ class CRM_Campaign_BAO_Query {
     //all below tables are require to fetch  result.
 
     //1. get survey activity target table in.
-    $query->_select['survey_activity_target_contact_id'] = 'civicrm_activity_contact.contact_id as survey_activity_target_contact_id';
+    $query->_select['survey_activity_target_contact_id'] = 'civicrm_activity_target.contact_id as survey_activity_target_contact_id';
     $query->_select['survey_activity_target_id'] = 'civicrm_activity_target.id as survey_activity_target_id';
     $query->_element['survey_activity_target_id'] = 1;
     $query->_element['survey_activity_target_contact_id'] = 1;
@@ -158,10 +158,10 @@ class CRM_Campaign_BAO_Query {
         $query->_qill[$grouping][] = ts('Survey - %1', array(1 => CRM_Core_DAO::getFieldValue('CRM_Campaign_DAO_Survey', $value, 'title')));
 
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_activity.source_record_id',
-          $op, $value, "Integer"
+          $op, $value, 'Integer'
         );
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_survey.id',
-          $op, $value, "Integer"
+          $op, $value, 'Integer'
         );
         return;
 
@@ -170,7 +170,7 @@ class CRM_Campaign_BAO_Query {
 
         $query->_qill[$grouping][] = ts('Survey Status - %1', array(1 => $activityStatus[$value]));
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_activity.status_id',
-          $op, $value, "Integer"
+          $op, $value, 'Integer'
         );
         return;
 
@@ -189,8 +189,8 @@ class CRM_Campaign_BAO_Query {
           }
         }
         $query->_qill[$grouping][] = ts('Survey Interviewer - %1', array(1 => $surveyInterviewerName));
-        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_activity_assignment.assignee_contact_id',
-          $op, $value, "Integer"
+        $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause('civicrm_activity_assignment.contact_id',
+          $op, $value, 'Integer'
         );
         return;
     }
@@ -206,8 +206,8 @@ class CRM_Campaign_BAO_Query {
 
     switch ($name) {
       case self::CIVICRM_ACTIVITY_TARGET:
-        $from = " INNER JOIN civicrm_activity_contact
-   ON ( civicrm_activity_contact.contact_id = contact_a.id AND civicrm_activity_contact.record_type = 'Target') ";
+        $from = " INNER JOIN civicrm_activity_contact civicrm_activity_target
+   ON ( civicrm_activity_target.contact_id = contact_a.id AND civicrm_activity_target.record_type = 'Target') ";
         break;
 
       case self::CIVICRM_ACTIVITY:
@@ -219,7 +219,8 @@ class CRM_Campaign_BAO_Query {
 
       case self::CIVICRM_ACTIVITY_ASSIGNMENT:
         $from = "
-INNER JOIN civicrm_activity_assignment ON ( civicrm_activity.id = civicrm_activity_assignment.activity_id ) ";
+INNER JOIN  civicrm_activity_contact civicrm_activity_assignment ON ( civicrm_activity.id = civicrm_activity_assignment.activity_id AND
+civicrm_activity_assignment.record_type = 'Assignee' ) ";
         break;
 
       case 'civicrm_survey':
diff --git a/CRM/Case/XMLProcessor/Report.php b/CRM/Case/XMLProcessor/Report.php
index cb6a7f8109d8e6d61f3200620c922c162b99d6ba..69bc3b69b6b5ade15d0ffdd0ae90766112dbb202 100644
--- a/CRM/Case/XMLProcessor/Report.php
+++ b/CRM/Case/XMLProcessor/Report.php
@@ -234,12 +234,12 @@ AND    ac.case_id = %1
       }
 
       $query = "
-SELECT     a.*, aa.assignee_contact_id as assigneeID, at.target_contact_id as targetID
+SELECT     a.*, aa.contact_id as assigneeID, at.contact_id as targetID
 {$selectCaseActivity}
 FROM       civicrm_activity a
 {$joinCaseActivity}
-LEFT JOIN civicrm_activity_target at ON a.id = at.activity_id
-LEFT JOIN civicrm_activity_assignment aa ON a.id = aa.activity_id
+LEFT JOIN civicrm_activity_contact at ON a.id = at.activity_id AND at.record_type = 'Target'
+LEFT JOIN civicrm_activity_contact aa ON a.id = aa.activity_id AND aa.record_type = 'Assignee'
 WHERE      a.id = %1
     ";
       $params = array(1 => array($activityID, 'Integer'));
diff --git a/CRM/Logging/Differ.php b/CRM/Logging/Differ.php
index e93c4133d51ff996a13a85031fe3202e07c622c6..56e941f6aec5e023a0fa4e563abbbb0bb68001b8 100644
--- a/CRM/Logging/Differ.php
+++ b/CRM/Logging/Differ.php
@@ -83,9 +83,9 @@ class CRM_Logging_Differ {
         break;
       case 'civicrm_activity':
         $join  = "
-LEFT JOIN civicrm_activity_target at ON at.activity_id = lt.id     AND at.target_contact_id = %3
-LEFT JOIN civicrm_activity_assignment aa ON aa.activity_id = lt.id AND aa.assignee_contact_id = %3
-LEFT JOIN civicrm_activity source ON source.id = lt.id             AND source.source_contact_id = %3";
+LEFT JOIN civicrm_activity_contact at ON at.activity_id = lt.id AND at.contact_id = %3 AND at.record_type = 'Target'
+LEFT JOIN civicrm_activity_contact aa ON aa.activity_id = lt.id AND aa.contact_id = %3 AND aa.record_type = 'Assignee'
+LEFT JOIN civicrm_activity_contact source ON source.activity_id = lt.id AND source.contact_id = %3 AND source.record_type = 'Source' ";
         $contactIdClause = "AND (at.id IS NOT NULL OR aa.id IS NOT NULL OR source.id IS NOT NULL)";
         break;
       case 'civicrm_case':
@@ -106,6 +106,7 @@ SELECT DISTINCT lt.id FROM `{$this->db}`.`log_$table` lt
 WHERE log_conn_id = %1 AND 
       log_date BETWEEN DATE_SUB(%2, INTERVAL {$this->interval}) AND DATE_ADD(%2, INTERVAL {$this->interval}) 
       {$contactIdClause}";
+
     $dao = CRM_Core_DAO::executeQuery($sql, $params);
     while ($dao->fetch()) {
       $diffs = array_merge($diffs, $this->diffsInTableForId($table, $dao->id));
diff --git a/xml/schema/Activity/Activity.xml b/xml/schema/Activity/Activity.xml
index 1605b5ff9c569a0644f5eba861b9bfc222b3abf4..f18c4d324ea0db2b681d3bbd1201f284198d7a8a 100644
--- a/xml/schema/Activity/Activity.xml
+++ b/xml/schema/Activity/Activity.xml
@@ -28,12 +28,14 @@
       <headerPattern>/(activity.)?source(.contact(.id)?)?/i</headerPattern>
       <comment>Contact ID of the person scheduling or logging this Activity. Usually the authenticated user.</comment>
       <add>1.1</add>
+      <drop>4.4</drop>
   </field>
   <foreignKey>
        <name>source_contact_id</name>
        <table>civicrm_contact</table>
        <key>id</key>
        <add>1.1</add>
+       <drop>4.4</drop>
        <onDelete>SET NULL</onDelete>
   </foreignKey>  
   <index>