Board Bets

Thursday, June 2, 2011

xWHIP and eFIP

The following comes from my latest article on The Hardball Times. All statistics are current through May 27, 2011.

Sabermetricians have shown that once the ball is out of the hands of the pitcher, the pitcher has very little control over the outcome of the ball put into play.

DIPS theory tells us that a pitcher controls a few things about the outcome of an at-bat, each to a variable degree. The pitcher has the most control over the elements of the game that only involve himself, and omit others. A pitcher is in almost absolute control over the general location of his pitch. There are some marginal or unpredictable variants such as temperature, weather, wind speed and wind direction that factor into pitch location, but a pitcher who does not hit his spots can generally only blame himself. He either gripped the ball incorrectly, released it too late, did not properly adjust his throw for weather condition, "has the jitters," just can't pitch, etc. A pitcher likewise almost completely (though less completely than location) controls intentional walks, which essentially eliminate the batter from the equation of the outcome. Though players like Miguel Cabrera and Jeff Francouer come to mind as the rare player who interferes with the pitcher's attempt to intentionally walk them, it is generally true that if a pitcher wants to intentionally walk a batter, it will happen.

Once the batter comes into the equation, the pitcher loses his control over the outcome. Once the pitch is released from his hands, he has done all he can do. It is then in the batter's hand as to whether contact is made, where on the ball the contact is made, how hard the ball is hit, and whether or not it is pulled, amongst various other variables. In this regard, a pitcher has some, but not total, control over unintentional walks and strikeouts. The pitcher tries to fool the batter, but the batter may or may not buy the bait. The fielders are irrelevant before the ball is put into play, so the outcome is largely dominated by an exercise in game theory between the batter and pitcher.

A pitcher also controls the tendency of the ball to be on the ground or in the air. As noted above, once the ball is released from the pitcher's hand, what happens to it is ultimately a question of what the batter does. A pitcher can throw the ball with heavy sink to induce ground balls, or throw it high in the zone to induce a popup, but the hitter, not the pitcher, ultimately controls the angle of trajectory, the force of contact, and the direction of the ball off the bat. Once contact is made, the ball is either put in play, in which case the pitcher's fielders have the ultimate control over what happens next, or the ball is foul, in which case the batter-pitcher game repeats, or the ball is a home run, over which the pitcher has some, but not ultimate, control. (This is the theory behind xFIP and using a normalized home run rate in lieu of the pitcher's actual home run rate as traditionally used in FIP.)

BABIP research by ball in play type out indicates that league fielding per batted ball type tends to be relatively stable. It tends to fluctuate annually, but only slightly and negligibly. For example, the expected hits rate on ground balls in play between 2004 and 2008 was .239. From 2008 to 2010, it was .236. So far this year, it is .238. The same is true for infield fly balls, line drives and outfield fly balls (though the latter two tend to fluctuate more, which is probably the result of scorer bias*). It is also true that line drive rate seems to remain relatively stable and out of pitcher control as well in the long run. Only a handful of pitchers have cumulative line drive rates that are not between 18 and 20 percent over the past five years, and most of those pitchers tend to be extreme batted-ball players. Even in the outlier, however, no pitcher has a line drive rate below 16 percent or above 22 percent. Noting this, you can probably say that Mat Latos' 9.2 percent line drive rate and Travis Woods' 24.5 percent line drive rate on the season are either the result of bad luck or funky scoring and that we should expect such to persist in the future.

*Note: scorer bias might make one skeptical of batted ball-based evaluation/prediction tools, but it is important to note that I am not, nor are most, preaching a black-and-white bible of truth with sabermetrics and sabermetric tools, but rather commenting upon the tendency of outcome or a rough baseline from which to make better, more informed decisions. Tools like tRA and the xWHIP Calculator are hardly perfect, but they lead to more informed analysis and decision-making.

From this research, I stood on the shoulders of men much smarter than myself and created the Expected WHIP (xWHIP) Calculator. (You can download the beta version for xWHIP3 by clicking here.) In case you are not familiar with how the xWHIP Calculator works, let me give you the quick rundown of how to use it and what it does. Refer to the picture of the beta of version 3.0 below (note: the 2008-2010 environment is loaded in the hits/outs created field; I do not have the runs created data for 2008-2010 to provide at this time).


The first and only manual step is data entry. Begin by entering data into the gray cells by using the player's page on Fangraphs. The xWHIP Calculator is calibrated to Baseball Info Solutions (BIS) batted ball data, and, to avoid unnecessary scorer bias through consistency, you need to enter BIS data, which is what is available on Fangraphs. You can also change the pink cells of "specialized data points," but will likely require information that is not publicly available to properly modify such. Hence, you should probably leave them untouched (well, unless you want to use a player's career home run per outfield flyball rate in lieu of the league average mark*).

*If you modify the HR/OFFB% cell, do not change the park factor cell, or you risk double counting.

Once you've entered the data, the rest is all automatic, courtesy of my tireless hours of work in creating the xWHIP Calculator. My xWHIP formula first adds up all the batted ball data, and then normalizes it based on a regressed line drive rate. I use 19 percent, or about the league average. Then, with my new "normalized" batted ball distribution, I multiply each ball in play form by its expected hits rate. This gives you expected hits. The calculator also also calculate expected home runs based on the normalized data.

Once a normalized batted ball distribution is created, the xWHIP Calculator also calculates an expected innings total (xIP). I calculate expected innings because actual innings pitched, like hits, is a function not only of player skill, but fielder interference/assistance and other statistical noise. A great or poor play is the difference between an extra batter faced and the end of the inning*. Expected innings is calculated by multiplying events by expected outs created by event. For example, a ground ball put in to play tends to result in 0.808 outs per occurrence. Caught stealing and pick off rates are something that varies by catcher and pitcher, but calculating such to be effectively utilized is something that I am not properly equipped to do. Hence, I use a league-average rate of .02 outs created per base runner to account for expected pickoffs and players who might get caught stealing. This formula gives me expected outs, which I then divide by three.

*This is why K% is more stable, indicative and, as a predictive/evaluational tool, valuable than K/9.

Using expected hits, expected home runs, and expected innings, as well as the other calculated data, we get a few valuable output points from the xWHIP Calculator. The primary purpose of the calculator and its calculations is to give a pitcher's expected WHIP. xWHIP may not be important from a purely sabermetrics standpoint, but fantasy baseball players find it quite useful. xWHIP is calculated in three ways. First, xWHIP1 calculates a pitcher's expected WHIP using actual innings pitched. Second, xWHIP2 calculates a pitcher's expected WHIP using expected innings (xIP). Finally, quick xWHIP, or qxWHIP, calculates a player's expected WHIP based purely on a player's actual innings pitched, strikeout total, and WHIP. qxWHIP was created by Alex Hambrick, and the theory behind it is explained here.

The xWHIP Calculator also has a quick-and-dirty defensive adjustment for pitchers that converts a team's defensive results into an expected "hits saved" compared to the hypothetical "league-average defense" per inning. This defensive adjustment has severe limitations (defense is hardly uniform infield-to-outfield, or player-to-player), and is optional, but it gives some sense of how a team's overall defense can be roughly expected to affect a player's "true talent" line.

In addition to xWHIP, however, the new versions of my xWHIP Calculator also tabulate two mainstream ERA estimators using normalized data. The first ERA estimator is eFIP, which is based on xFIP. xFIP is traditionally calculated by subtracting two times a pitcher's strikeout total by the sum of three times a pitcher's walk total plus 13 times .105 times that player's flyball total, all divided by innings pitched. The resulting figure is then added to some constant, usually 3.2, to scale xFIP to look like ERA. xFIP tends to be my ERA estimator of choice, but I have several problems with the popular version of the formula. First, it uses a pitcher's flyball total to calculate expected home runs. Flyball total is a composite of outfield fly balls and infield fly balls. As popups can never be home runs, it is silly to include them. In addition, home-run-per-outfield-fly-ball rates tend to be more stable over the long term than home-run-per-fly-ball rates.

Second, and perhaps this is offset by including popups in the traditional expected home run formula, xFIP does not account for line-drive home runs. Line-drive home runs are few and far between, but they do occur a few times per 100 hits that are scored as line drives.

Third, xFIP is tabulated irrespective of expected flyball or outfield flyball rate. Pitchers, as noted above, do not seem to have much control over line-drive rate. If a pitcher, particularly in smaller samples (which give you less valuable data outcomes), has an atypically low or high line-drive rate, then a pitcher's xFIP is skewed accordingly. The difference is, at most, a couple of home runs, but, like my infield flyball grudge with traditional xFIP, why use it if you don't have to?

Fourth, xFIP does not account for park factors. Each of the 30 major league parks has different park dimensions that uniquely affect home run totals. Petco and Busch Stadium affect pitcher's home runs allowed totals radically different than do the parks of Chicago. Players only play about 50 percent of their games at home, so you need to modify park factors accordingly, but the difference in expected ERA between Busch Stadium and Coors Field is substantial enough that it requires accounting, though that causes the xFIP formula to further sacrifice simplicity.

xFIP is a nice formula because it is simple and easy to calculate. Normally, accounting for my gripes would sacrifice much of xFIP's simplicity appeal. However, given all the calculations the xWHIP Calculator makes, calculating a modified expected FIP to correct for my gripes is simple. I term this modified xFIP formula "eFIP."

In addition to eFIP, the newest versions of the xWHIP Calculator will also calculated batted ball normalized versions of tRA or tERA, which I have termed "EXTRA." EXTRA is calculated the exact same way as tRA, but it uses the pitcher's normalized, not actual, batted ball data as the inputs.

Now that you know the parameters, let's look at some of the major league's leaders and losers in xWHIP, eFIP, and EXTRA using 2011's runs environment and statistics through May 27, 2011. You can download the data file by clicking here.

Before reviewing the data, take note of the following. First, the following calculations use major league outs/runs/hits numbers, not league-specific numbers, so American League pitchers will tend to fare worse than these numbers, while National League hitters will tend to perform better. Second, changes in a player's strikeout (xWHIP2) or walk rate (xWHIP1, xWHIP2) would have an appreciable effect on a pitcher's expected WHIP. Third, while only starting pitchers (pitchers with at least one game started) are included in my data file, with the exception of Zack Greinke, only starting pitchers with 30 or more expected innings are included in my leaderboard (136 starting pitchers qualify). Fourth, I am calculating WHIP with unintentional walks (BB-IBB+HBP, or uBB); uBB better evaluates a pitcher's control and expected baserunners. Finally, the league average xWHIP and eFIP are 1.32 and 4.00, respectively. The actual current major league average WHIP and FIP are 1.30 and 3.95, respectively.

First, the WHIP under-performers to date (calculated using "actual WHIP" (see above) minus the mean of a pitcher's xWHIP1 and xWHIP2):
Name                   xIP        aWHIP     xWHIP     dWHIP
Davies, Kyle 44.54 1.90 1.57 0.34
Lackey, John 42.57 1.88 1.63 0.25
Reyes, Jo-Jo 55.06 1.66 1.42 0.24
Arroyo, Bronson 67.25 1.52 1.30 0.21
Greinke, Zack 29.99 1.14 0.93 0.21
Capuano, Chris 57.87 1.48 1.28 0.20
Dempster, Ryan 66.79 1.56 1.36 0.19
Garza, Matt 59.54 1.35 1.16 0.19
Holland, Derek 61.03 1.58 1.39 0.18
Jackson, Edwin 70.82 1.50 1.33 0.17
Tillman, Chris 50.41 1.67 1.50 0.17
Scherzer, Max 67.28 1.48 1.32 0.17
Carpenter, Chris 73.60 1.43 1.28 0.15
Lee, Cliff 78.18 1.25 1.10 0.15
Myers, Brett 69.78 1.51 1.39 0.13
McDonald, James 54.30 1.52 1.40 0.12
Norris, Bud 68.42 1.30 1.18 0.11
Dickey, R.A. 61.18 1.60 1.49 0.11
Francis, Jeff 69.59 1.40 1.30 0.10
Wood, Travis 62.79 1.41 1.31 0.10
Hudson, Dan 72.45 1.33 1.23 0.10
Rodriguez, Wandy 67.84 1.32 1.22 0.10
Lilly, Ted 63.55 1.34 1.25 0.09
Duensing, Brian 54.92 1.44 1.36 0.09
Morrow, Brandon 40.47 1.38 1.30 0.08
Baker, Scott 61.52 1.30 1.22 0.07
Stauffer, Tim 65.87 1.32 1.25 0.07
Niese, Jon 62.10 1.44 1.38 0.06
Volstad, Chris 52.02 1.44 1.38 0.06
Danks, John 66.59 1.40 1.34 0.06
Harang, Aaron 61.74 1.32 1.26 0.06
Narveson, Chris 57.44 1.35 1.29 0.06

Much of this leaderboard is populated with under-inspiring pitchers who, while unlikely, have pitched pretty poorly this year and are hardly worth a spot on your bench. Case in point: the injured John Lackey and "immutable" Kyle Davies. A few names do stand out, however. I think the ship sailed on Ryan Dempster (whose numbers are infinitely better if you omit his 0.1 inning pitched disaster at Arizona) after his 11-strikeout performance on May 13, but maybe some owner has not been paying close enough attention this past month (e.g., people in college). We all know Cliff Lee and Matt Garza have had their share of bad luck this year, but what about Chris Carpenter and Zack Greinke? Greinke's performance to date puts him in company with the top three guys in the league, but his 5.79 ERA has been ugly. If any owner is having second thoughts about the Royals ex-Ace, or is willing to deal him at market value, I'd strongly considering biting. And what about Bud Norris? I wrote about him last week, but his ownership rate is still below 50 percent (it actually went down a notch). I think a lot of people are overlooking just how good Norris has been this year. Jeff Francis and Travis Wood are a pair of pitchers who could help you in other categories without hurting your future WHIP.

Next, the WHIP over-performers to date (calculated using "actual WHIP" (see above) minus the mean of a pitcher's xWHIP1 and xWHIP2):
Name                   xIP        aWHIP     xWHIP     dWHIP
Tomlin, Josh 60.26 0.93 1.24 -0.32
Lohse, Kyle 67.89 0.91 1.22 -0.30
Humber, Philip 56.67 0.98 1.28 -0.30
Britton, Zachary 59.14 1.12 1.38 -0.26
Ogando, Alexi 54.57 0.94 1.18 -0.25
Johnson, Josh 56.03 0.96 1.19 -0.23
Hudson, Tim 62.97 1.14 1.35 -0.22
Morton, Charlie 58.11 1.31 1.52 -0.21
Harrison, Matt 55.43 1.25 1.46 -0.20
Chacin, Jhoulys 64.78 1.10 1.30 -0.20
Maholm, Paul 66.89 1.16 1.36 -0.20
Beckett, Josh 58.97 0.98 1.18 -0.19
Penny, Brad 59.28 1.32 1.51 -0.19
Hochevar, Luke 70.45 1.23 1.41 -0.18
Liriano, Francisco 46.26 1.48 1.66 -0.18
Verlander, Justin 75.59 0.96 1.14 -0.17
Jurrjens, Jair 54.41 1.02 1.19 -0.17
McClellan, Kyle 61.16 1.21 1.38 -0.17
Haren, Dan 77.03 0.89 1.06 -0.16
Kennedy, Ian 71.84 1.10 1.24 -0.14
Coke, Phil 49.98 1.27 1.41 -0.14
Moseley, Dustin 57.56 1.23 1.37 -0.14
Burnett, A.J. 65.88 1.29 1.42 -0.14
Hanson, Tommy 62.63 1.09 1.22 -0.13
Carmona, Fausto 70.32 1.22 1.34 -0.13
Correia, Kevin 68.79 1.19 1.31 -0.12
Billingsley, Chad 67.93 1.26 1.37 -0.12
Cahill, Trevor 69.18 1.23 1.35 -0.11
Pineda, Michael 61.86 0.99 1.11 -0.11
Lincecum, Tim 74.38 1.05 1.16 -0.11
Hellickson, Jeremy 55.45 1.24 1.35 -0.11
Weaver, Jered 82.98 0.96 1.06 -0.10

Here we find a lot of players with BABIP-deflated ERAs who are on the Atkins diet when it comes to strikeouts: Kyle Lohse and Zach Britton's combined strikeouts per nine rate (9.81) is equal to that of Bud Norris. Most of these "trailers" tend to be groundball pitchers because groundballs, while having a lower expected runs outcome per event, have a higher hits-resulting rate. A year of xWHIP has taught me that ERA and WHIP tend to be inversely related to groundball and flyball rates. Alexei Ogando throws hard, but can you really trust a flyball pitcher (64.5 percent AO%) in Texas (inflates home runs by 10 percent)? Ogando's SwStr% (8.9 percent) indicates he is capable of slightly better than league-average strikeout totals. As you might notice not all players on this board are "bad" or have "bad" expected WHIPs (e.g., Josh Beckett). This is only a tool to help figuring out who has been under/over-performing, and an under-performer may very well be worth keeping.

Then we have the pitchers who are secretly better than their listed FIP.
Name               xIP      aFIP    EXFIP   dFIP
Karstens, Jeff 45.60 4.92 3.57 1.35
Volquez, Edinson 51.36 5.77 4.50 1.27
Arroyo, Bronson 67.25 5.48 4.33 1.15
Gorzelanny, Tom 52.31 5.28 4.14 1.14
Hochevar, Luke 70.45 5.46 4.35 1.11
Dempster, Ryan 66.79 4.80 3.78 1.03
Myers, Brett 69.78 5.44 4.49 0.95
Greinke, Zack 29.99 3.06 2.18 0.88
McDonald, James 54.30 5.11 4.29 0.82
Lester, Jon 68.85 4.25 3.48 0.77
Capuano, Chris 57.87 4.61 3.86 0.75
Bedard, Erik 51.52 4.32 3.68 0.65
O'Sullivan, Sean 50.48 6.26 5.61 0.64
Lewis, Colby 64.90 5.26 4.62 0.64
Latos, Mat 53.83 4.35 3.80 0.55
Buchholz, Clay 58.87 4.77 4.25 0.52
Romero, Ricky 63.02 3.98 3.48 0.50
Baker, Scott 61.52 4.19 3.70 0.49
Pelfrey, Mike 64.67 5.07 4.59 0.48
Carmona, Fausto 70.32 4.29 3.82 0.47
Colon, Bartolo 57.80 3.79 3.32 0.47
Blackburn, Nick 62.39 4.65 4.19 0.47
Norris, Bud 68.42 3.75 3.30 0.45
Chen, Bruce 41.62 5.12 4.68 0.45
Arrieta, Jake 60.54 4.66 4.23 0.43
Chacin, Jhoulys 64.78 3.96 3.56 0.40
Scherzer, Max 67.28 4.36 3.98 0.39
Lilly, Ted 63.55 4.67 4.28 0.39
Dickey, R.A. 61.18 4.75 4.37 0.38
Gallardo, Yovani 68.64 4.27 3.91 0.36
Litsch, Jesse 46.74 4.69 4.35 0.34
Kuroda, Hiroki 70.70 4.15 3.81 0.34
Rodriguez, Wandy 67.84 4.05 3.71 0.33
Liriano, Francis 46.26 5.44 5.11 0.33
Volstad, Chris 52.02 4.24 3.91 0.33

If there is any pitcher to avoid on this list, it's Edinson Volquez. I took a lot of flack being a vocal Volquez hater this offseason, and while it's only been 51 innings, I really want to say "I told you so" about how bad his control was going to burn him this year. Volquez has a 4.16 xFIP, so a lot of people might be tempted to buy, but even if you tinker with his batted ball distribution a bit, his expected FIP is putrid. A 4.50 FIP would be "average" by standards two or three years ago, but in the new era of the pitcher, it's trade-or-cut material. Ryan Dempster's a name on this list I really like, but, as noted above, the ship has probably sailed on him by now. Same goes with Erik Bedard, who has been lights out over his past five or so turns. And what about Bartolo Colon? Is he the real deal after injecting cheeseburgers from his belly into his elbow? No matter which you choose, all the metrics seem to check out (3.77 ERA, 1.20 WHIP, 3.61 FIP, 2.90 xFIP, 3.86 eFIP, 1.20 WHIP, 1.28 xWHIP), but something does not smell right. A 5.9 percent SwStr% ties for his second-lowest mark since 2002 and is well below his post-2002 average of 7.6 percent, but his strikeout rate (23.6 percent) is a career second-best at age 38? I'd use the "it checks out" line to hedge your risk.

What's up with Jeff Karstens? He's been good on the surface (3.57 ERA, 1.28), but regular FIP says look out (4.70). Karsten's improved strikeout rate (18.9 percent this season, 12.2 percent career) makes sense if you look at batters' swing-and-miss rate against him (9.0 percent this year, 7.1 percent career, 8.4 percent major league average), but what is causing it? It's not his velocity (88.4 MPH fastball this year, 88.5 career) or pitch usage (none of his four usage rates varies by more than a few percent points this season). His change-up has been wicked awesome, but both his fastball and slider (thrown almost a combined three-fourths of the time) have fared poorly both this year and for his career. Tread at your own caution.

Chris Capuano, on the other hand, has been secretly good for the Mets, even if the results do not say so. His ERA (4.94) and WHIP (1.45) have been atrocious, but his peripherals (3.86 eFIP, 1.28 xWHIP, 7.74 K/9, 19.4 percent K%) say this waiver wire fodder (2 percent Yahoo ownership) might be worth a careful look.

And the guys whose FIPs are not telling the whole story. Keep in mind that in the second "year of the pitcher," ERAs are not what they used to seem.
Name               xIP      aFIP    EXFIP  dFIP
Bergesen, Brad 51.38 3.90 5.15 -1.26
Morrow, Brandon 40.47 2.53 3.63 -1.09
Tillman, Chris 50.41 3.85 4.89 -1.04
McCarthy, Brando 62.85 2.67 3.60 -0.93
Jurrjens, Jair 54.41 2.97 3.85 -0.88
Coke, Phil 49.98 3.83 4.65 -0.81
Hudson, Dan 72.45 2.88 3.66 -0.78
Buehrle, Mark 72.50 3.82 4.59 -0.76
Zimmermann, Jord 60.00 2.98 3.73 -0.75
Sabathia, CC 77.83 2.99 3.70 -0.71
Fister, Doug 63.85 3.57 4.27 -0.70
Garza, Matt 59.54 2.01 2.71 -0.69
Lohse, Kyle 67.89 3.23 3.91 -0.68
Bumgarner, Madis 57.50 3.16 3.84 -0.67
Zambrano, Carlos 66.71 3.94 4.57 -0.62
Humber, Philip 56.67 3.77 4.35 -0.59
Hernandez, Livan 68.75 3.94 4.47 -0.53
Halladay, Roy 86.09 1.93 2.46 -0.53
Billingsley, Cha 67.93 3.29 3.82 -0.53
Johnson, Josh 56.03 2.72 3.24 -0.52
Masterson, Justi 64.33 3.23 3.72 -0.49
Marquis, Jason 63.53 3.80 4.27 -0.47
Weaver, Jered 82.98 2.74 3.21 -0.46
Oswalt, Roy 44.97 3.29 3.73 -0.44
Kennedy, Ian 71.84 3.41 3.84 -0.42
Beckett, Josh 58.97 3.03 3.45 -0.42
Pineda, Michael 61.86 2.84 3.25 -0.42
Morton, Charlie 58.11 3.91 4.29 -0.38
Reyes, Jo-Jo 55.06 4.25 4.61 -0.36
Maholm, Paul 66.89 3.60 3.96 -0.36
Chatwood, Tyler 53.24 5.09 5.45 -0.36
Nova, Ivan 54.62 4.61 4.96 -0.36

My mother always told me to never trust Brandon Morrow. As I noted last week, you're better off selling him at cost to another saber-friendly owner and investing the funds elsewhere. Jordan Zimmerman is much better than he's been or his presence here indicates, and I would sit tight with him. Is Justin Masterson finally putting it all together as a post-hype sleeper? 3.61 xFIP versus lefties (165 batters) and 3.26 xFIP versus righties (110 batters). Sorry Orioles fans clinging to old Bedard jerseys; Chris Tillman is not the stud or the sleeper we thought he was. Ditto on Brad Bergesen, who I once had a fantasy man crush on several years back. After 10 years, you should not be fooled by Jason Marquis. He tends to start things off well with new teams, but it always ends badly. Has Doug Fister been ol' reliable for you thus far? Don't expect it to persist, as he's more likely to take his hand and slap your fantasy team with it in the future. I've shaken off my preseason (Phil) Coke addiction, and what of former top Twins draftee Phil Humber? 2.85 ERA, 3.77 FIP looks nice for something you plucked off the waiver wire for a stream that never seemed to end in a drop, but lackluster strikeouts plus league-average WHIP plus poor ERA prospects equal trade toss in to get a better deal done. Finally, Livan Hernandez is not even worth mentioning.

Next time out (this upcoming Monday), we'll look at EXTRA, actual ERA and actual tRA to date. Until then, as always, leave your love/hate in the comments below.

No comments:

Post a Comment

Please be kind, rewind.