What is wrong with my trigger? For reasons unknown to me,  the control flow doesnt reach "ITS CORRECT BUT PRIZE IS MONETARY" block, that corresponds to variable bounty not being NULL. I'm pretty confident that SELECT Bounty FROM Questions WHERE QuestionID = NEW.QuestionID must return INT UNSIGNED. 

So, is my syntax wrong? Am I using some kind of bad IF condition? 

The trigger code: pastebin

CREATE TRIGGER `CheckCorrect` AFTER INSERT ON `UserAnswers`    
FOR EACH ROW    
BEGIN    
DECLARE bounty INT UNSIGNED;  
SET bounty:=(SELECT `Bounty` FROM `Questions` WHERE `QuestionID` = 
 NEW.`QuestionID`);  
 IF (SELECT `IsCorrect` FROM `Answers` WHERE `AnswerID` = NEW.`AnswerID`)&lt;&gt;0 
THEN     // IF ITS CORRECT
  IF bounty IS NULL THEN    // FIELD `Bounty` being NULL means that a prize is set.
    IF EXISTS (SELECT * FROM `Prizes` WHERE `QuestionID` = NEW.`QuestionID` AND `ClaimerID` IS NULL) THEN    //ANY SPARE
      BEGIN  
      UPDATE `Prizes` SET `ClaimerID` = NEW.`UserID` WHERE `QuestionID` = NEW.`QuestionID` AND `ClaimerID` IS NULL ORDER BY              
             `PrizeID` LIMIT 1;  
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, "NEWPRIZE", NOW(), FALSE);  
      END;  
    ELSE    //IF NOT LEAVE A MESSAGE!
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, "NOPRIZE", NOW(), FALSE );  
    END IF;  
  ELSE     // ITS CORRECT BUT PRIZE IS MONETARY
    IF (SELECT `Budget` FROM `Questions` WHERE `QuestionID`=NEW.`QuestionID`)&gt;bounty THEN  // DO WE HAVE ENOUGH BUDGET TO PAY?
      BEGIN  
      UPDATE `Questions` SET `Budget`=`Budget`-bounty WHERE `QuestionID` = NEW.`QuestionID`;  
      UPDATE `Users` SET `Balance`=`Balance`+bounty WHERE `UserID`=NEW.`UserID`;  
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, CAST(bounty AS CHAR(50)), NOW(), FALSE);  
      END;  
    ELSE   // NO MORE MONEY, I'M AFRAID
     INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, "NOMONEY", 
 NOW(), FALSE );  
   END IF;  
  END IF;  
END IF;  
END;


Updated my code like so due to Jacob H's suggestion. No results.

  CREATE TRIGGER `CheckCorrect` AFTER INSERT ON `UserAnswers`    //CLAIM PRIZE AND NOTIFY!
FOR EACH ROW    
BEGIN    
DECLARE bounty INT UNSIGNED;   
SET bounty:=(SELECT `Bounty` FROM `Questions` WHERE `QuestionID` = NEW.`QuestionID`);   
IF (SELECT `IsCorrect` FROM `Answers` WHERE `AnswerID` = NEW.`AnswerID`)&lt;&gt;0 THEN     // IF ITS CORRECT
   BEGIN   
  IF bounty IS NULL THEN    // IF ITS A PRIZE CLAIM IT
    BEGIN  
    IF EXISTS (SELECT * FROM `Prizes` WHERE `QuestionID` = NEW.`QuestionID` AND `ClaimerID` IS NULL) THEN    //ANY SPARE PRIZES?
      BEGIN   
      UPDATE `Prizes` SET `ClaimerID` = NEW.`UserID` WHERE `QuestionID` = NEW.`QuestionID` AND `ClaimerID` IS NULL ORDER BY `PrizeID` LIMIT 1;   
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, "NEWPRIZE", NOW(), FALSE);   
      END;   
    ELSE    //IF NOT LEAVE A MESSAGE!
      BEGIN   
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, "NOPRIZE", NOW(), FALSE );   
      END;   
    END IF;   
    END;  
  ELSE     // ITS CORRECT BUT PRIZE IS MONETARY
    BEGIN   
    IF (SELECT `Budget` FROM `Questions` WHERE `QuestionID`=NEW.`QuestionID`)&gt;bounty THEN   
      BEGIN   
      UPDATE `Questions` SET `Budget`=`Budget`-bounty WHERE `QuestionID` = NEW.`QuestionID`;   
      UPDATE `Users` SET `Balance`=`Balance`+bounty WHERE `UserID`=NEW.`UserID`;   
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`,CAST(bounty AS CHAR(50)), NOW(), FALSE);   
      END;   
    ELSE   
      BEGIN  
      INSERT INTO `Notifications` VALUES (NULL, NEW.`UserID`, "NOMONEY", NOW(), FALSE );   
      END;  
    END IF;   
    END;   
  END IF;   
  END   
END IF;   
END;
All I did was change 

SET bounty:=(SELECT `Bounty` FROM `Questions` WHERE `QuestionID` = 
NEW.`QuestionID`); 


to 

SELECT `Bounty` INTO bountyvar FROM `Questions` WHERE `QuestionID` = NEW.`QuestionID`; 


and it started working... Why though xD 

Some light can be shed on that from this question: apparently some versions of MySQL just don't like some variations of syntax. Oh well. I'm glad this is over. I'm tired.