diff --git a/src/ui/botpanel.cpp b/src/ui/botpanel.cpp
index 50a87f251..395f63552 100644
--- a/src/ui/botpanel.cpp
+++ b/src/ui/botpanel.cpp
@@ -746,9 +746,7 @@ global void UpdateButtonPanel(void)
 		allow = 1;
 		break;
 	    case ButtonAttack:
-		if( Selected[0]->Type->CanAttack ) {
-		    allow = 1;
-		}
+		allow=ButtonCheckAttack(unit,buttonaction);
 		break;
 	    case ButtonAttackGround:
 		if( Selected[0]->Type->GroundAttack ) {
@@ -784,9 +782,14 @@ global void UpdateButtonPanel(void)
 		break;
 
 	    case ButtonCancelUpgrade:
+		allow = unit->Orders[0].Action==UnitActionUpgradeTo
+			|| unit->Orders[0].Action==UnitActionResearch;
+		break;
 	    case ButtonCancelTrain:
+		allow = unit->Orders[0].Action==UnitActionTrain;
+		break;
 	    case ButtonCancelBuild:
-		allow = 1;
+		allow = unit->Orders[0].Action==UnitActionBuilded;
 		break;
 
 	    default: