diff --git a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
index 0baa5f8..46af5f0 100644
--- a/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
+++ b/ignite-tc-helper-web/src/main/java/org/apache/ignite/ci/jobs/CheckQueueJob.java
@@ -47,6 +47,7 @@
 import org.apache.ignite.tcbot.persistence.IStringCompactor;
 import org.apache.ignite.tcignited.ITeamcityIgnited;
 import org.apache.ignite.tcignited.ITeamcityIgnitedProvider;
+import org.apache.ignite.tcservice.model.Property;
 import org.apache.ignite.tcservice.model.agent.Agent;
 import org.apache.ignite.tcservice.model.result.Build;
 import org.apache.ignite.tcservice.model.result.Triggered;
@@ -70,6 +71,10 @@
     private static final int CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT =
         Integer.getInteger("CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT", 15);
 
+    /** Percentage of free windows agents required to trigger build. */
+    private static final int CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT =
+        Integer.getInteger("CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT", 1);
+
     /** */
     private ITcBotUserCreds creds;
 
@@ -192,16 +197,35 @@
         List<Agent> agents = tcIgn.agents(true, true);
 
         int total = agents.size();
+        int winAgents = 0;
         int running = 0;
+        int winRunning = 0;
 
         for (Agent agent : agents) {
+            //filter for windows agents
+            if (agent.getPool().getName().contains("Default") &&
+                    agent.isEnabled() &&
+                    agent.getProperties().getProperty().stream()
+                    .filter(prop -> prop.getName().equals("teamcity.agent.jvm.os.name")).findAny().orElseGet(() -> {
+                        Property emptyProp = new Property();
+
+                        emptyProp.setValue("");
+
+                        return emptyProp;
+                    }).getValue().contains("Windows")) {
+                winAgents++;
+
+                if (agent.getBuild() != null)
+                    winRunning++;
+            }
+
             if (agent.getBuild() != null) //  || !STATE_RUNNING.equals(agent.getFatBuild().status)
                 ++running;
         }
 
         int free = total == 0 ? -1 : (total - running) * 100 / total;
 
-        final String agentStatus = MessageFormat.format("{0}% of agents are free ({1} total, {2} running builds).", free, total, running);
+        String agentStatus = MessageFormat.format("{0}% of agents are free ({1} total, {2} running builds).", free, total, running);
 
         logger.info(agentStatus);
 
@@ -211,6 +235,18 @@
         logger.info("There are more than {}% free agents (total={}, free={}).", CHECK_QUEUE_MIN_FREE_AGENTS_PERCENT,
             total, total - running);
 
+        int winFree = winAgents == 0 ? -1 : (winAgents - winRunning) * 100 / winAgents;
+
+        agentStatus = MessageFormat.format("{0}% of Windows agents are free ({1} total, {2} running builds).", winFree, winAgents, winRunning);
+
+        logger.info(agentStatus);
+
+        if (winAgents > 0 && winFree < CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT)
+            return "Min agent percent of free Windows agents not met:" + agentStatus;
+
+        logger.info("There are more than {}% free Windows agents (total={}, free={}).", CHECK_QUEUE_MIN_FREE_WINDOWS_AGENTS_PERCENT,
+            winAgents, winAgents - winRunning);
+
         String selfLogin = creds.getUser(srvCode);
 
         tcIgn.actualizeRecentBuildRefs();
