Another weekend of exciting games, including all the teams that didn’t play in week one, so every team has played now. The two teams that met in the Championship last season both lost to teams that were a combined 11-25 last season, the Knighthawks and FireWolves continue their hot start, the Desert Dogs grab victory from the jaws of defeat, and the Rock, Swarm, and Seals begin their seasons with wins.
Author Archives: Graeme
Top 50 lists
We sports fans love our lists. We love to make them and we love to argue about them. Rankings of teams (“power rankings”), top players in various categories, top players overall, and so on. Even a Hall of Fame can be viewed as a list of the best all-time players, coaches, refs, etc. Power rankings has always seemed like an odd one to me, since the league standings is the most accurate ranking of teams that you can get, particularly in the NLL now that there are no divisions. Maybe early in the season a team could be over- or under-performing and so they might be better or worse than their record would indicate, but by about the mid-way point of the season, most teams are exactly what their record indicates.
IL Indoor has done its list of the top 50 players for many years, and I had a vote in a number of those. This year the NLL itself has published its own top 50 list, gathered from votes from the various coaches and GMs around the league. Not to be outdone, the PLL is in the process of releasing their top 50 list as well, apparently voted on by the players themselves, though I have my doubts. More on that later.
Let’s look at the lists from these various sources. Don’t worry, I’m not going through each of the lists in exhaustive detail, nor am I posting my own list. I’m just looking at a few highlights and things they got wrong we disagree on.
2024 NLL Week 1
The 2023-2024 NLL season (I tend to shorten that to just the 2024 season since the majority of it will be played in 2024 and it’s just easier) started this past weekend with some pretty exciting games. The T-Birds dominated the Rush, Panther City got by the new-look Warriors, after a dismal 2023 season the Firewolves open their season with a win against Las Vegas, the Knighthawks came from behind to beat the Roughnecks, and the Wings managed to prevent the Riptide from doing the same. Let’s have a look at what rocked and what didn’t in week one.
The Bye Week: help or hinder?
Back in 2019, I wrote a couple of articles for IL Indoor about doubleheader weekends. The first dealt with how often teams won the first and second games of doubleheaders, while the second looked more into how home floor advantage plays into this. The obvious next step would have been to see how bye weekends affect teams but for some reason, I never went there. Let’s go there now.
NLL 2024: Who’s in, who’s out
Here it is: an almost-complete summary of all the roster changes for each team, all in one place. As of this writing, the season begins in less than 24 hours and I have not seen rosters announced by the Seals or Swarm. I will update this article as soon as I see that information.
Note that these are the changes as of the final roster from last season, so a player might be listed as “In” even if he played for that team during 2023. And a player who’s injured but still part of that team will be listed as “out”. Not all teams have announced who’s on their IR, PUP, or holdout lists so take an empty list with a grain of salt. Also most teams don’t have (or didn’t announce) a “Protected” list, but a few did.
Albany FireWolves
In: Sam Firth, Nathan Grenon, Tye Kurtz, Travis Longboat, Joe Nardella, Jackson Nishimura, Alex Simmons, Tanner Thomson, Jeff Trainor, Nicholas Volkov, Zach Young
Out: Jonah Boehm, Jake Fox, Corson Kealey, Connor Kelly, John LaFontaine, Ty Logan, Brett Manney, John Piatelli, Justin Scott, Haina Thompson, Thomas Vaesen
IR:
PUP: Will Johansen
Holdout: Charlie Kitchen
Practice Roster: Jonah Boehm, Cam Badour, Andrew Kidd, John Piatelli
Buffalo Bandits
In: Steve Orleman, Brandon Robinson, Dylan Robinson, Justin Robinson, Cam Wyers
Out: Max Adler, Adam Bomberry, Sam La Roue, Ethan O’Connor, Bryce Sweeting
IR:
PUP: Zack Belter, Adam Bomberry, Frank Brown, Bryce Sweeting
Holdout: Devyn Mayea, Alex Tulett, Doug Buchan
Practice Roster: Evan Constantopoulos, Alex Kew, Sam La Roue, Christian Watts
Protected: Justin Guterding, Max Adler
Calgary Roughnecks
In: Thomas Hoggarth, Justin Inacio, Tyler Pace, Head coach Josh Sanderson, Ethan Ticehurst, Thomas Vela
Out: Zach Herreweyers, Head coach Curt Malawsky, Curtis Manning, Dylan McIntosh, Kyle Waters, Chris Willman
IR: Robert Hudson, Clay Scanlan, Logan Schuss
PUP: Derek Lloyd
Holdout:
Practice Roster: Steve Fryer, Riley Isaacs, Bennett Smith
Colorado Mammoth
In: Paul Dawson, Brett Draper, Connor Kelly, Sean Kriwokon, Ben McDonald
Out: Jalen Chaster, John Lintz, Garrett McIntosh, Brett McIntyre, Dillon Ward, Connor Watson
IR: Jalen Chaster
PUP: Dillon Ward
Holdout:
Practice Roster: Brett McIntyre
Georgia Swarm
In: Liam Byrnes, Chet, Comizio, Jeff Henrick, Dustin Hill, Brady Kearnan, Luke Keenan
Out: Robert Hudson, Ryan Lanchbury, McComber Teioshontathe, Ethan Riggs, Jerry Staats, Craig Wende
IR: Kaleb Benedict, Ethan Riggs, Miles Thompson
PUP:
Holdout:
Practice Roster: Kaleb Benedict, Matt Campbell
Halifax Thunderbirds
In: Cole Kirst, Caelan Mander, Austin Shanks, Nonkon Thompson
Out: Chris Boushy, David Brock, Eric Fannell
IR:
PUP: Cody Jamieson, Randy Staats
Holdout:
Practice Roster: Briley Maxwell, Jordan Trottier, Andrew Vradenburg, Aaron Woods
Las Vegas Desert Dogs
In: Charlie Bertrand, Zach Cole, Jonathan Gagliardi, Casey Jackson, Blake McDonald, Jake Saunders, Adrian Sorichetti, Thomas Vaesen, Dylan Watson, Sean Westley
Out: Conrad Chapman, Emerson Clark, Brandon Clelland, Nick Ellerton, Sam Firth, Marshal King, Jon Phillips, Jackson Suboch
IR:
PUP:
Holdout:
Practice Roster: Josh Jackson, Carter Zavitz
New York Riptide
In: Matt Anderson, Matt Bennett, Damon Edwards, Will Johnston, Corson Kealey, Jack Kelly, John LaFontaine, Austin Madronic, Kiel Matisz, Brent Noseworthy, Mitch Wilde
Out: Mike Burke, Curtis Conley, Chad Cummings, Tyler Davis, Tyler Digby, Scott Dominey, Jordi Jones-Smith, Dan Lomas, Brett Noseworthy, Steve Orleman, Max Wayne
IR: Zack Deaken, Callum Jones, Kevin Orleman
PUP:
Holdout: JT Giles Harris
Practice Roster: Tyler Davis, Colton Lidstone, Max Wayne
Panther City LC
In: Brandon Goodwin, Jason Knox, Brent Mitchell, Cole Pickup, Ryan Sheridan, Ty Thompson
Out: Tyler Burton, Patrick Dodds, Nathan Grenon, Ryan McLean, Cam Wengreniuk
IR: Brooker Muir
PUP:
Holdout:
Practice Roster: Will Cecile, Elijah Gash, Liam Osbourne
Philadelphia Wings
In: Mitch Armstrong, Holden Cattoni, Taggart Clark, Scott Dominey, Jackson Ganton, Deacan Knott, Mike McCannell, Ryan Wagner
Out: Trevor Baptiste, Liam Byrnes, Alex Crepinsek, George Downey, Blake Gibson-McDonald, Angus Goodleaf, Hunter Lemieux, Kiel Matisz
IR:
PUP:
Holdout:
Practice Roster: Jack Jasinski, Kevin Lynch, Curtis Romanchych
Rochester Knighthawks
In: Brad Gillies, Dan Lomas, Ben Macdonnell, Thomas McConvey, Ethan O’Connor, Ryan Smith, Kyle Waters, Thomas Whitty
Out: Matthew Bennett, Holden Cattoni, Paul Dawson, Parker Pipher, Ethan Schott, Jordan Stouros, Thomas Hoggarth, Thomas Vela
IR: Greg Harnett
PUP: Connor Farrell, Stephen Keogh
Holdout:
Practice Roster: Pent Eistrat, Cory Highfield, Taylor Jensen
San Diego Seals
In:
Out:
IR:
PUP:
Holdout:
Practice Roster: Matthew Abbott, Liam Phillips, Thomas Semple, Dallas Wade
Saskatchewan Rush
In: Keegan Bell, Patrick Dodds, Adam Jay, Nathaniel Kozevnikov, Zach Manns, Frank Scigliano, Mike Triolo, Cam Wengreniuk
Out: Matt Beers, Ryan Dilks, Marty Dinsdale, Rhys Duch, Dan Lintner, Mark Matthews, Eric Penney, Kyle Rubisch
IR:
PUP:
Holdout:
Practice Roster: Jake Bowen, Thomas Kiazyk, Nick Preston, Jeremy Searle
Toronto Rock
In: Chris Boushy, Sheldon Burns, Josh Dawick, Tyler Hendryks, Dan Lintner, Justin Martin, Mark Matthews
Out: Dan Dawson, Greg Downing, Latrell Harris, Adam Jay, Stephen Keogh, Zach Manns, Tom Schreiber
IR: Tom Schreiber
PUP: Jordan McKenna, Chase Sciavon
Holdout:
Practice Roster: Marley Angus, Sam Haines, Zack Kearney, Cam Milligan
Vancouver Warriors
In: Keegan Bal, Matt Beers, Reid Bowering, Kevin Crowley, Ryan Dilks, Owen Grant, Anthony Kalinich, Brayden Laity, John Lintz, Riley Loewen, Head Coach & GM Curt Malawsky, James Rahe, Jackson Suboch, Chris Willman
Out: Owen Barker, Tyler Codron, Head Coach & GM Troy Cordingley, Matt Delmonico, Shawn Evans, Dean Fairall, Jonathan Gagliardi, Brandon Goodwin, Connor Goodwin, Tyrell Hamer-Jackson, Tyson Kirkness, Jacob Motiuk, Chase Scanlon, Aidan Solomon
IR:
PUP:
Holdout:
Practice Roster: Tyson Kirkness, Connor O’Toole
Protected: Tyrell Hamer-Jackson
2024 rule changes
Every year, the NLL makes some changes to the rules. Some of them are significant while others are fairly minor, and a few changes are more clarifications than changes. For the 2024 season, there are a couple of brand new rules, some changes to existing rules (one quite significant), and a couple of clarifications. Here they are:
17.95 – MAJOR, GAME MISCONDUCT, MATCH PENALTY AUTOMATIC OFFICIAL REVIEW
This is a new rule. All major, game misconduct, or match penalties (except fighting and roughing) will be reviewed by the crew chief immediately. The crew chief can confirm the call, modify it to a less severe penalty, or rescind it.
32.6 – STICK CHECK MEASUREMENT REQUEST PROCEDURE
The only change here is that the Gait D and Gait D2 stick heads are explicitly listed as being illegal.
33.1 – REQUIRED EQUIPMENT LIST
In addition to the gloves, shoulder pads, and rib pads previously required, players must now also wear a chest/heart protection pad. Sounds like a good idea to me.

35.2 – APPROVED EQUIPMENT
A sentence was added indicating that goalies are allowed to wear 2022-2023 shin pads.
37.6 – COINCIDENTAL PENALTIES
This is the significant one I mentioned. When coincident minor penalties are given, the teams will now play 4 on 4, and the players can leave the box as soon as their penalties are over. Previously, the teams would play 5 on 5 and the players had to stay in the box until the next non-technical stoppage after the penalties expired. That’s still the case for coincident major penalties.
67.5 – NON-SHOOTER IN CREASE WHEN TEAMMATE SHOOTS
No change to this rule, just a clarification saying that no part of the player’s body may be touching the crease prior to the ball crossing the plane of the goal in order for the goal to count.
69.8 – CONTACT INITIATED BY DEFENDER ON ATTACKER INTO THE CREASE
This rule now explicitly applies to the non-shooter. If a non-shooter is illegally checked into the crease and doesn’t “use his best efforts to immediately vacate the crease”, any goal scored will not count. Also, if a non-shooter is legally checked into the crease but the defender impedes him from leaving the crease, the defender gets a holding penalty and any goal scored will count. The change to this rule is to use the term “non-shooter” rather than “attacking player” to make sure the goal-scorer is not included.
80.18 – FIGHTING FIVE MINUTES OR LESS IN THE FOURTH QUARTER
This badly-named rule is also new this season. Any player given a fighting major with five minutes or less remaining in the fourth quarter will get an additional game misconduct, unless the player is considered an “unwilling combatant”. The rule says nothing about fights in overtime.
95.13 – UNSPORTSMANLIKE ACTIONS BY A PLAYER ON AN OPPONENT
The rule said that actions by players not on the playing surface who become involved with players on the playing surface are “deemed as more severe and shall be dealt with accordingly”. This rule now also applies to players on the playing surface who become involved with players on the opposing bench.
2023 NLL Off-season Report, Part III
Welcome to part III of an ongoing series covering the off-season changes between the 2023 and 2024 NLL seasons. Part I was here, and Part II was here. I think we’re close enough to the beginning of actual training camps that unless there’s a flurry of movement, there won’t be a Part IV. Any further changes will be part of my season preview articles.
Trades
- The Rock made two deals to improve their offense. Halifax sent Chris Boushy to the Rock for a first-round pick. This trade was announced less than ten minutes after I published my Off-Season Report, Part II. I like Boushy so as a Rock fan, I like this move. In a separate deal, the Rock re-acquired Dan Lintner and a 4th round pick for Jameson Dilks and a 2nd round pick. Dilks is from Hamilton so getting sent out west kind of sucks for him, but then again his brother Ryan is also from Hamilton and seems to have done well for himself out west. I initially thought that a silver lining for Jameson would be that he’d get to play with Ryan, but Ryan signed with the Warriors in the off-season so the Rush managed to replace one Dilks with another. Along with Boushy, Lintner gives the Rock another weapon on the right side, and some help on the right side was necessary with the retirement of Dan Dawson and the departure of Stephen Keogh.

- Albany trades a draft pick to the Riptide for Jordi Jones-Smith. Jones-Smith is listed as a transition player but his offensive numbers are pretty small for that position, having picked up a goal and three assists in 50 regular season games. Sounds more like a “stay-at-home defender” to me, but any defender that has played with the likes of Rubisch, Corbeil, Dilks, and Mydske (plus guys like Damon Edwards and Chad Cummings last year) probably learned a thing or two from some of the best.
Other
- Last year’s Defender of the Year Latrell Harris will miss the entire regular season after hurting his knee in a PLL game, which required surgery to fix. That sucks.
- Ryan Lee had surgery before the 2022 season, most of which he missed. He was able to return to help the Mammoth win a Championship and was able to play in 2023, but there have been some complications from that surgery which will require more surgery, so he will also miss all of the 2024 season. That sucks.
- Stephen Keogh signed with Rochester. This sucks too, but only for Rock fans. Knighthawks fans are likely less disappointed.
The last couple of changes I will list here are each significant enough to warrant their own paragraphs rather than just bullet points.
Duch retires
First, another NLL legend has decided to hang ’em up as Rhys Duch announced his retirement. Duch was one of those “face of the franchise” type of players with the San Jose, Washington, and Vancouver Stealth teams and was either #1 or #2 in team scoring in every season he played for them. But when the team rebranded to the Vancouver Warriors, they decided to move on from Duch as well. He then played with Calgary, Halifax, Colorado, and Saskatchewan over the next four seasons and in Calgary in 2019, he managed to fulfil every athlete’s childhood dream by scoring the Championship-winning goal in overtime. He continued in Calgary in 2020 until the pandemic hit, but when the league returned in 2022, Duch had signed with the Thunderbirds, which is literally the furthest NLL city from his Victoria BC home.
But an injury caused him to play only two games in a Thunderbirds jersey and miss almost the entire 2022 season. He returned for 13 games (with Colorado and Sask) in 2023 but after scoring 30+ goals in nine straight seasons (and 40+ in four of them) to start his career, scoring 14 in 13 games was a bit of a drop. He retires at:
- #12 in all-time NLL points
- #15 in goals
- #11 in assists
- one of only thirteen players to hit 1000 career points
Congrats to Duch on a Hall of Fame career.
Schedule changes
The regular season schedule was announced, with a significant change: there are no more divisions, so all 15 teams are grouped together. The top 8 teams make the playoffs. This is how it was prior to the addition of divisions in the 2002 NLL season. Each team will play every other team at least once per season, which is fantastic, and every team visits every other city at least every other year. This is huge, for a few reasons. Here are just three of them:
- The crossover is gone, and there can be no complaining about teams making the playoffs undeservedly because they play in a “weaker” division.
- We could see former division rivals play each other in the Championship series. With the division format, it would be impossible for the Rock to play the Bandits in the finals, or the Rush to play the Roughnecks. Now it could happen.
- There are some teams that just don’t play each other very often for whatever reason. The Mammoth and Rock have both been in the NLL for 20 years and have played each other only 12 times. Similarly, the Bandits and the Rush (both Edmonton and Saskatchewan combined) have played 11 times in 17 seasons.
I’m sure that the question of “Why don’t we western teams get to see more of Jeff Teat” was involved in this decision.
2023 NLL Off-season Report, Part II
This has been a very busy off-season in the NLL. I wrote back in August about a whole bunch of changes, and now only a month later, there are a whole bunch more. And that’s not even considering the 2023 entry draft which just happened. Let’s have a look at the big deals and changes across the league, and one thing that’s not part of the NLL but affects a lot of NLL people: the Mann Cup.
We still have a couple of months until training camps start, so don’t be surprised if there’s an Off-season report, Part III.
The NLL Immaculate Grid
About a week ago, someone asked me if my NLL stats database could help create an “immaculate grid” game for the NLL. I had never heard of an immaculate grid, so I looked it up. For those of you who are as uninformed as I was, it’s a game where you have a grid of three columns and three rows, and each column and row has a “category”, like players who played for a specific team, or players who have accomplished some statistical feat. The idea is to find a player who matches the categories for both the column he is in and the row he is in, and to do this for all nine combinations of row and column categories.
For example, say we have a column with the category “Played for Colorado Mammoth” and a row that says “Played for Halifax Thunderbirds”, you need to find players who have played for both of these teams. In this case, there are only six matches so you could enter Rhys Duch, Connor Watson, Ryan Benesch, Mike Burke, Stephen Keogh, or Chet Koneczny and you’d be right. For things like “Played with Buffalo Bandits” and “Played with Toronto Rock”, there are 51 players who match both, and there are an amazing 76 players who have played for both the Bandits and the original Knighthawks.
There are nine squares to fill in, and you get nine guesses before you are done. You can fill in any number of player names and then click “Guess”, and you are told how many you got right. Note that you are not told which ones you got right, just the number. The fewer guesses you take to get all nine correct, the better. Of course, there are no prizes except bragging rights.
Like I said, I’d never heard of the game but it’s pretty easy to understand. I knew my database contains enough information to create this game, so I did. It was actually quite simple. Here’s how it works.
I created a Javascript program that reads the database and creates one category for each team it finds. I limited it to those teams who played at least one season after 2000 since the data on older teams (teams like the Washington Wave, Detroit Turbos, Baltimore Thunder, etc.) isn’t always complete. I also added some statistical categories in there, like 1000 points or 400 goals in a career, 100 points or 50 goals in a season, and 6 goals or 10 points in a game. This program picks six random categories (three rows and three columns). For each row/column pair, we make a list of players who match the first category and a separate list of players who match the second category. Then we find the players who appear in both lists. If there is any row/column pair that has no players in common, we throw this option out and start over. For example, the intersection of “Played for Columbus Landsharks” and “Played for Georgia Swarm” contains no players, so any grid containing that combination is thrown out.
I believe for a baseball immaculate grid game, you are also required to pick different players for each of the nine grid spots, even if one player qualifies more than once. However I relaxed that restriction because the NLL only has 30-odd seasons and a total of a little over 1700 players. One of the grids created while I was testing this contained a column for “Played for Vancouver Warriors” and two of the rows were “Scored 100 points in a season” and “Scored 1000 career points”. The only player who matches both* is Shawn Evans, so the “unique player” restriction would make this grid impossible to solve.
* – This is not true. Mitch Jones played for the Warriors and also scored 100 points in a season, but his 100 points was split over two different teams. This doesn’t negate his accomplishment, but it means that the way I match the categories won’t find it. I could fix it but it’s a lot of work (not for me – the extra work would have to be done every time the site loads which would make it slower for everyone) and Jones is literally the only player in NLL history who falls into that category. I have some ideas on other ways to fix it but for now, we have this restriction.
Back to Javascript. I generate a grid of 6 categories and save the categories in a file, along with a date. I generate grids and dates for each of the next 30 days, making sure we don’t have any repeat grids. I make sure that no grid cells will contain zero players, but we don’t actually store the matches in this file. This is all done on my laptop. I upload this file to the web site. Every 30 days, I’ll need to do this again.
When you go to the web site, I load this file, find the categories for today, and display the grid. You enter the player names, and there’s an autofill feature to help you. When you click Guess, I check how many of the names match the list for that grid cell, and tell you how many matching names you have. If that number is 9, you win. Otherwise I reduce the number of guesses you have left (starting at 9). If that number is now zero, you lose, otherwise we keep going.
If the game is over (you win, you lose, or you click the “Give up” button), we show you which cells contain a correct guess, and display the list of matching players for each cell. We also display a little mini-grid of green and white squares and a Copy button so you can post your results to social media, showing everyone how NLL-savvy you are.
The site uses local storage to keep track of your guesses and whether you completed the game today. If you refresh the page, we’ll remember how many guesses you’ve taken and the names you’ve already entered. We also keep track of how many wins and losses you have, and if you have a winning streak. This is browser- and machine-specific, so if you start the game on your desktop and then move to your phone, it won’t remember your guesses. The only way to fix that is to have some sort of universal login, and force users to authenticate before playing. But that’s a lot of work for me and I suspect there’s not enough benefit for you. Many people would not bother to create a user account and log in every time they want to play, so they just wouldn’t play at all.
But remember that in a few months if someone shows you a screenshot of “50 wins, 0 losses”, or even a fully-green grid for one particular day – they could easily have clicked “Give up” on one browser or machine to get the answers, and then played again on a different browser or machine.
Strategy
The one thing that gets me when dealing with the statistical categories is that the second category is not always as related as you might think. For example, if the column is “Played for Toronto Rock” and “Scored 400 career goals”, I think “OK, Colin Doyle and Josh Sanderson are easy, but no other Rock players come to mind. I don’t think Blaine Manning got to 400 goals in his career, did he?” (Answer: no, he ended up with 307.) But while the “Played for the Rock” thing is important, don’t overthink it. We’re actually looking for players who did two separate things: (1) scored 400 career goals and (2) played for the Rock at some point in their career. We’re not necessarily looking for players who scored 400 with the Rock. So Dan Dawson, Lewis Ratcliff, Ryan Benesch, and Shawn Williams also qualify.
Relocations and rebrandings are ignored, so the Albany Attack, San Jose/Washington/Vancouver Stealths, and Vancouver Warriors are considered five distinct teams. Similarly for the two Swarms, the two Rushes, the original Knighthawks and the Thunderbirds, the Wings/Black Wolves/FireWolves, and so on. Also the “original Philadelphia Wings” and “original Rochester Knighthawks” are distinct from the current Wings and Knighthawks.
“Played for” a team means that a player appeared in at least one regular season or playoff game with that team. Anthony Cosmo was traded to the Minnesota Swarm at one point in his career, but he never actually played a game with them, so that doesn’t count. Similarly, Ryan Benesch was drafted by the San Jose Stealth, but he was traded to the Rock before playing a game with them so he won’t match the “Played for San Jose Stealth” category.
The game is more challenging than you might expect. If you’re trying to think of players who played for both the Saskatchewan Rush and Buffalo Bandits, you may remember Alex Buque or Dan Lintner, but it may also bring up some “Oh right!” moments, like Jeff Shattler and Chris Corbeil. But the older teams can be very tough. There are six players who played for both the Ottawa Rebel and New Jersey Storm – do you remember them? Do the names Mike Benedict, Paul Talmo, or Joe Finstad ring any bells? If you’ve been around the league long enough they might, but I started watching the NLL in 2001 and I don’t recognize those names. On some days, 9/9 won’t be that bad, but on other days, you may struggle to get 5/9.
Good luck!
2023 NLL off-season report, part I
It’s been over two and a half months since the Bandits took home the NLL Cup. Many teams have been busy making changes they deem necessary to be able to do the same next season. Here are some thoughts on some of the bigger moves made in the off-season so far.