diff --git a/provingground/launchbugs/README.md b/provingground/launchbugs/README.md
index bbced73..2bda649 100644
--- a/provingground/launchbugs/README.md
+++ b/provingground/launchbugs/README.md
@@ -14,7 +14,7 @@
 Navigate to go/launchbugs?
 Filter by Milestone: go/launchbugs?m=105
 Filter by Test Engineers: go/launchbugs?te=dhaddock
-Filter by Team: go/launchbugs?team=coreX
+Filter by Team: go/launchbugs?team=cons
 Filter by Engprod Approvers: go/launchbugs?a=dhaddock
 Filter by Multiple Ldaps: go/launchbugs?te=dhadock,awendy&a=dhadock,awendy
 Filter by Unassigned Launches for a given Milestone: go/launchbugs?te=new&m=109
@@ -27,12 +27,6 @@
 Filter by Component IIRC: go/launchbugsold?c=UI>Shell>StatusArea
 Filter by Team: go/launchbugsold?team=coreX
 
-### Filtering by Team
-Team is not an existing Filter Attribute. The functionality was added to
-shorten the Tests Engineers required if we want to add all the TEs from CoreX.
-Ex: `go/launchbugs?m=100&team=coreX` will search for all the Launch Bugs in
-Milestone 100 where the TEs are dhaddock,kyleshima,hyungtaekim, or awendy
-
 ### Testing
 After modifying the script, please make sure that the old functionalities are
 still working
@@ -43,9 +37,9 @@
 - go/launchbugs?m=105
 - go/launchbugs?m=105&te=dhaddock
 - go/launchbugs?te=dhaddock
-- go/launchbugs?team=corex
+- go/launchbugs?team=cons
 - go/launchbugs?a=dhaddock
-- go/launchbugs?team=corex&m=105
+- go/launchbugs?team=comm&m=105
 
 Some good urls to test in Monorail:
 - go/launchbugsold?
diff --git a/provingground/launchbugs/js/getParameters.js b/provingground/launchbugs/js/getParameters.js
index 6717ad9..a537bfc 100644
--- a/provingground/launchbugs/js/getParameters.js
+++ b/provingground/launchbugs/js/getParameters.js
@@ -1,13 +1,56 @@
 //  Copyright 2022 The ChromiumOS Authors
 //  Use of this source code is governed by a BSD-style license that can be
 //  found in the LICENSE file.
+const TeamId = {
+  Commercial: '2018047913735',
+  Consumer: '1920469030069',
+  Developer: '2185535768207',
+  Fundamentals: '1417945292682',
+  Trust_Safety: '1488691098512',
+  Flex: '1457609259434',
+  Platform_Device: '1346066282',
+  Platform_Foundations: '2080565135586',
+  Devices_Peripherals: '1579017816064',
+  ChromeOS:'1346058396'
+}
+
 function GetURLParameter(sParam) {
   var sPageURL = window.location.search.substring(1);
   var sURLVariables = sPageURL.split('&');
   for (var i = 0; i < sURLVariables.length; i++) {
+    //If param is help return help string
+    if (sParam == 'help'){
+      if (sURLVariables[i]== 'help')
+        return 'help'
+    }
     var sParameterName = sURLVariables[i].split('=');
     if (sParameterName[0] == sParam) {
       return sParameterName[1];
     }
   }
 }
+
+function GetTeamId(team){
+  switch (team) {
+      case 'comm':
+          return TeamId.Commercial
+      case 'cons':
+          return TeamId.Consumer
+      case 'dev':
+          return TeamId.Developer
+      case 'fund':
+          return TeamId.Fundamentals
+      case 'tands':
+          return TeamId.Trust_Safety
+      case 'flex':
+          return TeamId.Flex
+      case 'pdev':
+          return TeamId.Platform_Device
+      case 'pfound':
+          return TeamId.Platform_Foundations
+      case 'peri':
+          return TeamId.Devices_Peripherals
+      default:
+          return TeamId.ChromeOS
+  }
+}
\ No newline at end of file
diff --git a/provingground/launchbugs/launchbugs.html b/provingground/launchbugs/launchbugs.html
index 08f9079..41bc2d2 100644
--- a/provingground/launchbugs/launchbugs.html
+++ b/provingground/launchbugs/launchbugs.html
@@ -11,38 +11,42 @@
   <script>
     var base_url = 'https://launch.corp.google.com/launches?'
     // Add milestone, TEs, and Approver to launch url and redirect to it
-    function UpdateUrlsWithMilestone(m, team, te, approver) {
-      var src = base_url.concat('&q=calendarId:2197 <milestone><TE><approver>')
+    function UpdateUrlsWithParams(milestone, team, tester, approver) {
+      var src = base_url.concat('&q=calendarId:2197 <team><milestone><tester><approver>')
       // Milestone
-      if (!m) {
+      if (!milestone) {
         console.log('No Milestone provided')
-        m = ''
+        milestone = ''
       }
       else {
-        m = ' ("Stable Target Milestone":"' + m + '" OR "Stable Experiment Target Milestone":"' + m + '")'
+        milestone = ' ("Stable Target Milestone":"' + milestone + '" OR "Stable Experiment Target Milestone":"' + milestone + '")'
       }
-      src = src.replace(/<milestone>/g, m)
-      // Team Logic overrides TE
-      if (team && team.toLowerCase() == "corex") {
-        console.log('Team found, overrides TE')
-        te = 'dhaddock,kyleshima,hyungtaekim,awendy'
+      src = src.replace(/<milestone>/g, milestone)
+      // Team Logic
+      if (!team) {
+        console.log('No Team provided')
+        team = ''
       }
+      else {
+        team = ' underteamid:' + GetTeamId(team)
+      }
+      src = src.replace(/<team>/g, team)
       // TE
-      if (!te) {
+      if (!tester) {
         console.log('No TE provided')
-        te = ''
+        tester = ''
       }
-      else if (te == "new") {
-        console.log('New TEs')
-        te = ' te:NULL'
+      else if (tester == "new") {
+        console.log('No testers assigned')
+        tester = ' te:NULL'
       }
       else {
         // TODO: Remove this replacement once b/237097115 is fixed
-        te = te.replace(/%2C/g, '" OR "')
+        tester = tester.replace(/%2C/g, '" OR "')
         // Verify if multiple TEs provided
-        te = ' "te":("' +te.replace(/,/g, '" OR "')+ '")'
+        tester = ' "te":("' +tester.replace(/,/g, '" OR "')+ '")'
       }
-      src = src.replace(/<TE>/g, te)
+      src = src.replace(/<tester>/g, tester)
       // EngProd Bit Approver
       if (!approver) {
         console.log('No Approver provided')
@@ -58,11 +62,17 @@
       window.location.replace(src);
     }
     // Get Params
-    var m = GetURLParameter('m')
-    var team = GetURLParameter('team')
-    var te = GetURLParameter('te')
-    var approver = GetURLParameter('a')
-    UpdateUrlsWithMilestone(m, team, te, approver)
+    // If user is requesting help, redirect to go link helper image
+    if (GetURLParameter('help')){
+      window.location.replace('https://screenshot.googleplex.com/7B3hsgkmYUxfB3N.png');
+    }
+    else{
+      var m = GetURLParameter('m')
+      var team = GetURLParameter('team')
+      var te = GetURLParameter('te')
+      var approver = GetURLParameter('a')
+      UpdateUrlsWithParams(m, team, te, approver)
+    }
   </script>
 </body>
 </html>
