Navigation: Jump to content areas:


Pro Quality. Fan Perspective.
Login-facebook
Around SBN: Devils Beat Rangers, Head To Stanley Cup Finals

Adjusting for Score Effects to Improve Our Predictions

The analytical community believes strongly in shot differential as a predictor of future success. Unfortunately, the situation is complicated by score effects -- teams tend to go into a defensive shell when leading, which allows the other team to outshoot them.

To combat this, we typically focus on the shot differential when the score is tied to eliminate score effects. It has been shown that if you want to predict a team's future winning percentage, you should look at their shot differential with the score tied rather than at their place in the standings or goal differential.

This is very counter-intuitive, that goals and wins aren't the best measure of whether a team will get more goals and wins. But the problem is one of sample size -- it seems like a season is a long time and random bounces should even out, but with only two or three goals per game, they really don't. Because there are ten times as many shots as goals, random fluctuations in shot differential get much more rapidly washed out and we get a better measure of a team's talent.

So if sample size is so important, doesn't it seem inefficient to throw away all of the results from when the score isn't tied? Can't we find a way to correct for the score effects instead?

Star-divide

Sample size even plays a role in our decision about which type of shot differential we employ. In almost every case, we can improve SOG differential by also including shots that missed the net, which gives us a statistic called Fenwick. And usually we do better still by also adding in blocked shots to get the Corsi number.

This illustrates just how important sample size is. Blocked shots usually don't represent scoring chances, and as a result Corsi actually has a weaker correlation to goals in the long run. Yet even though it isn't quite as closely related to scoring chances, after 40 games or fewer, the larger sample size makes Corsi a better predictor than Fenwick.

As a result, I tend to rely on Corsi for most of my analysis. But wouldn't it be preferable to instead find a way to increase the sample size on Fenwick so that we can get an adequate sample size with the statistic that has the better true correlation to goal scoring? Let's see if we can do that by correcting for score effects so that we can include the non-tied situations and more than double the sample size on our Fenwick statistics.

Score-Adjusted Fenwick

Thanks to the Fenwick tabulations at Behind the Net, we can see that over the last four years, the average Fenwick for a team that's behind by two goals is about 56%. So if a team gets 57% of the shots when they're trailing by 2, that's 1% better than average -- just like if they had 51% of the shots in tied situations. Similarly, the average for a team that's behind by one goal is about 53.9%, so a team that gets 52.9% when down by one is 1% worse than average, like a 49% Fenwick Tied.

It's easy enough to make those corrections and come up with a Score-Adjusted Fenwick total that uses 42.4 minutes of even strength play per game, instead of the 17.9 minutes that goes into Fenwick Tied or 28.4 minutes that goes into Fenwick Close (another attempt to reduce score effects by focusing on close games).

This kind of correction has been suggested before, but there hasn't been a rigorous look at how much impact it has on the predictive power -- does it actually make our predictions significantly better? Let's look at the previous three years and see how it looks in comparison to Fenwick Tied or Fenwick Close.

Testing the predictions

One test of whether we've actually reduced the noise is called split half reliability, where we compare the team's score in odd-numbered games to their score in even-numbered games. The more a stat has random fluctuations, the lower the correlation between the two half-seasons will be. For Fenwick Tied, the R^2 is 0.70, while for Score-Adjusted Fenwick it is 0.82, so this is an encouraging start -- it seems that the larger sample size does reduce variance and allow us to better assess a persistent team talent.

The real question is whether that more precise measurement is actually more useful, whether we are measuring an important talent. We can start by looking at the correlation between Fenwick and point total. The R^2 for Fenwick Tied is 0.40, meaning that about 40% of a team's point total can be explained with Fenwick Tied. For Score-Adjusted Fenwick, that number increases to 46% -- including all of the game states gives us a better sense of how the team did.

Yet where we really hope to see an advantage of the larger sample size is with in-season predictions, as we might hope to make more precise assessments of talent and make them earlier in the season. To test this, we can compare the Fenwick score after a certain number of games to their points in the remaining games. Here's what we find as the predictive validity when we do that comparison:

After 20 games After 30 games After 41 games After 60 games
Fenwick Tied 0.40 0.38 0.34 0.28
Fenwick Close
0.43 0.39 0.34 0.27
Score-Adjusted Fenwick 0.46 0.41 0.36 0.29

Early in the season, Score-Adjusted Fenwick does a substantially better job of predicting how many points a team will earn in the remainder of the season. Later in the season the difference gets small -- both because the sample size for Fenwick Tied gets large enough that much of the noise is washed out and because the randomness of the small number of games remaining becomes increasingly difficult for any measure to predict.

Conclusion

Our ability to make accurate predictions depends on two things: having a good measure of talent and having a large enough sample size for that talent to dwarf random fluctuations.

Fenwick is our best inherent measure of a team's ability to get more scoring chances than their opponents, but analysts typically limit their sample size to situations where score effects will have limited or no impact. Instead, we can make very simple adjustments and include all situations, which more than doubles our sample size.

This gives us a good sample size with a good metric, resulting in better predictions earlier in the season.

Star_divide_medium

Statistical post-scripts

Ideally, we'd merge the corrected Fenwick scores based on how much time a team spent in each game state; the more often a team leads by 2, the larger the up-by-2 Fenwick sample size will be and the more weight it should receive. However, since the TOI numbers at Behind the Net are buggy, I've used the league average TOI instead. The average team spends 3.75 minutes per game down by 2 goals, 8.46 minutes down by 1, and 17.94 minutes tied, giving us the following formula for Score-Adjusted Fenwick:

Score-Adjusted Fenwick = [3.75 * (Fen_up_2 - 44%) + 8.46 * (Fen_up_1 - 46.1%) + 17.94 * (Fen_tied - 50%) + 8.46 * (Fen_down_1 - 53.9%) + 3.75 * (Fen_down_2 - 56%)] / 42.36 + 50%

Star_divide_medium

It is worth noting that the predictive powers reported here are smaller than those reported previously. The previous analysis was non-chronological; the test of the predictions after 20 games would ask: looking at the shot differential in 20 randomly-selected games, how well can we guess how many points the team scored in 60 other randomly-selected games?

That approach inherently reports stronger correlations than this method does because it washes out the impact of trades, injuries, coaching changes, and so forth. For a team that made a mid-season trade, the non-chronological approach would look at the shot differential in a 20-game sample that included 10 games with the old roster and 10 with the new to predict the results in a 60-game sample that was similarly divided.

With the chronological approach, we are looking at 20 games with the old roster and trying to predict a 62-game sample that will be predominantly with the new roster. Obviously, the correlations will be lower, but I feel this more directly reflects the question at hand.

Star_divide_medium

The thing that surprised me most in this study came from a multivariable regression of year-end Fenwick versus year-end points: Fen_up_1 had the largest coefficient and by far the lowest p-value (0.002, versus 0.10 for Fen_tied and 0.23 for Fen_down_1). Removing the weakest contributor (Fen_down_2) and rerunning the regression closed the gap somewhat, but it was still substantial, with p = 0.004 for Fen_up_1, 0.05 for Fen_tied, and 0.12 for Fen_down_1.

Given that the largest changes in expected points come from transitioning between the tied and down-by-1 game states, I would have expected performance in those game states to correlate more strongly to the standings. Is there some reason performance when up by a goal would be a particularly good measure of a team's talent? Or is this just a random blip? I'd love to get input on this.

Comment 40 comments  |  Add comment  |  3 recs  | 

Do you like this story?

Comments

Display:

I hold to our email conversation haha.

being obnoxious and self righteous while ignoring the point since 9/29/11

by DLJr on Jan 23, 2012 12:21 PM EST reply actions  

Though that was more over coefficient than p-value/t-stat.

being obnoxious and self righteous while ignoring the point since 9/29/11

by DLJr on Jan 23, 2012 12:26 PM EST up reply actions  

This is fascinating work, excellent job!

Co-editor of Eyes on the Prize
Follow me on twitter: http://twitter.com/andrewberkshire

by Andrew Berkshire on Jan 23, 2012 12:22 PM EST reply actions  

To answer the last question would be that the team up 1 goal still pushes the play more, but thats not true because the avg. fenwick of a trailing team was over 50%.

by Anders Jensen on Jan 23, 2012 12:23 PM EST reply actions  

Watch the games!

#hadtobesaid

Lightning strikes once, Hextall strikes twice!
"I think there is virtue in pissing off idiots." - Fehr and Balanced

by hintzy64 on Jan 23, 2012 1:38 PM EST reply actions  

(I am kidding, of course. This seems like it has good potential!)

Lightning strikes once, Hextall strikes twice!
"I think there is virtue in pissing off idiots." - Fehr and Balanced

by hintzy64 on Jan 23, 2012 1:39 PM EST up reply actions  

OT

You pic…how is that not goalie interference!

"I will not risk answering your question" Why we love Bob
And yes, I am a female redhead.

by BHMB on Jan 23, 2012 1:41 PM EST reply actions  

I cannot type today

Your*

"I will not risk answering your question" Why we love Bob
And yes, I am a female redhead.

by BHMB on Jan 23, 2012 1:41 PM EST up reply actions  

I assume that glove on the right is a Flyer that just shoved Parise, but it sure looks iffy in the still photo, doesn’t it?

by Eric T. on Jan 23, 2012 1:45 PM EST up reply actions  

Score-Adjusted Fenwick = [3.75 * (Fen_up_2 – 44%) + 8.46 * (Fen_up_1 – 46.1%) + 17.94 * (Fen_tied – 50%) + 8.46 * (Fen_down_1 – 53.9%) + 3.75 * (Fen_down_2 – 56%)] / 42.36 + 50%

That is one ugly ass formula. Excellent work, but no table showing the difference between tied Fenwick and Adjusted Fenwick by team this year? Or did I blow up another article?

Blueshirt Banter - Where Rangers' Fans Matter
Tracking the Rangers - Numbers don't lie. They just don't agree with you.
Twitter: RangerSmurf
"Oh, that sensible and sober* Rangers fan guy who is cool, actually" - Dominik, Lighthouse Hockey
*Statement has not been verified nor regressed

by George E. Ays on Jan 23, 2012 2:43 PM EST reply actions  

Haha, yeah, that’s why the formula is down in the postscript section. The concept is pretty simple, and the arithmetic is simple, but writing the formula out makes it look really imposing. In fact, some simple pre-algebra can simplify the equation to:

SAF = 0.089 * Fen_up_2 + 0.200 * Fen_up_1 + 0.424 * Fen_tied + 0.200 * Fen_down_1 + 0.089 * Fen_down_2 + .210

But then it’s a lot less clear where the random-looking numbers come from.

As for this year, I had planned to do that, but when I saw that by this point in the season the gap between Fen Tied and SAF as a predictor was getting pretty small, I felt like I was a month or two late on making this point. However, I should have called attention to the team that first got me started down this road: Washington looks very good by Fenwick Tied (52.2%, 6th best), but is well below average in every other game state and has a Score-Adjusted Fenwick of 48.3% (22nd best).

Yeah, I should just go ahead and post a table as a quick follow-up with the other winners and losers.

by Eric T. on Jan 23, 2012 3:09 PM EST up reply actions  

I’m sure the Rangers look atrocious by this method (just eyeballing, I think we’re below average at every game state for the season). Makes me wish I had the same split data that I can get from Vic’s scripts.

Blueshirt Banter - Where Rangers' Fans Matter
Tracking the Rangers - Numbers don't lie. They just don't agree with you.
Twitter: RangerSmurf
"Oh, that sensible and sober* Rangers fan guy who is cool, actually" - Dominik, Lighthouse Hockey
*Statement has not been verified nor regressed

by George E. Ays on Jan 23, 2012 3:30 PM EST up reply actions  

Yup, it’s worse than tied or close. I can pull up some split data for you in a few minutes.

by Eric T. on Jan 23, 2012 3:35 PM EST up reply actions  

Game 20317 was the first game w/ Hagelin & Mitchell, that’s where the real increase kicked in (28 games ago). Timeonice has it at 52.0% tied, 51.9% close. Just 5v5 would probably be slightly less.

Blueshirt Banter - Where Rangers' Fans Matter
Tracking the Rangers - Numbers don't lie. They just don't agree with you.
Twitter: RangerSmurf
"Oh, that sensible and sober* Rangers fan guy who is cool, actually" - Dominik, Lighthouse Hockey
*Statement has not been verified nor regressed

by George E. Ays on Jan 23, 2012 3:55 PM EST up reply actions  

Turns out I was way behind on downloading play by plays. But eventually I’ll get my database updated and can provide you with the split data. Any minute now…

by Eric T. on Jan 23, 2012 3:57 PM EST up reply actions  

Don’t sweat it.

Blueshirt Banter - Where Rangers' Fans Matter
Tracking the Rangers - Numbers don't lie. They just don't agree with you.
Twitter: RangerSmurf
"Oh, that sensible and sober* Rangers fan guy who is cool, actually" - Dominik, Lighthouse Hockey
*Statement has not been verified nor regressed

by George E. Ays on Jan 23, 2012 4:01 PM EST up reply actions  

Games 9-307, they had a 42.9% Score-Adjusted Fenwick (vs 42.6% Fenwick Tied) — they were competent with a lead (44.3% when up 2, 44.5% when up 1), but terrible when tied (42.6%) or trailing (40.9% down 1, 43.5% when down 2).

Games 317-699, they had a 50.6% Score-Adjusted Fenwick (vs 51.8% Fenwick Tied) — the score is brought down because they markedly underperformed in two-goal games (50.9% when down by 2, 41.3% when up by 2).

Of course, we’re chopping the data up pretty finely now. That 28-game stretch ought to include something like 100 minutes of up-by-2 or down-by-2 play, so I wouldn’t build a “the team relaxes too much when it’s not close” narrative just yet; it’s probably just variance. But that’s what’s driving their differential between Fenwick Tied and Score-Adjusted Fenwick.

by Eric T. on Jan 23, 2012 6:54 PM EST up reply actions  

Sweet. Thanks for the info.

Blueshirt Banter - Where Rangers' Fans Matter
Tracking the Rangers - Numbers don't lie. They just don't agree with you.
Twitter: RangerSmurf
"Oh, that sensible and sober* Rangers fan guy who is cool, actually" - Dominik, Lighthouse Hockey
*Statement has not been verified nor regressed

by George E. Ays on Jan 23, 2012 9:35 PM EST up reply actions  

Erm, prealgebra fail: there shouldn’t be a .210 at the end there. With the symmetric weights, the constants cancel out.

by Eric T. on Jan 24, 2012 9:10 AM EST up reply actions  

Great article!

I’ve never commented here in regards to a stats post, but I do enjoy them and this one in particular. Your analysis seems very thorough – here’s my take on the last point about the Fen_up_1: keeping a one goal lead is the hallmark of success because it allows you to (among other things) capitalize on the lucky bounce type random fluctuations that are difficult to predict and factor into an analysis. Say the score is tied and you get a lucky bounce type goal, (seems like it happens quite a lot, though admittedly I’m making that statement as simply a lifelong hockey watcher…) If you can bear down and win that game, those are points in the standings that are hard to explain by the way you played when the game was even, but you still get to keep the points. That’s all I have, I wonder what an analysis of teams that don’t easily cede leads would show…
Thanks for the great stuff!
-D

by d-rezin on Jan 23, 2012 10:50 PM EST reply actions  

Thanks, I really appreciate it.

Yeah, for sure a one-goal lead is a key situation, and success in the long run will require a team to hold their leads. But it seems at least as important for them to do well in tied situations to get the lead in the first place, at least to my intuition.

by Eric T. on Jan 24, 2012 1:05 AM EST up reply actions  

Great post, Eric. Not sure I have much to add, but this was really well written and presented. It’s always nice when the results on something like this line up with conventional wisdom.

Driving Play - The Blog with Three First Lines

by Chase W on Jan 23, 2012 11:16 PM EST reply actions  

Thanks. Any guesses on the brain-teaser at the end? I’m having trouble accepting that it’s real, even if the stats say it probably is.

by Eric T. on Jan 24, 2012 1:07 AM EST up reply actions  

Hmm, that’s a good question. I’m not much of a statistician, but one thing I’ve noticed this season is how much some teams go into a shell when they’re leading. The Capitals are a perfect example of this – they’ve still had good score-tied numbers under Hunter, but unless I’m mistaken, their up-1 and up-2 Fenwick scores have not been good under both coaches. I’m guessing this could be a result of the frequently talked about ‘defensive minded’ system that the team has been running after they were Halak’d. If we take a team like Detroit, on the other hand, they’re still bringing the heat up by one or two goals no matter what. Perhaps up-1 Fenwick scores don’t measure team’s talent any better, per se, but do tell us which teams aren’t going to back off and ultimately have a better chance moving forward in a game which they’re leading.

Driving Play - The Blog with Three First Lines

by Chase W on Jan 24, 2012 6:24 PM EST up reply actions  

I may be asking something basic here, and maybe I don’t fully understand, but does the increase in R^2 explainable by the increase in variables in the regression? That is, have you calculated adjusted R^2 or considered variance inflation factor?

/This all looks like really good work, except for me, it’s a little too much like work

GMAT verbal section question, Philadelphia sports version.
In 2015, which one of the following will prove to be a better investment?
(a) Ilya Bryzgalov's contract (b) Ryan Howard's extension (c) Mike Vick's extension (d) Greek bonds from 2009 (e) Papelbon's bloat deal

by Bud in TN on Jan 23, 2012 11:57 PM EST reply actions  

There are two answers to this.

For everything except the last two paragraphs, only single variable regressions were used. The Score-Adjusted Fenwick numbers were calculated using the equation in the first post-script, which derives from league averages and not a regression, and that was then the single input variable for regressing against a team’s point output.

In the last two paragraphs, I hinted at a multivariable regression I did — I was curious to see whether a multivariable regression using the five different game states (+2, +1, tied, -1, -2) as inputs would point to a new formula that was substantially more predictive for whatever reason. The result was a little better (both in R^2 and adjusted R^2), but it wasn’t a big difference, and I decided the difference wasn’t large enough for me to dump the approach that made more first-principles sense to me, so the bulk of the article didn’t use the coefficients suggested by that regression.

Re-reading that, I can see that it’s not the most clear thing I ever wrote. But I need to go, so I’m going to hit post and let you ask for clarification if you need it.

by Eric T. on Jan 24, 2012 1:19 AM EST up reply actions  

It’s the second paragraph I was referring to, if you did comparison to adjusted R^2, that’s fine. Honestly, I did not read this as closely as I might have (again, it feels too much like “work” to me, and it’s an area of work I “have” to do but don’t “like” to do) but I saw all the variables and I saw that the R^2 differential was small enought that it could have been a result of that. If you compared adjusted R^2s, it’s all good for me.

/now returning to non-work-like commentary

GMAT verbal section question, Philadelphia sports version.
In 2015, which one of the following will prove to be a better investment?
(a) Ilya Bryzgalov's contract (b) Ryan Howard's extension (c) Mike Vick's extension (d) Greek bonds from 2009 (e) Papelbon's bloat deal

by Bud in TN on Jan 24, 2012 11:00 AM EST up reply actions  

That is, your second paragraph just above, in the multivariate model in your last two paragraphs.

GMAT verbal section question, Philadelphia sports version.
In 2015, which one of the following will prove to be a better investment?
(a) Ilya Bryzgalov's contract (b) Ryan Howard's extension (c) Mike Vick's extension (d) Greek bonds from 2009 (e) Papelbon's bloat deal

by Bud in TN on Jan 24, 2012 11:02 AM EST up reply actions  

Yeah, as it turns out the adjusted R^2 was almost the same as R^2 — with 120 data points, the difference between 1 and 5 input variables is small.

by Eric T. on Jan 24, 2012 11:10 AM EST up reply actions  

Constant weights

Really interesting analysis. I’m curious of the impact that constant (instead of team-level) weights may be having. For example, the Rangers likely spend more time leading in games, relative to the average team. Have you considered some sensitivity analyses, changing the ratios of the weights and seeing how that impacts each team’s SAF?

Just a thought.

by wndowd on Jan 24, 2012 11:04 AM EST reply actions  

Yeah, I’m really hoping BtN will get their TOI bugs worked out so that we can weight for each team based on their individual TOI; I’m pretty sure that the predictions in the early samples are being weakened by having the wrong weights. For example, when the Oilers and Devils were both 5-15 last year, I bet they both had a lot less than 3.75 minutes per game in the up-by-2 state and the huge difference in their up-by-2 Fen (38.6% for the Oilers, 14.3% for the Devils) was overweighted in this analysis. Getting that right should improve the predictions substantially, I suspect.

But without knowing the actual TOI each team had in each game state, it’s not easy to fix. Maybe I’ll play with using the record as an input, assume that a team that won 50% of their games had the league-average distribution and introduce some asymmetry proportional to their winning percentage.

by Eric T. on Jan 24, 2012 11:20 AM EST up reply actions  

What’s wrong with the BTN TOI numbers? They look normal at a glance.

Blueshirt Banter - Where Rangers' Fans Matter
Tracking the Rangers - Numbers don't lie. They just don't agree with you.
Twitter: RangerSmurf
"Oh, that sensible and sober* Rangers fan guy who is cool, actually" - Dominik, Lighthouse Hockey
*Statement has not been verified nor regressed

by George E. Ays on Jan 24, 2012 12:18 PM EST up reply actions  

Look at the amount of time each team spent up by 2 this year.

Tampa, Anaheim, Toronto, Columbus, and Minnesota spent the most time up by 2. LA, Vancouver, Boston, the Rangers, and St Louis spent the least.

On its own, that doesn’t ring true, but then look at the shot rates for each team. When Tampa is up by 2, they get 5 shots per 60 and their opps get 7? Whereas Vancouver gets 62 shots per 60 and their opps get 82? Clearly the divisors are wrong here.

I brought it to Gabe’s attention and he said that he knew about the bug, that in some cases they’re flipped. But it didn’t sound like they are in every case, so I was hesitant to just flip them and use as is; I’ll wait until he gets the bugs worked out.

by Eric T. on Jan 24, 2012 12:34 PM EST up reply actions  

Hm. I guess I could weight by total Fenwick events instead of by TOI. I gotta work on something else right now, but I’ll take a stab at that later.

by Eric T. on Jan 24, 2012 12:35 PM EST up reply actions  

Great work Eric

You mind if I steal that formula for an upcoming piece?

by SnarkSD on Jan 26, 2012 10:06 AM EST reply actions  

Not at all. That’s why I posted it, so people can do the calculations themselves.

by Eric T. on Jan 26, 2012 10:35 AM EST up reply actions  

I’ve been discussing with snark and from reading this, the weights are chosen to maximize the Rsquared/reliability in one given season. But I don’t follow why the analysis is accepted if it is based on the current or single season and not shown predictive over a few seasons.

I’d expect there will be sizeable variation in those weights applied to the various fenwicks in other seasons if we are maximizing Rsquared. That is the weight will change each season. Alternatively, we can optimize the weights across various seasons and see what the outcome is for Rsquared/reliability (at least this was how I’ve dealt with multi-regression analysis with season to season data).

by jeffgm on Jan 30, 2012 3:49 PM EST reply actions  

the weights are chosen to maximize the Rsquared/reliability in one given season

No, sorry if I wasn’t clear on this. The weights are based on the league average TOI over the last four years — for example, the average team spends 3.75 minutes per game up by 2, so the up-by-2 Fenwick was given a weight of 3.75.

I confused matters in the last two paragraphs by mentioning that I also did a regression to try to optimize the weights, but the results didn’t come out too different and so I didn’t use that at all.

Having selected the weights based on the league average TOI, I then looked at the reliability over the previous three seasons, and reported those numbers in this article. Nothing here is based on a single season.

by Eric T. on Jan 30, 2012 4:31 PM EST up reply actions  


User Tools

All the Philadelphia Flyers news and commentary that's fit to print.

FanPosts

Community blog posts and discussion.

Recommended FanPosts

Flyers-orange-crush_small
NHL Draft 2012: Options on defense in the first round

Recent FanPosts

Patal_small
Andrew Johnston Scouting Report: A first-hand look at the Flyers newest prospect
Small
What being a Hockey fan means to me.
Small
Could Parise and Weber be in Flyers' future?
Mick_jagr_2_small
SB Nation app
Small
Hockey Stick Help
Copy_of_137494800_slide_small
The 2011-12 Philadelphia Flyers season in GIFs
37938_10150235117290484_539355483_13709206_6888144_n_small
Ilya Bryzgalov has chance to take shot at Flyers fans, does
Small
Can the Flyers win the Cup with Bryz?
Carcillo_small
Flyers in the Off-Season

+ New FanPost All FanPosts >


Managing Editor

Screen_shot_2012-01-09_at_12 Travis Hughes

Associate Editors

67865_878600804923_14200876_46395212_2220_n_small Geoff Detweiler

Headshot2_film_grain_small Ben Rothenberg

Soccer_face_small Eric T.

Contributors

163830_478172269164_824914164_5517468_4313370_n_small ToddtheFox

Clarke-tee_small KreiderDesigns

D150_small Teemu H