Index: /branches/release-39/lib/MT/Template/ContextHandlers.pm
===================================================================
--- /branches/release-39/lib/MT/Template/ContextHandlers.pm (revision 2463)
+++ /branches/release-39/lib/MT/Template/ContextHandlers.pm (revision 2464)
@@ -7656,13 +7656,13 @@
             }
             if ( !$entries ) {
-                $args{join} = MT::Placement->join_on( 'entry_id', {
-                        category_id => \@cat_ids, %blog_terms
-                    }, { %blog_args, unique => 1 } );
+                if ($category_arg !~ m/\bNOT\b/i) {
+                    $args{join} = MT::Placement->join_on( 'entry_id', {
+                            category_id => \@cat_ids, %blog_terms
+                        }, { %blog_args, unique => 1 } );
+                }
             }
             push @filters, sub { $cexpr->($_[0]->id, \%map) };
         } else {
-            if (! $category_arg ) {
-                return $ctx->error(MT->translate("You have an error in your '[_2]' attribute: [_1]", $category_arg, $class_type eq 'entry' ? 'category' : 'folder'));
-            }
+            return $ctx->error(MT->translate("You have an error in your '[_2]' attribute: [_1]", $category_arg, $class_type eq 'entry' ? 'category' : 'folder'));
         }
     }
@@ -7704,8 +7704,10 @@
             };
             if (!$entries) {
-                $args{join} = MT::ObjectTag->join_on( 'object_id', {
-                        tag_id => \@tag_ids, object_datasource => 'entry',
-                        %blog_terms
-                    }, { %blog_args, unique => 1 } );
+                if ($tag_arg !~ m/\bNOT\b/i) {
+                    $args{join} = MT::ObjectTag->join_on( 'object_id', {
+                            tag_id => \@tag_ids, object_datasource => 'entry',
+                            %blog_terms
+                        }, { %blog_args, unique => 1 } );
+                }
             }
             push @filters, sub { $cexpr->($preloader->($_[0]->id)) };
@@ -7912,5 +7914,5 @@
                     last unless --$limit;
                 }
-                $no_resort = 1 unless $args->{sort_order} || $args->{sort_by};
+                $no_resort = $args->{sort_order} || $args->{sort_by} ? 0 : 1;
             } else {
                 @entries = $class->load(\%terms, \%args);
@@ -7930,5 +7932,5 @@
                 $iter = _rco_entries_iter(
                     \%terms, \%args, \%blog_terms, \%blog_args);
-                $no_resort = 1 unless $args->{sort_order} || $args->{sort_by};
+                $no_resort = $args->{sort_order} || $args->{sort_by} ? 0 : 1;
             } else {
                 $iter = $class->load_iter(\%terms, \%args);
