Index: branches/5.2.x/core/admin_templates/groups/groups_edit_permissions.tpl
===================================================================
--- branches/5.2.x/core/admin_templates/groups/groups_edit_permissions.tpl
+++ branches/5.2.x/core/admin_templates/groups/groups_edit_permissions.tpl
@@ -129,12 +129,13 @@
 		while($i < $permissions.length) {
 			$test_perm = '_cb_g-perm[' + $rets[1] + '][' + $permissions[$i] + ']';
 			$test_perm = document.getElementById($test_perm);
-			if ($test_perm) {
-				$test_perm.checked = $source_perm.checked;
-				update_checkbox($test_perm, document.getElementById('g-perm[' + $rets[1] + '][' + $permissions[$i] + ']'));
+
+			if ( $test_perm && $test_perm.checked !== $source_perm.checked ) {
+				$($test_perm).prop('checked', $source_perm.checked).change();
 			}
+
 			$i++;
 		}
 	}
 </script>
-<inp2:m_include t="incs/footer"/>
\ No newline at end of file
+<inp2:m_include t="incs/footer"/>
Index: branches/5.2.x/core/admin_templates/js/grid_filters.js
===================================================================
--- branches/5.2.x/core/admin_templates/js/grid_filters.js
+++ branches/5.2.x/core/admin_templates/js/grid_filters.js
@@ -82,13 +82,16 @@
 	$('#' + jq($form_name)).append($div);
 
 	// set click handlers
-	$('#_mutlioptions_cb_' + $cur_index + '_all')
-	.click(
-		function ($e) {
-			MultiOptions.SelectAll($cur_index);
-		}
-	)
-	.prop('checked', $options.length == $options.filter(':selected').length);
+	var $select_all = $('#_mutlioptions_cb_' + $cur_index + '_all'),
+		$new_checked = $options.length === $options.filter(':selected').length;
+
+	$select_all.click(function ($e) {
+		MultiOptions.SelectAll($cur_index);
+	});
+
+	if ( $select_all.prop('checked') !== $new_checked ) {
+		$select_all.prop('checked', $new_checked).change();
+	}
 
 	$('input._mutlioptions_cb_' + $cur_index).click(
 		function ($e) {
@@ -136,8 +139,11 @@
 	// update "Select All" checkbox
 	var $select_all = $('#_mutlioptions_cb_' + selector_index + '_all');
 	var $options = $("input[type='checkbox']", '#' + jq(MultiOptions.Selectors[selector_index]) + '_div').not($select_all);
+	var $new_checked = $options.length === $options.filter(':checked').length;
 
-	$select_all.prop('checked', $options.length == $options.filter(':checked').length);
+	if ( $select_all.prop('checked') !== $new_checked ) {
+		$select_all.prop('checked', $new_checked).change();
+	}
 }
 
 MultiOptions.SelectAll = function(selector_index) {
@@ -145,7 +151,13 @@
 	var $select_all = $('#_mutlioptions_cb_' + selector_index + '_all');
 	var $checked = $select_all.prop('checked');
 
-	$("input[type='checkbox']", '#' + jq(MultiOptions.Selectors[selector_index]) + '_div').not($select_all).prop('checked', $checked);
+	$("input[type='checkbox']", '#' + jq(MultiOptions.Selectors[selector_index]) + '_div').not($select_all).each(function () {
+		var $checkbox = $(this);
+
+		if ( $checkbox.prop('checked') !== $checked ) {
+			$checkbox.prop('checked', $checked).change();
+		}
+	});
 
 	// sync hidden field
 	var $reg_exp = new RegExp('^_mutlioptions_cb_' + selector_index + '_(?!all)([0-9A-Za-z-]+)');