diff --git a/git-hooks/gerrit-bot b/git-hooks/gerrit-bot
index ef66fd17bcccee7d31e1c51ed09b8ac3946fb3ba..6b4bb82abd8956c669f66a6b543a4208803a3e66 100755
--- a/git-hooks/gerrit-bot
+++ b/git-hooks/gerrit-bot
@@ -145,6 +145,7 @@ sub process_commit($$$$$)
   $project =~ s,/$,,; # XXX Workaround QTQAINFRA-381
   my ($score, $verdict);
   my $message = "";
+  my $iswip = 0;
   my @invite;
   my $use_rest = 0;
   if (defined($EXCLUDED_PROJECTS{$project}) || defined($EXCLUDED_PROJECTS{$project.":".$branch})) {
@@ -184,14 +185,18 @@ sub process_commit($$$$$)
       $verbose and print "===== ".strftime("%c", localtime(time()))." ===== fetched change\n";
     }
 
+    my $subject;
+
     my @watches;
     for my $w (@WATCHES) {
       my $wp = $watch_projects{$w};
       push @watches, $w if (!defined($wp) || $project =~ $wp);
     }
     if (@watches) {
-      my @touched = `git diff-tree --name-only --no-commit-id --ignore-submodules -r -C --root $rev`;
+      my @touched = `git show --pretty=\%s --name-only --ignore-submodules -C $rev`;
       chop(@touched);
+      $subject = shift @touched;
+      shift @touched;  # empty line
       for my $w (@watches) {
         for my $file (@touched) {
           if ($file =~ $watch_files{$w}) {
@@ -203,6 +208,15 @@ sub process_commit($$$$$)
       }
     }
 
+    if (!defined($subject)) {
+        $subject = `git show --pretty=\%s -s $rev`;
+        chop($subject);
+    }
+    if ($subject =~ /\b(?:WIP|Wip|wip(?!\/))\b|\*{3}|^(?:squash|fixup)! |^(.)\1*$/) {
+        $iswip = 1;
+        $message = "Apparently pushing a Work In Progress\n\n".$message;
+    }
+
     my $worker = $WORKER;
     $worker =~ s/\@SHA1\@/$rev/g;
     open VERDICT, $worker." 2>&1 |" or die "cannot run worker: ".$!;
@@ -223,7 +237,7 @@ sub process_commit($$$$$)
         $use_rest = 1;
         $verdict = decode_json($verdict);
         defined($verdict) or die "cannot decode verdict as JSON\n";
-        $$verdict{labels} = { 'Sanity-Review' => $score };
+        $$verdict{labels} = { 'Sanity-Review' => $score, 'Code-Review' => ($iswip ? -2 : 0) };
       }
     } else {
       if (length($verdict) > 20000) {
@@ -249,6 +263,7 @@ sub process_commit($$$$$)
 #    push @args, ("--project", $project);
     push @args, ("--project", $orig_project);  # XXX Workaround QTQAINFRA-381
     push @args, ("--sanity-review", ($score > 0) ? "+".$score : $score);
+    push @args, ("--code-review", $iswip ? -2 : 0);
     if (length($verdict)) {
       $verdict =~ s/([\"\\\$\`])/\\$1/g; # ssh doesn`t properly quote the arguments for sh
       $verdict =~ s/^\s+|\s+$//g;
diff --git a/git-hooks/git_post_commit_hook b/git-hooks/git_post_commit_hook
index f4bd82a7bdda91347df67f26a15f07a486faa7b7..6550d927c6be7ed9a056eb7a5d710a08192a5158 100755
--- a/git-hooks/git_post_commit_hook
+++ b/git-hooks/git_post_commit_hook
@@ -39,6 +39,4 @@ if test -L "$me"; then
 fi
 
 sha1=${1-HEAD} # just for debugging
-GIT_PUSH=${GIT_PUSH+$GIT_PUSH,}wip # this check makes totally no sense locally
-export GIT_PUSH
 exec `dirname "$me"`/sanitize-commit $sha1 strict >&2
diff --git a/git-hooks/sanitize-commit b/git-hooks/sanitize-commit
index a8fb5db3ec5cc541022e434f0805f9794faf0514..f27903f8b2b42f379f277cb6fcc83d594636b5c1 100755
--- a/git-hooks/sanitize-commit
+++ b/git-hooks/sanitize-commit
@@ -106,7 +106,6 @@ use constant {
 
 my $clike = 0;
 my $qmake = 0;
-my $iswip = defined($cfg{wip});
 my $badrev = 0;
 my $badsign = 0;
 my $badid = defined($cfg{changeid});
@@ -287,9 +286,7 @@ while (<MSG>) {
         if (/\bQT[A-Z]+-\d+\b/) {
             complain_cln("Bug reference in summary", "log");
         }
-        if (!$iswip && $parents < 2 && /\b(?:WIP|Wip|wip(?!\/))\b|\*{3}|^(?:squash|fixup)! |^(.)\1*$/) {
-            complain_cln("Apparently pushing a Work In Progress", "wip", 1);
-        } elsif (!$iswip && !$badlog && length($_) < 7) {
+        if (!$badlog && length($_) < 7) {
             complain_cln("Summary is too short", "log");
         } elsif (!$badlog && !$revert1 && length($_) > 120) {
             complain_cln("Summary is excessively long", "log");