diff --git a/CRM/Activity/Form/Activity.php b/CRM/Activity/Form/Activity.php
index 8c96bc205e62..fb72c80fa2b7 100644
--- a/CRM/Activity/Form/Activity.php
+++ b/CRM/Activity/Form/Activity.php
@@ -810,12 +810,14 @@ public function buildQuickForm() {
 
     $this->addFormRule(array('CRM_Activity_Form_Activity', 'formRule'), $this);
 
-    if (Civi::settings()->get('activity_assignee_notification')) {
-      $this->assign('activityAssigneeNotification', TRUE);
+    $doNotNotifyAssigneeFor = Civi::settings()->get('do_not_notify_assignees_for');
+    if (($this->_activityTypeId && in_array($this->_activityTypeId, $doNotNotifyAssigneeFor)) || !Civi::settings()->get('activity_assignee_notification')) {
+      $this->assign('activityAssigneeNotification', FALSE);
     }
     else {
-      $this->assign('activityAssigneeNotification', FALSE);
+      $this->assign('activityAssigneeNotification', TRUE);
     }
+    $this->assign('doNotNotifyAssigneeFor', $doNotNotifyAssigneeFor);
   }
 
   /**
@@ -1085,7 +1087,8 @@ protected function processActivity(&$params) {
     // send copy to assignee contacts.CRM-4509
     $mailStatus = '';
 
-    if (Civi::settings()->get('activity_assignee_notification')) {
+    if (Civi::settings()->get('activity_assignee_notification')
+      && !in_array($activity->activity_type_id, Civi::settings()->get('do_not_notify_assignees_for'))) {
       $activityIDs = array($activity->id);
       if ($followupActivity) {
         $activityIDs = array_merge($activityIDs, array($followupActivity->id));
diff --git a/CRM/Admin/Form/Preferences.php b/CRM/Admin/Form/Preferences.php
index ab6519517da3..43d1455dd46d 100644
--- a/CRM/Admin/Form/Preferences.php
+++ b/CRM/Admin/Form/Preferences.php
@@ -196,7 +196,8 @@ public function buildQuickForm() {
               $this->addElement('select',
                 $fieldName,
                 $fieldValue['title'],
-                $fieldValue['option_values']
+                $fieldValue['option_values'],
+                CRM_Utils_Array::value('attributes', $fieldValue)
               );
               break;
 
diff --git a/CRM/Admin/Form/Preferences/Display.php b/CRM/Admin/Form/Preferences/Display.php
index bc678af44497..36bd8b891c50 100644
--- a/CRM/Admin/Form/Preferences/Display.php
+++ b/CRM/Admin/Form/Preferences/Display.php
@@ -37,6 +37,7 @@
 class CRM_Admin_Form_Preferences_Display extends CRM_Admin_Form_Preferences {
   public function preProcess() {
     CRM_Utils_System::setTitle(ts('Settings - Display Preferences'));
+    $optionValues = CRM_Activity_BAO_Activity::buildOptions('activity_type_id');
 
     $this->_varNames = array(
       CRM_Core_BAO_Setting::SYSTEM_PREFERENCES_NAME => array(
@@ -104,6 +105,13 @@ public function preProcess() {
           'title' => ts('Enable Popup Forms'),
           'weight' => 13,
         ),
+        'do_not_notify_assignees_for' => array(
+          'html_type' => 'select',
+          'option_values' => $optionValues,
+          'attributes' => array('multiple' => 1, "class" => "huge crm-select2"),
+          'title' => ts('Do not notify assignees for'),
+          'weight' => 14,
+        ),
       ),
     );
 
diff --git a/CRM/Case/BAO/Case.php b/CRM/Case/BAO/Case.php
index 256f97d6780c..c9f0afa62229 100644
--- a/CRM/Case/BAO/Case.php
+++ b/CRM/Case/BAO/Case.php
@@ -1335,10 +1335,10 @@ public static function sendActivityCopy($clientId, $activityId, $contacts, $atta
 
     $activityParams['source_record_id'] = $activityId;
     $activityParams['source_contact_id'] = $userID;
-    $activityParams['activity_type_id'] = CRM_Core_OptionGroup::getValue('activity_type', 'Email', 'name');
+    $activityParams['activity_type_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_DAO_Activity', 'activity_type_id', 'Email');
     $activityParams['activity_date_time'] = date('YmdHis');
-    $activityParams['status_id'] = CRM_Core_OptionGroup::getValue('activity_status', 'Completed', 'name');
-    $activityParams['medium_id'] = CRM_Core_OptionGroup::getValue('encounter_medium', 'email', 'name');
+    $activityParams['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_DAO_Activity', 'activity_status_id', 'Completed');
+    $activityParams['medium_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_DAO_Activity', 'encounter_medium', 'email');
     $activityParams['case_id'] = $caseId;
     $activityParams['is_auto'] = 0;
     $activityParams['target_id'] = $clientId;
diff --git a/CRM/Case/XMLProcessor/Report.php b/CRM/Case/XMLProcessor/Report.php
index 8ece8d55998d..a2be87169152 100644
--- a/CRM/Case/XMLProcessor/Report.php
+++ b/CRM/Case/XMLProcessor/Report.php
@@ -285,7 +285,7 @@ public function &getActivityInfo($clientID, $activityID, $anyActivity = FALSE, $
 
       if ($dao->fetch()) {
         //if activity type is email get info of all activities.
-        if ($dao->activity_type_id == CRM_Core_OptionGroup::getValue('activity_type', 'Email', 'name')) {
+        if ($dao->activity_type_id == CRM_Core_PseudoConstant::getKey('CRM_Activity_DAO_Activity', 'activity_type_id', 'Email')) {
           $anyActivity = TRUE;
         }
         $activityTypes = CRM_Case_PseudoConstant::caseActivityType(FALSE, $anyActivity);
@@ -512,7 +512,7 @@ public function &getActivity($clientID, $activityDAO, &$activityTypeInfo) {
     }
     $activity['fields'][] = array(
       'label' => ts('Status'),
-      'value' => CRM_Core_OptionGroup::getLabel('activity_status',
+      'value' => CRM_Core_PseudoConstant::getLabel('CRM_Activity_DAO_Activity', 'activity_status_id',
         $activityDAO->status_id
       ),
       'type' => 'String',
@@ -520,7 +520,7 @@ public function &getActivity($clientID, $activityDAO, &$activityTypeInfo) {
 
     $activity['fields'][] = array(
       'label' => ts('Priority'),
-      'value' => CRM_Core_OptionGroup::getLabel('priority',
+      'value' => CRM_Core_PseudoConstant::getLabel('CRM_Activity_DAO_Activity', 'priority',
         $activityDAO->priority_id
       ),
       'type' => 'String',
diff --git a/settings/Core.setting.php b/settings/Core.setting.php
index d09cc36c4518..a205b161fb4a 100644
--- a/settings/Core.setting.php
+++ b/settings/Core.setting.php
@@ -967,4 +967,24 @@
     'description' => 'When enabled, any filter settings a user selects on the contact\'s Activity tab will be remembered as they visit other contacts',
     'help_text' => NULL,
   ),
+  'do_not_notify_assignees_for' => array(
+    'group_name' => 'CiviCRM Preferences',
+    'group' => 'core',
+    'name' => 'do_not_notify_assignees_for',
+    'type' => 'Array',
+    'add' => '4.7',
+    'is_domain' => 1,
+    'default' => array(),
+    'title' => 'Do not notify assignees for',
+    'help_text' => 'These activity types will be excluded from automated email notifications to assignees.',
+    'html_type' => 'Select',
+    'html_attributes' => array(
+      'multiple' => 1,
+      'class' => 'huge crm-select2',
+    ),
+    'pseudoconstant' => array(
+      'optionGroupName' => 'activity_type',
+    ),
+    'quick_form_type' => 'Select',
+  ),
 );
diff --git a/templates/CRM/Activity/Form/Activity.tpl b/templates/CRM/Activity/Form/Activity.tpl
index 1d88c441d646..33a813fbc620 100644
--- a/templates/CRM/Activity/Form/Activity.tpl
+++ b/templates/CRM/Activity/Form/Activity.tpl
@@ -103,7 +103,7 @@
           {/if}
           {if $activityAssigneeNotification}
             <br />
-            <span class="description"><i class="crm-i fa-paper-plane"></i> {ts}A copy of this activity will be emailed to each Assignee.{/ts} {help id="sent_copy_email"}</span>
+            <span id="notify_assignee_msg" class="description"><i class="crm-i fa-paper-plane"></i> {ts}A copy of this activity will be emailed to each Assignee.{/ts} {help id="sent_copy_email"}</span>
           {/if}
         {/if}
       </td>
@@ -276,18 +276,28 @@
 
 
   {if $action eq 1 or $action eq 2 or $context eq 'search' or $context eq 'smog'}
-  {*include custom data js file*}
-  {include file="CRM/common/customData.tpl"}
+    {*include custom data js file*}
+    {include file="CRM/common/customData.tpl"}
     {literal}
     <script type="text/javascript">
     CRM.$(function($) {
-    {/literal}
-    {if $customDataSubType}
-      CRM.buildCustomData( '{$customDataType}', {$customDataSubType} );
-      {else}
-      CRM.buildCustomData( '{$customDataType}' );
-    {/if}
-    {literal}
+      var doNotNotifyAssigneeFor = {/literal}{$doNotNotifyAssigneeFor|@json_encode}{literal};
+      $('#activity_type_id').change(function() {
+        if ($.inArray($(this).val(), doNotNotifyAssigneeFor) != -1) {
+          $('#notify_assignee_msg').hide();
+        }
+        else {
+          $('#notify_assignee_msg').show();
+        }
+      });
+
+      {/literal}
+      {if $customDataSubType}
+        CRM.buildCustomData( '{$customDataType}', {$customDataSubType} );
+        {else}
+        CRM.buildCustomData( '{$customDataType}' );
+      {/if}
+      {literal}
     });
     </script>
     {/literal}
diff --git a/templates/CRM/Admin/Form/Preferences/Display.tpl b/templates/CRM/Admin/Form/Preferences/Display.tpl
index fe6e16231d94..04c7263d4e0a 100644
--- a/templates/CRM/Admin/Form/Preferences/Display.tpl
+++ b/templates/CRM/Admin/Form/Preferences/Display.tpl
@@ -132,7 +132,16 @@
         {ts}When enabled, contacts who are assigned activities will automatically receive an email notification with a copy of the activity.{/ts}
       </td>
     </tr>
-
+    <tr class="crm-preferences-display-form-activity_types">
+      <td class="label">{$form.do_not_notify_assignees_for.label}</td>
+      <td>{$form.do_not_notify_assignees_for.html}</td>
+    </tr>
+    <tr class="crm-preferences-display-form-activity_types">
+      <td>&nbsp;</td>
+      <td class="description">
+        {ts}These activity types will be excluded from automated email notifications to assignees.{/ts}
+      </td>
+    </tr>
     <tr class="crm-preferences-display-form-block-activity_assignee_notification_ics">
       <td class="label"></td>
       <td>{$form.activity_assignee_notification_ics.html} {$form.activity_assignee_notification_ics.label}</td>
@@ -228,6 +237,12 @@
           $('#contact_edit_preferences').val(params.toString());
         }
 
+        // show/hide activity types based on checkbox value
+        $('.crm-preferences-display-form-activity_types').toggle($('#activity_assignee_notification').is(":checked"));
+        $('#activity_assignee_notification').click(function() {
+          $('.crm-preferences-display-form-activity_types').toggle($(this).is(":checked"));
+        });
+
         var invoicesKey = '{/literal}{$invoicesKey}{literal}';
         var invoicing = '{/literal}{$invoicing}{literal}';
         if (!invoicing) {
diff --git a/templates/CRM/Case/Form/Activity.tpl b/templates/CRM/Case/Form/Activity.tpl
index 18232af05391..3ee462da20d4 100644
--- a/templates/CRM/Case/Form/Activity.tpl
+++ b/templates/CRM/Case/Form/Activity.tpl
@@ -127,7 +127,7 @@
                   <td>{$form.assignee_contact_id.html}
                     {if $activityAssigneeNotification}
                       <br />
-                      <span class="description"><i class="crm-i fa-paper-plane"></i> {ts}A copy of this activity will be emailed to each Assignee.{/ts}</span>
+                      <span id="notify_assignee_msg" class="description"><i class="crm-i fa-paper-plane"></i> {ts}A copy of this activity will be emailed to each Assignee.{/ts}</span>
                     {/if}
                   </td>
                 </tr>
@@ -271,18 +271,28 @@
 <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div>
 
   {if $action eq 1 or $action eq 2}
-  {*include custom data js file*}
-  {include file="CRM/common/customData.tpl"}
+    {*include custom data js file*}
+    {include file="CRM/common/customData.tpl"}
     {literal}
     <script type="text/javascript">
     CRM.$(function($) {
-    {/literal}
-    {if $customDataSubType}
-      CRM.buildCustomData( '{$customDataType}', {$customDataSubType} );
-      {else}
-      CRM.buildCustomData( '{$customDataType}' );
-    {/if}
-    {literal}
+      var doNotNotifyAssigneeFor = {/literal}{$doNotNotifyAssigneeFor|@json_encode}{literal};
+      $('#activity_type_id').change(function() {
+        if ($.inArray($(this).val(), doNotNotifyAssigneeFor) != -1) {
+          $('#notify_assignee_msg').hide();
+        }
+        else {
+          $('#notify_assignee_msg').show();
+        }
+      });
+
+      {/literal}
+      {if $customDataSubType}
+        CRM.buildCustomData( '{$customDataType}', {$customDataSubType} );
+        {else}
+        CRM.buildCustomData( '{$customDataType}' );
+      {/if}
+      {literal}
     });
     </script>
     {/literal}
diff --git a/tests/phpunit/CRM/Activity/Form/ActivityTest.php b/tests/phpunit/CRM/Activity/Form/ActivityTest.php
new file mode 100644
index 000000000000..e0c58cc280af
--- /dev/null
+++ b/tests/phpunit/CRM/Activity/Form/ActivityTest.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ *  Include dataProvider for tests
+ * @group headless
+ */
+class CRM_Activity_Form_ActivityTest extends CiviUnitTestCase {
+
+  public function setUp() {
+    parent::setUp();
+    $this->assignee1 = $this->individualCreate(array(
+      'first_name' => 'testassignee1',
+      'last_name' => 'testassignee1',
+      'email' => 'testassignee1@gmail.com',
+    ));
+    $this->assignee2 = $this->individualCreate(array(
+      'first_name' => 'testassignee2',
+      'last_name' => 'testassignee2',
+      'email' => 'testassignee2@gmail.com',
+    ));
+    $this->target = $this->individualCreate();
+    $this->source = $this->individualCreate();
+  }
+
+  public function testActivityCreate() {
+    Civi::settings()->set('activity_assignee_notification', TRUE);
+    //Reset filter to none.
+    Civi::settings()->set('do_not_notify_assignees_for', array());
+    $mut = new CiviMailUtils($this, TRUE);
+    $mut->clearMessages();
+
+    $form = new CRM_Activity_Form_Activity();
+    $activityTypeId = CRM_Core_PseudoConstant::getKey('CRM_Activity_DAO_Activity', 'activity_type_id', 'Meeting');
+    $params = array(
+      'source_contact_id' => $this->source,
+      'assignee_contact_id' => array($this->assignee1),
+      'target_contact_id' => array($this->target),
+      'followup_assignee_contact_id' => array(),
+      'activity_type_id' => $activityTypeId,
+    );
+
+    $activityRef = new ReflectionClass('CRM_Activity_Form_Activity');
+    $method = $activityRef->getMethod('processActivity');
+    $method->setAccessible(TRUE);
+    $method->invokeArgs($form, array(&$params));
+
+    $msg = $mut->getMostRecentEmail();
+    $this->assertNotEmpty($msg);
+    $mut->clearMessages();
+
+    //Block Meeting notification.
+    Civi::settings()->set('do_not_notify_assignees_for', array($activityTypeId));
+    $params['assignee_contact_id'] = array($this->assignee2);
+    $method->invokeArgs($form, array(&$params));
+    $msg = $mut->getMostRecentEmail();
+    $this->assertEmpty($msg);
+  }
+
+}