diff --git a/TestON/JenkinsFile/MasterTrigger.groovy b/TestON/JenkinsFile/MasterTrigger.groovy
index 8347add..4c1fcad 100644
--- a/TestON/JenkinsFile/MasterTrigger.groovy
+++ b/TestON/JenkinsFile/MasterTrigger.groovy
@@ -37,7 +37,6 @@
 isFabric = null
 testsParam = null
 simulateDay = null
-day = null
 
 dayMap = [:]
 fullDayMap = [:]
@@ -195,6 +194,8 @@
 
 def generateRunList(){
     runList = [:]
+    validSchedules = test_list.getValidSchedules( day )
+    echo "validSchedules: " + validSchedules
     for ( branch in onos_branches ){
         runBranch = []
         nodeLabels = test_list.getAllNodeLabels( branch, selectedTests )
@@ -203,8 +204,26 @@
             selectedNodeLabelCategories = test_list.getAllTestCategories( selectedNodeLabelTests )
             for ( category in selectedNodeLabelCategories ){
                 selectedNodeLabelCategoryTests = test_list.getTestsFromCategory( category, selectedNodeLabelTests )
-                exeTestList = test_list.getTestListAsString( selectedNodeLabelCategoryTests )
-                runList.put( branch + "-" + nodeLabel + "-" + category, triggerFuncs.trigger_pipeline( branch, exeTestList, nodeLabel, category, manually_run, onos_tag ) )
+
+                filteredList = [:]
+                for ( key in selectedNodeLabelCategoryTests.keySet() ){
+                    for ( sch in selectedNodeLabelCategoryTests[ key ][ "schedules" ] ){
+                        if ( validSchedules.contains( sch[ "day" ] ) && sch[ "branch" ] == test_list.convertBranchToBranchCode( branch ) ){
+                            filteredList.put( key, selectedNodeLabelCategoryTests[ key ] )
+                            break
+                        }
+                    }
+                }
+
+                echo "=========================================="
+                echo "BRANCH: " + branch
+                echo "CATEGORY: " + category
+                echo "TESTS: " + filteredList
+                if ( filteredList != [:] ){
+                    exeTestList = test_list.getTestListAsString( filteredList )
+                    runList.put( branch + "-" + nodeLabel + "-" + category, triggerFuncs.trigger_pipeline( branch, exeTestList, nodeLabel, category, manually_run, onos_tag ) )
+                }
+
             }
         }
     }
diff --git a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
index 2a358df..d62e114 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
@@ -107,8 +107,9 @@
     for ( String key in tests.keySet() ){
         for ( subDict in tests[ key ][ "schedules" ] ){
             sch = subDict[ "day" ]
-            if ( validSchedules.contains( sch ) && !branchesFromDayResult.contains( sch ) ){
-                branchesFromDayResult += convertBranchCodeToBranch( subDict[ "branch" ], false )
+            new_branch = convertBranchCodeToBranch( subDict[ "branch" ], false )
+            if ( validSchedules.contains( sch ) && !branchesFromDayResult.contains( new_branch ) ){
+                branchesFromDayResult += new_branch
             }
         }
     }
@@ -210,7 +211,7 @@
     return validSchedules
 }
 
-// given a day and branch, returns all tests that run on the given day on the given branch
+// given a day, returns all tests that run on the given day on the given branch
 def getTestsFromDay( day, tests=[:] ){
     resultDict = [:]
     if ( tests == [:] ){
