diff --git a/doc/TODO b/doc/TODO
--- a/doc/TODO
+++ b/doc/TODO
@@ -5,3 +5,15 @@
    longer takes 10 minutes to import (Postgres only?).
 
 3. Add support the the second type of weatherxml (see man page).
+
+4. There are a few remaining document types that we need to parse
+   before "version one point oh." This list refers to an
+   old proprietary implementation, sorry:
+
+     * AutoRaceResultsXML
+     * jfilexml
+     * Schedule_Changes_XML
+     * GameInfoXML
+     * SportInfoListing
+
+5. Try mass import of Auto_Racing_Schedule_XML.
diff --git a/doc/dbschema/Auto_Racing_Schedule_XML.png b/doc/dbschema/Auto_Racing_Schedule_XML.png
new file mode 100644
Binary files /dev/null and b/doc/dbschema/Auto_Racing_Schedule_XML.png differ
diff --git a/doc/dbschema/scoresxml.png b/doc/dbschema/scoresxml.png
new file mode 100644
Binary files /dev/null and b/doc/dbschema/scoresxml.png differ
diff --git a/doc/htsn-importrc.example b/doc/htsn-importrc.example
--- a/doc/htsn-importrc.example
+++ b/doc/htsn-importrc.example
@@ -41,9 +41,10 @@
 
 # How verbose should the logs be? Valid levels are,
 #
-#   "INFO", "WARNING", "ERROR"
+#   "DEBUG", "INFO", "WARNING", "ERROR"
 #
-# (there are others, but we don't emit them.)
+# (there are others, but we don't emit them.) The debug output is
+# extremely verbose and will not be written to syslog even if you try.
 #
 # Default: "INFO"
 #
diff --git a/doc/man1/htsn-import.1 b/doc/man1/htsn-import.1
--- a/doc/man1/htsn-import.1
+++ b/doc/man1/htsn-import.1
@@ -48,16 +48,20 @@
 The XML document types obtained from the feed are uniquely identified
 by their DTDs. We currently support documents with the following DTDs:
 .IP \[bu] 2
-Heartbeat.dtd
+Auto_Racing_Schedule_XML.dtd
 .IP \[bu]
-newsxml.dtd
+Heartbeat.dtd
 .IP \[bu]
 Injuries_Detail_XML.dtd
 .IP \[bu]
 injuriesxml.dtd
 .IP \[bu]
+newsxml.dtd
+.IP \[bu]
 Odds_XML.dtd
 .IP \[bu]
+scoresxml.dtd
+.IP \[bu]
 weatherxml.dtd
 
 .SH DATABASE SCHEMA
@@ -152,10 +156,11 @@
 Default: none
 
 .IP \fB\-\-log-level\fR
-How verbose should the logs be? We log notifications at three levels:
-INFO, WARN, and ERROR. Specify the \(dqmost boring\(dq level of
+How verbose should the logs be? We log notifications at four levels:
+DEBUG, INFO, WARN, and ERROR. Specify the \(dqmost boring\(dq level of
 notifications you would like to receive (in all-caps); more
-interesting notifications will be logged as well.
+interesting notifications will be logged as well. The debug output is
+extremely verbose and will not be written to syslog even if you try.
 
 Default: INFO
 
diff --git a/htsn-import.cabal b/htsn-import.cabal
--- a/htsn-import.cabal
+++ b/htsn-import.cabal
@@ -1,5 +1,5 @@
 name:           htsn-import
-version:        0.0.2
+version:        0.0.4
 cabal-version:  >= 1.8
 author:         Michael Orlitzky
 maintainer:	Michael Orlitzky <michael@orlitzky.com>
@@ -16,11 +16,13 @@
   doc/TODO
   makefile
   schema/*.dtd
+  schemagen/Auto_Racing_Schedule_XML/*.xml
   schemagen/Heartbeat/*.xml
   schemagen/injuriesxml/*.xml
   schemagen/Injuries_Detail_XML/*.xml
   schemagen/newsxml/*.xml
   schemagen/Odds_XML/*.xml
+  schemagen/scoresxml/*.xml
   schemagen/weatherxml/*.xml
   test/shell/*.test
   test/xml/*.xml
@@ -85,8 +87,8 @@
     groundhog-th                == 0.4.*,
     MissingH                    == 1.2.*,
     old-locale                  == 1.0.*,
-    tasty                       == 0.7.*,
-    tasty-hunit                 == 0.4.*,
+    tasty                       == 0.8.*,
+    tasty-hunit                 == 0.8.*,
     time                        == 1.4.*,
     transformers                == 0.3.*,
     tuple                       == 0.2.*
@@ -109,11 +111,13 @@
     TSN.DbImport
     TSN.Picklers
     TSN.XmlImport
+    TSN.XML.AutoRacingSchedule
     TSN.XML.Heartbeat
     TSN.XML.Injuries
     TSN.XML.InjuriesDetail
     TSN.XML.News
     TSN.XML.Odds
+    TSN.XML.Scores
     TSN.XML.Weather
     Xml
 
@@ -160,8 +164,8 @@
     groundhog-th                == 0.4.*,
     MissingH                    == 1.2.*,
     old-locale                  == 1.0.*,
-    tasty                       == 0.7.*,
-    tasty-hunit                 == 0.4.*,
+    tasty                       == 0.8.*,
+    tasty-hunit                 == 0.8.*,
     time                        == 1.4.*,
     transformers                == 0.3.*,
     tuple                       == 0.2.*
@@ -232,8 +236,8 @@
     MissingH                    == 1.2.*,
     old-locale                  == 1.0.*,
     process                     == 1.1.*,
-    tasty                       == 0.7.*,
-    tasty-hunit                 == 0.4.*,
+    tasty                       == 0.8.*,
+    tasty-hunit                 == 0.8.*,
     time                        == 1.4.*,
     transformers                == 0.3.*,
     tuple                       == 0.2.*
diff --git a/makefile b/makefile
--- a/makefile
+++ b/makefile
@@ -43,7 +43,7 @@
 #
 dist:
 	runghc Setup.hs configure --prefix=/
-	runghc Setup.hs sdist
+	TAR_OPTIONS="--format=ustar" runghc Setup.hs sdist
 
 hlint:
 	hlint --ignore="Use camelCase"     \
diff --git a/schema/Auto_Racing_Schedule_XML.dtd b/schema/Auto_Racing_Schedule_XML.dtd
new file mode 100644
--- /dev/null
+++ b/schema/Auto_Racing_Schedule_XML.dtd
@@ -0,0 +1,26 @@
+<!ELEMENT XML_File_ID (#PCDATA)>
+<!ELEMENT heading (#PCDATA)>
+<!ELEMENT category (#PCDATA)>
+<!ELEMENT sport (#PCDATA)>
+<!ELEMENT Title (#PCDATA)>
+<!ELEMENT Complete_Through (#PCDATA)>
+<!ELEMENT RaceID (#PCDATA)>
+<!ELEMENT Race_Date (#PCDATA)>
+<!ELEMENT Race_Time (#PCDATA)>
+<!ELEMENT RaceName (#PCDATA)>
+<!ELEMENT TrackName (#PCDATA)>
+<!ELEMENT Location (#PCDATA)>
+<!ELEMENT TV_Listing (#PCDATA)>
+<!ELEMENT Laps (#PCDATA)>
+<!ELEMENT TrackLength (#PCDATA)>
+<!ELEMENT FinishPosition (#PCDATA)>
+<!ELEMENT DriverID (#PCDATA)>
+<!ELEMENT Name (#PCDATA)>
+<!ELEMENT LeadingLaps (#PCDATA)>
+<!ELEMENT Earnings (#PCDATA)>
+<!ELEMENT Status (#PCDATA)>
+<!ELEMENT RaceResultsListing ( ( FinishPosition, DriverID, Name, LeadingLaps, Laps, Earnings, Status ) )>
+<!ELEMENT RaceResults ( RaceResultsListing* )>
+<!ELEMENT Listing ( ( RaceID, Race_Date, Race_Time, RaceName, TrackName, Location, TV_Listing, Laps, TrackLength, RaceResults ) )>
+<!ELEMENT time_stamp (#PCDATA)>
+<!ELEMENT message ( ( XML_File_ID, heading, category, sport, Title, Complete_Through, Listing*, time_stamp ) )>
diff --git a/schema/scoresxml.dtd b/schema/scoresxml.dtd
new file mode 100644
--- /dev/null
+++ b/schema/scoresxml.dtd
@@ -0,0 +1,27 @@
+<!ELEMENT XML_File_ID (#PCDATA)>
+<!ELEMENT heading (#PCDATA)>
+<!ELEMENT game_id (#PCDATA)>
+<!ELEMENT schedule_id (#PCDATA)>
+<!ELEMENT tsnupdate (#PCDATA)>
+<!ELEMENT category (#PCDATA)>
+<!ELEMENT sport (#PCDATA)>
+<!ELEMENT seasontype (#PCDATA)>
+<!ELEMENT vteam (#PCDATA)>
+<!ELEMENT hteam (#PCDATA)>
+<!ELEMENT vscore (#PCDATA)>
+<!ELEMENT hscore (#PCDATA)>
+<!ELEMENT time_r (#PCDATA)>
+<!ELEMENT status (#PCDATA)>
+<!ELEMENT game ( ( vteam, hteam, vscore, hscore, time_r?, status, notes? ) )>
+<!ELEMENT time_stamp (#PCDATA)>
+<!ELEMENT message ( ( XML_File_ID, heading, game_id, schedule_id, tsnupdate?, category, sport, location*, seasontype, game, time_stamp ) )>
+<!ELEMENT city (#PCDATA)>
+<!ELEMENT state (#PCDATA)>
+<!ELEMENT country (#PCDATA)>
+<!ELEMENT location ( ( city, state, country ) )>
+<!ELEMENT notes (#PCDATA)>
+
+<!ATTLIST vteam id CDATA #REQUIRED>
+<!ATTLIST hteam id CDATA #REQUIRED>
+<!ATTLIST status numeral CDATA #REQUIRED>
+<!ATTLIST status type CDATA #REQUIRED>
diff --git a/schemagen/Auto_Racing_Schedule_XML/20136714.xml b/schemagen/Auto_Racing_Schedule_XML/20136714.xml
new file mode 100644
--- /dev/null
+++ b/schemagen/Auto_Racing_Schedule_XML/20136714.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Leader 1.0/EN" "Auto_Racing_Schedule_XML.dtd"><message><XML_File_ID>20136714</XML_File_ID><heading>BFX%SCHEDULE</heading><category>Statistics</category><sport>NASCAR</sport><Title>2013 NASCAR Sprint Cup Schedule</Title><Complete_Through>Complete through </Complete_Through><Listing><RaceID>1492</RaceID><Race_Date>02/16/2013</Race_Date><Race_Time>08:10 PM</Race_Time><RaceName>Sprint Unlimited at Daytona</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>FOX</TV_Listing><Laps>75</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>40</LeadingLaps><Laps>75</Laps><Earnings>205,075</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>2</LeadingLaps><Laps>75</Laps><Earnings>101,325</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>75</Laps><Earnings>61,325</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>5</LeadingLaps><Laps>75</Laps><Earnings>52,325</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>26</LeadingLaps><Laps>75</Laps><Earnings>51,300</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1493</RaceID><Race_Date>02/21/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Budweiser Duel 1</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>SPEED</TV_Listing><Laps>60</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>23</LeadingLaps><Laps>60</Laps><Earnings>57,792</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>42,789</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>37,789</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>23,789</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>30,789</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1494</RaceID><Race_Date>02/21/2013</Race_Date><Race_Time>04:00 PM</Race_Time><RaceName>Budweiser Duel 2</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>SPEED</TV_Listing><Laps>60</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>19</LeadingLaps><Laps>60</Laps><Earnings>58,977</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>43,963</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1321</DriverID><Name>Austin Dillon</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>38,963</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>1</LeadingLaps><Laps>60</Laps><Earnings>33,963</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>31,963</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1495</RaceID><Race_Date>02/24/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Daytona 500</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>FOX</TV_Listing><Laps>200</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>17</LeadingLaps><Laps>200</Laps><Earnings>1,525,275</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>1,104,814</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>32</DriverID><Name>Mark Martin</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>817,013</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>13</LeadingLaps><Laps>200</Laps><Earnings>707,855</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>3</LeadingLaps><Laps>200</Laps><Earnings>578,471</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1496</RaceID><Race_Date>03/03/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Subway Fresh Fit 500</RaceName><TrackName>Phoenix International Raceway</TrackName><Location>Avondale, AZ</Location><TV_Listing>FOX</TV_Listing><Laps>316</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>122</LeadingLaps><Laps>316</Laps><Earnings>298,875</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>1</LeadingLaps><Laps>316</Laps><Earnings>209,686</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>0</LeadingLaps><Laps>316</Laps><Earnings>157,575</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>16</LeadingLaps><Laps>316</Laps><Earnings>168,076</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>47</LeadingLaps><Laps>316</Laps><Earnings>130,750</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1497</RaceID><Race_Date>03/10/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Kobalt Tools 400</RaceName><TrackName>Las Vegas Motor Speedway</TrackName><Location>Las Vegas, NV</Location><TV_Listing>FOX</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>42</LeadingLaps><Laps>267</Laps><Earnings>408,666</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>114</LeadingLaps><Laps>267</Laps><Earnings>284,340</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>12</LeadingLaps><Laps>267</Laps><Earnings>248,956</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>27</LeadingLaps><Laps>267</Laps><Earnings>208,698</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>180,590</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1498</RaceID><Race_Date>03/17/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Food City 500</RaceName><TrackName>Bristol Motor Speedway</TrackName><Location>Bristol, TN</Location><TV_Listing>FOX</TV_Listing><Laps>500</Laps><TrackLength>0.533</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>109</LeadingLaps><Laps>500</Laps><Earnings>176,760</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>56</LeadingLaps><Laps>500</Laps><Earnings>188,893</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>62</LeadingLaps><Laps>500</Laps><Earnings>168,651</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>1</LeadingLaps><Laps>500</Laps><Earnings>134,255</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>144,543</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1499</RaceID><Race_Date>03/24/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Auto Club 400</RaceName><TrackName>Auto Club Speedway</TrackName><Location>Fontana, CA</Location><TV_Listing>FOX</TV_Listing><Laps>200</Laps><TrackLength>2.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>125</LeadingLaps><Laps>200</Laps><Earnings>334,233</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>212,340</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>41</LeadingLaps><Laps>200</Laps><Earnings>193,673</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>181,815</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>146,585</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1500</RaceID><Race_Date>04/07/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>STP Gas Booster 500</RaceName><TrackName>Martinsville Speedway</TrackName><Location>Martinsville, VA</Location><TV_Listing>FOX</TV_Listing><Laps>500</Laps><TrackLength>0.526</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>346</LeadingLaps><Laps>500</Laps><Earnings>214,471</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>164,893</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>146,446</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>112,385</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>56</LeadingLaps><Laps>500</Laps><Earnings>145,278</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1501</RaceID><Race_Date>04/13/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>NRA 500</RaceName><TrackName>Texas Motor Speedway</TrackName><Location>Fort Worth, TX</Location><TV_Listing>FOX</TV_Listing><Laps>334</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>171</LeadingLaps><Laps>334</Laps><Earnings>550,858</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>142</LeadingLaps><Laps>334</Laps><Earnings>346,555</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>268,605</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>214,855</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>1</LeadingLaps><Laps>334</Laps><Earnings>209,913</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1502</RaceID><Race_Date>04/21/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>STP 400</RaceName><TrackName>Kansas Speedway</TrackName><Location>Kansas City, KS</Location><TV_Listing>FOX</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>163</LeadingLaps><Laps>267</Laps><Earnings>263,816</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>182,085</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>9</LeadingLaps><Laps>267</Laps><Earnings>185,021</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>46</LeadingLaps><Laps>267</Laps><Earnings>155,985</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>156,218</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1503</RaceID><Race_Date>04/27/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Toyota Owners 400</RaceName><TrackName>Richmond International Raceway</TrackName><Location>Richmond, VA</Location><TV_Listing>FOX</TV_Listing><Laps>406</Laps><TrackLength>0.75</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>3</LeadingLaps><Laps>406</Laps><Earnings>242,511</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>113</LeadingLaps><Laps>406</Laps><Earnings>196,668</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>406</Laps><Earnings>161,618</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>67</LeadingLaps><Laps>406</Laps><Earnings>147,474</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>16</DriverID><Name>Jeff Burton</Name><LeadingLaps>7</LeadingLaps><Laps>406</Laps><Earnings>118,435</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1504</RaceID><Race_Date>05/05/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Aaron's 499</RaceName><TrackName>Talladega Superspeedway</TrackName><Location>Talladega, AL</Location><TV_Listing>FOX</TV_Listing><Laps>192</Laps><TrackLength>2.66</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>455</DriverID><Name>David Ragan</Name><LeadingLaps>4</LeadingLaps><Laps>192</Laps><Earnings>373,108</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>399</DriverID><Name>David Gilliland</Name><LeadingLaps>0</LeadingLaps><Laps>192</Laps><Earnings>235,153</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>5</LeadingLaps><Laps>192</Laps><Earnings>207,720</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>46</DriverID><Name>Michael Waltrip</Name><LeadingLaps>0</LeadingLaps><Laps>192</Laps><Earnings>155,620</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>16</LeadingLaps><Laps>192</Laps><Earnings>181,426</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1505</RaceID><Race_Date>05/11/2013</Race_Date><Race_Time>07:00 PM</Race_Time><RaceName>Bojangles Southern 500</RaceName><TrackName>Darlington Raceway</TrackName><Location>Darlington, SC</Location><TV_Listing>FOX</TV_Listing><Laps>367</Laps><TrackLength>1.366</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>17</LeadingLaps><Laps>367</Laps><Earnings>314,866</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>0</LeadingLaps><Laps>367</Laps><Earnings>211,465</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>16</LeadingLaps><Laps>367</Laps><Earnings>200,026</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>0</LeadingLaps><Laps>367</Laps><Earnings>178,876</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>367</Laps><Earnings>165,976</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1506</RaceID><Race_Date>05/18/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Sprint Showdown</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>SPEED</TV_Listing><Laps>40</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>40</LeadingLaps><Laps>40</Laps><Earnings>50,915</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>1341</DriverID><Name>Ricky Stenhouse Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>40,915</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>16</DriverID><Name>Jeff Burton</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>36,640</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>34,540</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>33,540</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1507</RaceID><Race_Date>05/18/2013</Race_Date><Race_Time>09:00 PM</Race_Time><RaceName>NASCAR Sprint All-Star Race</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>SPEED</TV_Listing><Laps>90</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>10</LeadingLaps><Laps>90</Laps><Earnings>1,039,175</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>244,175</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>29</LeadingLaps><Laps>90</Laps><Earnings>144,175</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>11</LeadingLaps><Laps>90</Laps><Earnings>114,150</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>29</LeadingLaps><Laps>90</Laps><Earnings>109,150</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1508</RaceID><Race_Date>05/26/2013</Race_Date><Race_Time>06:00 PM</Race_Time><RaceName>Coca-Cola 600</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>FOX</TV_Listing><Laps>400</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>28</LeadingLaps><Laps>400</Laps><Earnings>407,011</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>161</LeadingLaps><Laps>400</Laps><Earnings>291,615</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>8</LeadingLaps><Laps>400</Laps><Earnings>218,560</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>6</LeadingLaps><Laps>400</Laps><Earnings>220,915</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>400</Laps><Earnings>174,823</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1509</RaceID><Race_Date>06/02/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>FedEx 400</RaceName><TrackName>Dover International Speedway</TrackName><Location>Dover, DE</Location><TV_Listing>FOX</TV_Listing><Laps>400</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>139</LeadingLaps><Laps>400</Laps><Earnings>318,100</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>19</LeadingLaps><Laps>400</Laps><Earnings>226,504</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>0</LeadingLaps><Laps>400</Laps><Earnings>203,051</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>150</LeadingLaps><Laps>400</Laps><Earnings>196,198</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>2</LeadingLaps><Laps>400</Laps><Earnings>177,431</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1510</RaceID><Race_Date>06/09/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Party in the Poconos 400</RaceName><TrackName>Pocono Raceway</TrackName><Location>Long Pond, PA</Location><TV_Listing>TNT</TV_Listing><Laps>160</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>128</LeadingLaps><Laps>160</Laps><Earnings>244,436</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>179,185</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>143,060</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>165,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>19</LeadingLaps><Laps>160</Laps><Earnings>144,343</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1511</RaceID><Race_Date>06/16/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Quicken Loans 400</RaceName><TrackName>Michigan International Speedway</TrackName><Location>Brooklyn, MI</Location><TV_Listing>TNT</TV_Listing><Laps>200</Laps><TrackLength>2.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>48</LeadingLaps><Laps>200</Laps><Earnings>240,460</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>173,781</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>145,670</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>148,803</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>142,085</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1513</RaceID><Race_Date>06/23/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Toyota/Save Mart 350</RaceName><TrackName>Sonoma Raceway</TrackName><Location>Sonoma, CA</Location><TV_Listing>TNT</TV_Listing><Laps>110</Laps><TrackLength>1.99</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>51</LeadingLaps><Laps>110</Laps><Earnings>309,250</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>4</LeadingLaps><Laps>110</Laps><Earnings>240,451</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>110</Laps><Earnings>198,140</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>15</LeadingLaps><Laps>110</Laps><Earnings>154,860</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>110</Laps><Earnings>157,548</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1514</RaceID><Race_Date>06/30/2013</Race_Date><Race_Time>12:00 PM</Race_Time><RaceName>Quaker State 400</RaceName><TrackName>Kentucky Speedway</TrackName><Location>Sparta, KY</Location><TV_Listing>TNT</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>38</LeadingLaps><Laps>267</Laps><Earnings>200,451</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>159,115</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>146,078</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>130,338</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>139,743</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1515</RaceID><Race_Date>07/06/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Coke Zero 400</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>TNT</TV_Listing><Laps>161</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>94</LeadingLaps><Laps>161</Laps><Earnings>327,961</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>254,490</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>224,301</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>182,073</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>46</DriverID><Name>Michael Waltrip</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>141,365</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1516</RaceID><Race_Date>07/14/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Camping World RV Sales 301</RaceName><TrackName>New Hampshire Motor Speedway</TrackName><Location>Loudon, NH</Location><TV_Listing>TNT</TV_Listing><Laps>302</Laps><TrackLength>1.058</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>118</DriverID><Name>Brian Vickers</Name><LeadingLaps>16</LeadingLaps><Laps>302</Laps><Earnings>214,075</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>53</LeadingLaps><Laps>302</Laps><Earnings>228,043</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>16</DriverID><Name>Jeff Burton</Name><LeadingLaps>0</LeadingLaps><Laps>302</Laps><Earnings>147,135</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>14</LeadingLaps><Laps>302</Laps><Earnings>179,076</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>580</DriverID><Name>Aric Almirola</Name><LeadingLaps>0</LeadingLaps><Laps>302</Laps><Earnings>152,496</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1517</RaceID><Race_Date>07/28/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Crown Royal 400 at the Brickyard</RaceName><TrackName>Indianapolis Motor Speedway</TrackName><Location>Indianapolis, IN</Location><TV_Listing>ESPN</TV_Listing><Laps>160</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>45</LeadingLaps><Laps>160</Laps><Earnings>423,033</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>73</LeadingLaps><Laps>160</Laps><Earnings>379,736</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>299,500</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>300,650</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>273,266</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1518</RaceID><Race_Date>08/04/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>GoBowling.com 400</RaceName><TrackName>Pocono Raceway</TrackName><Location>Long Pond, PA</Location><TV_Listing>ESPN</TV_Listing><Laps>160</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>66</LeadingLaps><Laps>160</Laps><Earnings>208,500</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>7</LeadingLaps><Laps>160</Laps><Earnings>199,221</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>9</LeadingLaps><Laps>160</Laps><Earnings>153,930</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>2</LeadingLaps><Laps>160</Laps><Earnings>161,343</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>2</LeadingLaps><Laps>160</Laps><Earnings>130,585</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1519</RaceID><Race_Date>08/11/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Cheez-It 355 at the Glen</RaceName><TrackName>Watkins Glen International</TrackName><Location>Watkins Glen, NY</Location><TV_Listing>ESPN</TV_Listing><Laps>90</Laps><TrackLength>2.45</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>29</LeadingLaps><Laps>90</Laps><Earnings>236,658</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>204,876</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>161,735</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>149,360</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>1</LeadingLaps><Laps>90</Laps><Earnings>137,524</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1520</RaceID><Race_Date>08/18/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Pure Michigan 400</RaceName><TrackName>Michigan International Speedway</TrackName><Location>Brooklyn, MI</Location><TV_Listing>ESPN</TV_Listing><Laps>200</Laps><TrackLength>2.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>51</LeadingLaps><Laps>200</Laps><Earnings>252,393</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>180,731</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>43</LeadingLaps><Laps>200</Laps><Earnings>136,315</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>143,486</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>145,493</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1521</RaceID><Race_Date>08/24/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>IRWIN Tools Night Race</RaceName><TrackName>Bristol Motor Speedway</TrackName><Location>Bristol, TN</Location><TV_Listing>ABC</TV_Listing><Laps>500</Laps><TrackLength>0.533</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>149</LeadingLaps><Laps>500</Laps><Earnings>328,466</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>214,815</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>200,529</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>118</DriverID><Name>Brian Vickers</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>150,315</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>155,973</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1522</RaceID><Race_Date>09/01/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>AdvoCare 500</RaceName><TrackName>Atlanta Motor Speedway</TrackName><Location>Hampton, GA</Location><TV_Listing>ESPN</TV_Listing><Laps>325</Laps><TrackLength>1.54</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>36</LeadingLaps><Laps>325</Laps><Earnings>338,058</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>78</LeadingLaps><Laps>325</Laps><Earnings>244,473</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>325</Laps><Earnings>207,065</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>325</Laps><Earnings>165,235</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>3</LeadingLaps><Laps>325</Laps><Earnings>167,848</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1523</RaceID><Race_Date>09/07/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Federated Auto Parts 400</RaceName><TrackName>Richmond International Raceway</TrackName><Location>Richmond, VA</Location><TV_Listing>ABC</TV_Listing><Laps>400</Laps><TrackLength>0.75</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>46</LeadingLaps><Laps>400</Laps><Earnings>286,475</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>73</LeadingLaps><Laps>400</Laps><Earnings>185,355</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>4</LeadingLaps><Laps>400</Laps><Earnings>181,443</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>6</LeadingLaps><Laps>400</Laps><Earnings>151,805</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>3</LeadingLaps><Laps>400</Laps><Earnings>140,701</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1524</RaceID><Race_Date>09/15/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>GEICO 400</RaceName><TrackName>Chicagoland Speedway</TrackName><Location>Joliet, IL</Location><TV_Listing>ESPN</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>89</LeadingLaps><Laps>267</Laps><Earnings>334,891</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>67</LeadingLaps><Laps>267</Laps><Earnings>261,048</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>2</LeadingLaps><Laps>267</Laps><Earnings>221,326</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>169,960</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>40</LeadingLaps><Laps>267</Laps><Earnings>176,926</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1525</RaceID><Race_Date>09/22/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Sylvania 300</RaceName><TrackName>New Hampshire Motor Speedway</TrackName><Location>Loudon, NH</Location><TV_Listing>ESPN</TV_Listing><Laps>300</Laps><TrackLength>1.058</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>106</LeadingLaps><Laps>300</Laps><Earnings>262,066</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>0</LeadingLaps><Laps>300</Laps><Earnings>210,143</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>300</Laps><Earnings>151,785</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>1</LeadingLaps><Laps>300</Laps><Earnings>160,796</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>0</LeadingLaps><Laps>300</Laps><Earnings>142,005</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1526</RaceID><Race_Date>09/29/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>AAA 400</RaceName><TrackName>Dover International Speedway</TrackName><Location>Dover, DE</Location><TV_Listing>ESPN</TV_Listing><Laps>400</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>243</LeadingLaps><Laps>400</Laps><Earnings>243,836</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>80</LeadingLaps><Laps>400</Laps><Earnings>197,210</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>400</Laps><Earnings>166,068</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>3</LeadingLaps><Laps>400</Laps><Earnings>168,296</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>30</LeadingLaps><Laps>400</Laps><Earnings>162,068</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1527</RaceID><Race_Date>10/06/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Hollywood Casino 400</RaceName><TrackName>Kansas Speedway</TrackName><Location>Kansas City, KS</Location><TV_Listing>ESPN</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>138</LeadingLaps><Laps>267</Laps><Earnings>364,636</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>229,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>216,776</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>33</LeadingLaps><Laps>267</Laps><Earnings>176,473</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>169,965</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1528</RaceID><Race_Date>10/12/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Bank of America 500</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>ABC</TV_Listing><Laps>334</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>11</LeadingLaps><Laps>334</Laps><Earnings>314,441</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>138</LeadingLaps><Laps>334</Laps><Earnings>224,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>1</LeadingLaps><Laps>334</Laps><Earnings>199,426</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>130</LeadingLaps><Laps>334</Laps><Earnings>192,721</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>4</LeadingLaps><Laps>334</Laps><Earnings>163,568</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1529</RaceID><Race_Date>10/20/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Camping World RV Sales 500</RaceName><TrackName>Talladega Superspeedway</TrackName><Location>Talladega, AL</Location><TV_Listing>ESPN</TV_Listing><Laps>188</Laps><TrackLength>2.66</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>16</LeadingLaps><Laps>188</Laps><Earnings>236,345</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>38</LeadingLaps><Laps>188</Laps><Earnings>185,410</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1341</DriverID><Name>Ricky Stenhouse Jr.</Name><LeadingLaps>6</LeadingLaps><Laps>188</Laps><Earnings>187,596</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>0</LeadingLaps><Laps>188</Laps><Earnings>154,726</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>9</LeadingLaps><Laps>188</Laps><Earnings>162,068</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1530</RaceID><Race_Date>10/27/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Goody's Headache Relief Shot 500</RaceName><TrackName>Martinsville Speedway</TrackName><Location>Ridgeway, VA</Location><TV_Listing>ESPN</TV_Listing><Laps>500</Laps><TrackLength>0.526</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>78</LeadingLaps><Laps>500</Laps><Earnings>188,796</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>202</LeadingLaps><Laps>500</Laps><Earnings>177,736</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>60</LeadingLaps><Laps>500</Laps><Earnings>141,478</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>153,436</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>123</LeadingLaps><Laps>500</Laps><Earnings>144,046</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1531</RaceID><Race_Date>11/03/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>AAA Texas 500</RaceName><TrackName>Texas Motor Speedway</TrackName><Location>Fort Worth, TX</Location><TV_Listing>ESPN</TV_Listing><Laps>334</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>255</LeadingLaps><Laps>334</Laps><Earnings>484,211</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>337,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>1</LeadingLaps><Laps>334</Laps><Earnings>256,393</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>3</LeadingLaps><Laps>334</Laps><Earnings>238,776</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>180,585</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1532</RaceID><Race_Date>11/10/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>AdvoCare 500</RaceName><TrackName>Phoenix International Raceway</TrackName><Location>Avondale, AZ</Location><TV_Listing>ESPN</TV_Listing><Laps>312</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>70</LeadingLaps><Laps>312</Laps><Earnings>263,386</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>41</LeadingLaps><Laps>312</Laps><Earnings>171,715</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>1</LeadingLaps><Laps>312</Laps><Earnings>182,326</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>2</LeadingLaps><Laps>312</Laps><Earnings>131,135</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>312</Laps><Earnings>137,630</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1533</RaceID><Race_Date>11/17/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Ford EcoBoost 400</RaceName><TrackName>Homestead-Miami Speedway</TrackName><Location>Homestead, FL</Location><TV_Listing>ESPN</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>72</LeadingLaps><Laps>267</Laps><Earnings>322,350</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>144</LeadingLaps><Laps>267</Laps><Earnings>293,251</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>28</LeadingLaps><Laps>267</Laps><Earnings>203,860</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>179,435</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>167,968</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><time_stamp> January 13, 2014, at 11:34 AM ET </time_stamp></message>
diff --git a/schemagen/scoresxml/20160114.xml b/schemagen/scoresxml/20160114.xml
new file mode 100644
--- /dev/null
+++ b/schemagen/scoresxml/20160114.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Scores 1.0/EN" "scoresxml.dtd"><message><XML_File_ID>20160114</XML_File_ID><heading>BC-ADi+129:143*  0  0 0</heading><game_id>18166</game_id><schedule_id>18166</schedule_id><category>Scores</category><sport>NHL</sport><location><city>Montreal</city><state>QUEBEC</state><country>CANADA</country></location><location><city>Ottawa</city><state>ONTARIO</state><country>CANADA</country></location><seasontype>Regular</seasontype><game><vteam id="129">Montreal</vteam><hteam id="143">Ottawa</hteam><vscore>0</vscore><hscore>0</hscore><status numeral="0" type="i">0 Period</status><notes>Ottawa - Right Wing Chris Neil (1/16, lower body) is probable for Thursday's   game against Montreal.</notes></game><time_stamp> January 16, 2014, at 10:39 AM ET </time_stamp></message>
diff --git a/schemagen/scoresxml/20160285.xml b/schemagen/scoresxml/20160285.xml
new file mode 100644
--- /dev/null
+++ b/schemagen/scoresxml/20160285.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Scores 1.0/EN" "scoresxml.dtd"><message><XML_File_ID>20160285</XML_File_ID><heading>BC-BLP+P26:P56*  7  7 1R14:56</heading><game_id>50719</game_id><schedule_id>50719</schedule_id><category>Scores</category><sport>CBASK-W</sport><seasontype>Regular</seasontype><game><vteam id="P26">Campbell</vteam><hteam id="P56">Gardner-Webb</hteam><vscore>7</vscore><hscore>7</hscore><time_r>14:56</time_r><status numeral="1" type="P">1 Half</status></game><time_stamp> January 16, 2014, at 11:17 AM ET </time_stamp></message>
diff --git a/schemagen/scoresxml/20187479.xml b/schemagen/scoresxml/20187479.xml
new file mode 100644
--- /dev/null
+++ b/schemagen/scoresxml/20187479.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Scores 1.0/EN" "scoresxml.dtd"><message><XML_File_ID>20187479</XML_File_ID><heading>BC-AFP+YX9:YX8*  7  0 1R 4:40</heading><game_id>42485</game_id><schedule_id>42485</schedule_id><tsnupdate>True</tsnupdate><category>Scores</category><sport>CFOOT</sport><seasontype>Regular</seasontype><game><vteam id="YX9">American</vteam><hteam id="YX8">National</hteam><vscore>7</vscore><hscore>0</hscore><time_r>4:40</time_r><status numeral="1" type="P">1 Qtr</status></game><time_stamp> January 18, 2014, at 06:37 PM ET </time_stamp></message>
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -45,12 +45,18 @@
   report_info,
   report_error )
 import TSN.DbImport ( DbImport(..), ImportResult(..) )
-import qualified TSN.XML.Heartbeat as Heartbeat ( verify )
-import qualified TSN.XML.Injuries as Injuries ( pickle_message )
-import qualified TSN.XML.InjuriesDetail as InjuriesDetail ( pickle_message )
-import qualified TSN.XML.News as News ( pickle_message )
-import qualified TSN.XML.Odds as Odds ( pickle_message )
-import qualified TSN.XML.Weather as Weather ( pickle_message )
+import qualified TSN.XML.AutoRacingSchedule as AutoRacingSchedule (
+  dtd,
+  pickle_message )
+import qualified TSN.XML.Heartbeat as Heartbeat ( dtd, verify )
+import qualified TSN.XML.Injuries as Injuries ( dtd, pickle_message )
+import qualified TSN.XML.InjuriesDetail as InjuriesDetail (
+  dtd,
+  pickle_message )
+import qualified TSN.XML.News as News ( dtd, pickle_message )
+import qualified TSN.XML.Odds as Odds ( dtd, pickle_message )
+import qualified TSN.XML.Scores as Scores ( dtd, pickle_message )
+import qualified TSN.XML.Weather as Weather ( dtd, pickle_message )
 import Xml ( DtdName(..), parse_opts )
 
 
@@ -136,7 +142,7 @@
     import_with_dtd (DtdName dtd,xml)
         -- We special-case the heartbeat so it doesn't have to run in
         -- the database monad.
-      | dtd == "Heartbeat.dtd" = Heartbeat.verify xml
+      | dtd == Heartbeat.dtd = Heartbeat.verify xml
       | otherwise =
         -- We need NoMonomorphismRestriction here.
         if backend cfg == Postgres
@@ -144,43 +150,51 @@
         else withSqliteConn cs $ runDbConn importer
         where
           -- | Pull the real connection String out  of the configuration.
+          --
           cs :: String
           cs = get_connection_string $ connection_string cfg
 
           -- | Convenience; we use this everywhere below in 'importer'.
+          --
           migrate_and_import m = dbmigrate m >> dbimport m
 
           importer
-            | dtd == "injuriesxml.dtd" = do
+            | dtd == AutoRacingSchedule.dtd = do
+               let m = unpickleDoc AutoRacingSchedule.pickle_message xml
+               maybe (return $ ImportFailed errmsg) migrate_and_import m
+
+            | dtd == Injuries.dtd = do
                let m = unpickleDoc Injuries.pickle_message xml
-               let errmsg = "Could not unpickle injuriesxml."
                maybe (return $ ImportFailed errmsg) migrate_and_import m
 
-            | dtd == "Injuries_Detail_XML.dtd" = do
+            | dtd == InjuriesDetail.dtd = do
                 let m = unpickleDoc InjuriesDetail.pickle_message xml
-                let errmsg = "Could not unpickle Injuries_Detail_XML."
                 maybe (return $ ImportFailed errmsg) migrate_and_import m
 
 
-            | dtd == "newsxml.dtd" = do
+            | dtd == News.dtd = do
                 let m = unpickleDoc News.pickle_message xml
-                let errmsg = "Could not unpickle newsxml."
                 maybe (return $ ImportFailed errmsg) migrate_and_import m
 
-            | dtd == "Odds_XML.dtd" = do
+            | dtd == Odds.dtd = do
                 let m = unpickleDoc Odds.pickle_message xml
-                let errmsg = "Could not unpickle Odds_XML."
                 maybe (return $ ImportFailed errmsg) migrate_and_import m
 
-            | dtd == "weatherxml.dtd" = do
+            | dtd == Scores.dtd = do
+                let m = unpickleDoc Scores.pickle_message xml
+                maybe (return $ ImportFailed errmsg) migrate_and_import m
+
+            | dtd == Weather.dtd = do
                 let m = unpickleDoc Weather.pickle_message xml
-                let errmsg = "Could not unpickle weatherxml."
                 maybe (return $ ImportFailed errmsg) migrate_and_import m
 
             | otherwise = do
               let infomsg =
                     "Unrecognized DTD in " ++ path ++ ": " ++ dtd ++ "."
               return $ ImportUnsupported infomsg
+
+            where
+              errmsg = "Could not unpickle " ++ dtd ++ "."
 
 
 -- | Entry point of the program. It twiddles some knobs for
diff --git a/src/TSN/Picklers.hs b/src/TSN/Picklers.hs
--- a/src/TSN/Picklers.hs
+++ b/src/TSN/Picklers.hs
@@ -4,6 +4,7 @@
 module TSN.Picklers (
   xp_date,
   xp_gamedate,
+  xp_tba_time,
   xp_time,
   xp_time_stamp )
 where
@@ -14,6 +15,7 @@
 import System.Locale ( defaultTimeLocale )
 import Text.XML.HXT.Arrow.Pickle (
   xpText,
+  xpWrap,
   xpWrapMaybe )
 import Text.XML.HXT.Arrow.Pickle.Xml ( PU )
 
@@ -99,6 +101,22 @@
     from_time :: UTCTime -> String
     from_time = formatTime defaultTimeLocale xp_time_format
 
+
+-- | (Un)pickle a UTCTime without the date portion, allowing for a
+--   value of \"TBA\" (which gets translated to 'Nothing').
+--
+xp_tba_time :: PU (Maybe UTCTime)
+xp_tba_time =
+  (to_time, from_time) `xpWrap` xpText
+  where
+    to_time :: String -> Maybe UTCTime
+    to_time s
+      | s == "TBA" = Nothing
+      | otherwise = parseTime defaultTimeLocale xp_time_format s
+
+    from_time :: Maybe UTCTime -> String
+    from_time Nothing = ""
+    from_time (Just t) = formatTime defaultTimeLocale xp_time_format t
 
 
 -- | (Un)pickle the \<time_stamp\> element format to/from a 'UTCTime'.
diff --git a/src/TSN/XML/AutoRacingSchedule.hs b/src/TSN/XML/AutoRacingSchedule.hs
new file mode 100644
--- /dev/null
+++ b/src/TSN/XML/AutoRacingSchedule.hs
@@ -0,0 +1,565 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StandaloneDeriving #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+
+-- | Parse TSN XML for the DTD
+--   \"Auto_Racing_Schedule_XML.dtd\". There's a top-level
+--   \<message\>, containing \<Listing\>s, containing \<RaceResults\>,
+--   containing \<RaceResultsListing\>s.
+--
+module TSN.XML.AutoRacingSchedule (
+  dtd,
+  pickle_message,
+  -- * Tests
+  auto_racing_schedule_tests,
+  -- * WARNING: these are private but exported to silence warnings
+  AutoRacingScheduleConstructor(..),
+  AutoRacingScheduleListingConstructor(..),
+  AutoRacingScheduleListingRaceResultRaceResultListingConstructor(..) )
+where
+
+-- System imports.
+import Control.Monad ( forM_ )
+import Data.Time ( UTCTime(..) )
+import Data.Tuple.Curry ( uncurryN )
+import Database.Groundhog (
+  countAll,
+  executeRaw,
+  migrate,
+  runMigration,
+  silentMigrationLogger )
+import Database.Groundhog.Core ( DefaultKey )
+import Database.Groundhog.Generic ( runDbConn )
+import Database.Groundhog.Sqlite ( withSqliteConn )
+import Database.Groundhog.TH (
+  groundhog,
+  mkPersist )
+import Test.Tasty ( TestTree, testGroup )
+import Test.Tasty.HUnit ( (@?=), testCase )
+import Text.XML.HXT.Core (
+  PU,
+  xp7Tuple,
+  xp8Tuple,
+  xp10Tuple,
+  xpElem,
+  xpInt,
+  xpList,
+  xpOption,
+  xpText,
+  xpWrap )
+
+-- Local imports.
+import TSN.Codegen (
+  tsn_codegen_config )
+import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
+import TSN.Picklers ( xp_date, xp_tba_time, xp_time_stamp )
+import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
+import Xml (
+  FromXml(..),
+  FromXmlFk(..),
+  ToDb(..),
+  pickle_unpickle,
+  unpickleable,
+  unsafe_unpickle )
+
+
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
+--
+dtd :: String
+dtd = "Auto_Racing_Schedule_XML.dtd"
+
+--
+-- DB/XML data types
+--
+
+-- * AutoRacingSchedule/Message
+
+-- | Database representation of a 'Message'.
+--
+data AutoRacingSchedule =
+  AutoRacingSchedule {
+    db_xml_file_id :: Int,
+    db_heading :: String,
+    db_category :: String,
+    db_sport :: String,
+    db_title :: String,
+    db_complete_through :: String,
+    db_time_stamp :: UTCTime }
+  deriving (Eq, Show)
+
+
+-- | XML Representation of an 'AutoRacingSchedule'.
+--
+data Message =
+  Message {
+    xml_xml_file_id :: Int,
+    xml_heading :: String,
+    xml_category :: String,
+    xml_sport :: String,
+    xml_title :: String,
+    xml_complete_through :: String,
+    xml_listings :: [AutoRacingScheduleListingXml],
+    xml_time_stamp :: UTCTime }
+  deriving (Eq, Show)
+
+
+instance ToDb Message where
+  -- | The database analogue of a 'Message' is a 'AutoRacingSchedule'.
+  --
+  type Db Message = AutoRacingSchedule
+
+
+-- | The 'FromXml' instance for 'Message' is required for the
+--   'XmlImport' instance.
+--
+instance FromXml Message where
+  -- | To convert a 'Message' to an 'AutoRacingSchedule', we just drop
+  --   the 'xml_listings'.
+  --
+  from_xml Message{..} =
+    AutoRacingSchedule {
+      db_xml_file_id = xml_xml_file_id,
+      db_heading = xml_heading,
+      db_category = xml_category,
+      db_sport = xml_sport,
+      db_title = xml_title,
+      db_complete_through = xml_complete_through,
+      db_time_stamp = xml_time_stamp }
+
+
+-- | This allows us to insert the XML representation 'Message'
+--   directly.
+--
+instance XmlImport Message
+
+
+-- * AutoRacingScheduleListing/AutoRacingScheduleListingXml
+
+-- | Database representation of a \<Listing\> contained within a
+--   \<Message\>. We combine the race date/time into a single
+--   race_time, drop the race results list, and add a foreign key to
+--   our parent.
+--
+data AutoRacingScheduleListing =
+  AutoRacingScheduleListing {
+    db_auto_racing_schedules_id :: DefaultKey AutoRacingSchedule,
+    db_race_id :: Int,
+    db_race_time :: UTCTime,
+    db_race_name :: String,
+    db_track_name :: String,
+    db_location :: String,
+    db_tv_listing :: Maybe String,
+    db_laps :: Int,
+    db_track_length :: String -- ^ Sometimes the word "miles" shows up.
+  }
+
+
+-- | XML representation of a \<Listing\> contained within a
+--   \<message\>.
+--
+data AutoRacingScheduleListingXml =
+  AutoRacingScheduleListingXml {
+    xml_race_id :: Int,
+    xml_race_date :: UTCTime,
+    xml_race_time :: Maybe UTCTime,
+    xml_race_name :: String,
+    xml_track_name :: String,
+    xml_location :: String,
+    xml_tv_listing :: Maybe String,
+    xml_laps :: Int,
+    xml_track_length :: String, -- ^ Sometimes the word \"miles\" shows up,
+                                --   so we can't do the right thing and use
+                                --   a 'Double'.
+    xml_race_results :: [AutoRacingScheduleListingRaceResult] }
+  deriving (Eq, Show)
+
+
+-- | Pseudo-accessor to get the race result listings out of a
+--   'AutoRacingScheduleListingXml'. A poor man's lens.
+--
+result_listings :: AutoRacingScheduleListingXml
+                -> [AutoRacingScheduleListingRaceResultRaceResultListingXml]
+result_listings = (concatMap xml_race_result_listing) . xml_race_results
+
+
+instance ToDb AutoRacingScheduleListingXml where
+  -- | The database analogue of an 'AutoRacingScheduleListingXml' is
+  --   an 'AutoRacingScheduleListing'.
+  --
+  type Db AutoRacingScheduleListingXml = AutoRacingScheduleListing
+
+instance FromXmlFk AutoRacingScheduleListingXml where
+  -- | Each 'AutoRacingScheduleListingXml' is contained in (i.e. has a
+  --   foreign key to) a 'AutoRacingSchedule'.
+  --
+  type Parent AutoRacingScheduleListingXml = AutoRacingSchedule
+
+  -- | To convert an 'AutoRacingScheduleListingXml' to an
+  --   'AutoRacingScheduleListing', we add the foreign key and drop
+  --   the 'xml_race_results'. We also mash the date/time together
+  --   into one field.
+  --
+  from_xml_fk fk AutoRacingScheduleListingXml{..} =
+    AutoRacingScheduleListing {
+      db_auto_racing_schedules_id = fk,
+      db_race_id = xml_race_id,
+      db_race_time = make_race_time xml_race_date xml_race_time,
+      db_race_name = xml_race_name,
+      db_track_name = xml_track_name,
+      db_location = xml_location,
+      db_tv_listing = xml_tv_listing,
+      db_laps = xml_laps,
+      db_track_length = xml_track_length }
+    where
+      -- | Make the database \"race time\" from the XML
+      --   date/time. Simply take the day part from one and the time
+      --   from the other.
+      --
+      make_race_time d Nothing = d
+      make_race_time d (Just t) = UTCTime (utctDay d) (utctDayTime t)
+
+
+-- | This allows us to insert the XML representation
+--   'AutoRacingScheduleListingXml' directly.
+--
+instance XmlImportFk AutoRacingScheduleListingXml
+
+
+
+-- * AutoRacingScheduleListingRaceResult
+
+-- | The XML representation of \<message\> -> \<Listing\> ->
+--   \<RaceResults\>. This element serves only to contain
+--   \<RaceResultsListing\>s, so we don't store the intermediate table
+--   in the database.
+--
+newtype AutoRacingScheduleListingRaceResult =
+  AutoRacingScheduleListingRaceResult {
+    xml_race_result_listing ::
+      [AutoRacingScheduleListingRaceResultRaceResultListingXml] }
+  deriving (Eq, Show)
+
+
+-- * AutoRacingScheduleListingRaceResultRaceResultListing /
+--   AutoRacingScheduleListingRaceResultRaceResultListingXml
+--
+--   Sorry about the names yo.
+--
+
+-- | Database representation of \<RaceResultListing\> within
+--   \<RaceResults\> within \<Listing\> within... \<message\>!
+--
+data AutoRacingScheduleListingRaceResultRaceResultListing =
+  AutoRacingScheduleListingRaceResultRaceResultListing {
+    db_auto_racing_schedules_listings_id ::
+      DefaultKey AutoRacingScheduleListing,
+    db_finish_position :: Int,
+    db_driver_id :: Int,
+    db_name :: String,
+    db_leading_laps :: Int,
+    db_listing_laps :: Int, -- ^ Avoid clash with race's \"laps\" field.
+    db_earnings :: String,  -- ^ This should be an Int, but can have commas.
+    db_status :: String }
+
+
+-- | XML Representation of an
+--   'AutoRacingScheduleListingRaceResultRaceResultListing'.
+--
+data AutoRacingScheduleListingRaceResultRaceResultListingXml =
+  AutoRacingScheduleListingRaceResultRaceResultListingXml {
+    xml_finish_position :: Int,
+    xml_driver_id :: Int,
+    xml_name :: String,
+    xml_leading_laps :: Int,
+    xml_listing_laps :: Int, -- ^ Avoid clash with race's \"laps\" field.
+    xml_earnings :: String,  -- ^ Should be an 'Int', but can have commas.
+    xml_status :: String }
+  deriving (Eq, Show)
+
+
+instance ToDb AutoRacingScheduleListingRaceResultRaceResultListingXml where
+  -- | The database representation of an
+  --   'AutoRacingScheduleListingRaceResultRaceResultListingXml' is an
+  --   'AutoRacingScheduleListingRaceResultRaceResultListing'.
+  --
+  type Db AutoRacingScheduleListingRaceResultRaceResultListingXml =
+    AutoRacingScheduleListingRaceResultRaceResultListing
+
+
+instance FromXmlFk AutoRacingScheduleListingRaceResultRaceResultListingXml where
+  -- | Each 'AutoRacingScheduleListingRaceResultRaceResultListingXml'
+  --   is contained in (i.e. has a foreign key to) an
+  --   'AutoRacingScheduleListing'. We skip the intermediate
+  --   \<RaceResults\>.
+  --
+  type Parent AutoRacingScheduleListingRaceResultRaceResultListingXml =
+    AutoRacingScheduleListing
+
+  -- | To convert an
+  --   'AutoRacingScheduleListingRaceResultRaceResultListingXml' to an
+  --   'AutoRacingScheduleListingRaceResultRaceResultListing', we just
+  --   add the foreign key to the parent 'AutoRacingScheduleListing'.
+  --
+  from_xml_fk fk AutoRacingScheduleListingRaceResultRaceResultListingXml{..} =
+    AutoRacingScheduleListingRaceResultRaceResultListing {
+      db_auto_racing_schedules_listings_id = fk,
+      db_finish_position = xml_finish_position,
+      db_driver_id = xml_driver_id,
+      db_name = xml_name,
+      db_leading_laps = xml_leading_laps,
+      db_listing_laps = xml_listing_laps,
+      db_earnings = xml_earnings,
+      db_status = xml_earnings }
+
+
+-- | This allows us to insert the XML representation
+--   'AutoRacingScheduleListingRaceResultRaceResultListingXml'
+--   directly.
+--
+instance XmlImportFk AutoRacingScheduleListingRaceResultRaceResultListingXml
+
+
+---
+--- Database stuff.
+---
+
+instance DbImport Message where
+  dbmigrate _ =
+    run_dbmigrate $ do
+      migrate (undefined :: AutoRacingSchedule)
+      migrate (undefined :: AutoRacingScheduleListing)
+      migrate (undefined
+                 :: AutoRacingScheduleListingRaceResultRaceResultListing)
+
+
+  -- | We insert the message, then use its ID to insert the listings,
+  --   using their IDs to insert the race result listings.
+  --
+  dbimport m = do
+    msg_id <- insert_xml m
+
+    forM_ (xml_listings m) $ \listing -> do
+      listing_id <- insert_xml_fk msg_id listing
+
+      mapM_ (insert_xml_fk_ listing_id) (result_listings listing)
+
+    return ImportSucceeded
+
+
+mkPersist tsn_codegen_config [groundhog|
+- entity: AutoRacingSchedule
+  dbName: auto_racing_schedules
+  constructors:
+    - name: AutoRacingSchedule
+      uniques:
+        - name: unique_auto_racing_schedule
+          type: constraint
+          # Prevent multiple imports of the same message.
+          fields: [db_xml_file_id]
+
+- entity: AutoRacingScheduleListing
+  dbName: auto_racing_schedules_listings
+  constructors:
+    - name: AutoRacingScheduleListing
+      fields:
+        - name: db_auto_racing_schedules_id
+          reference:
+            onDelete: cascade
+
+- entity: AutoRacingScheduleListingRaceResultRaceResultListing
+  dbName: auto_racing_schedules_listings_race_result_listings
+  constructors:
+    - name: AutoRacingScheduleListingRaceResultRaceResultListing
+      fields:
+        - name: db_auto_racing_schedules_listings_id
+          reference:
+            onDelete: cascade
+|]
+
+
+
+---
+--- Pickling
+---
+
+-- | Pickler for the top-level 'Message'.
+--
+pickle_message :: PU Message
+pickle_message =
+  xpElem "message" $
+    xpWrap (from_tuple, to_tuple) $
+    xp8Tuple (xpElem "XML_File_ID" xpInt)
+             (xpElem "heading" xpText)
+             (xpElem "category" xpText)
+             (xpElem "sport" xpText)
+             (xpElem "Title" xpText)
+             (xpElem "Complete_Through" xpText)
+             (xpList pickle_listing)
+             (xpElem "time_stamp" xp_time_stamp)
+  where
+    from_tuple = uncurryN Message
+    to_tuple m = (xml_xml_file_id m,
+                  xml_heading m,
+                  xml_category m,
+                  xml_sport m,
+                  xml_title m,
+                  xml_complete_through m,
+                  xml_listings m,
+                  xml_time_stamp m)
+
+
+-- | Convert an 'AutoRacingScheduleListingXml' to/from XML.
+--
+pickle_listing :: PU AutoRacingScheduleListingXml
+pickle_listing =
+  xpElem "Listing" $
+    xpWrap (from_tuple, to_tuple) $
+      xp10Tuple (xpElem "RaceID" xpInt)
+                (xpElem "Race_Date" xp_date)
+                (xpElem "Race_Time" xp_tba_time)
+                (xpElem "RaceName" xpText)
+                (xpElem "TrackName" xpText)
+                (xpElem "Location" xpText)
+                (xpElem "TV_Listing" $ xpOption xpText)
+                (xpElem "Laps" xpInt)
+                (xpElem "TrackLength" xpText)
+                (xpList pickle_race_results)
+  where
+    from_tuple = uncurryN AutoRacingScheduleListingXml
+    to_tuple m = (xml_race_id m,
+                  xml_race_date m,
+                  xml_race_time m,
+                  xml_race_name m,
+                  xml_track_name m,
+                  xml_location m,
+                  xml_tv_listing m,
+                  xml_laps m,
+                  xml_track_length m,
+                  xml_race_results m)
+
+
+-- | Convert an 'AutoRacingScheduleListingRaceResult' to/from XML.
+--
+pickle_race_results :: PU AutoRacingScheduleListingRaceResult
+pickle_race_results =
+  xpElem "RaceResults" $
+    xpWrap (to_result, from_result) $
+      xpList pickle_race_results_listing
+  where
+    to_result = AutoRacingScheduleListingRaceResult
+    from_result = xml_race_result_listing
+
+
+-- | Convert an
+--   'AutoRacingScheduleListingRaceResultRaceResultListingXml' to/from
+--   XML.
+--
+pickle_race_results_listing ::
+  PU AutoRacingScheduleListingRaceResultRaceResultListingXml
+pickle_race_results_listing =
+  xpElem "RaceResultsListing" $
+    xpWrap (from_tuple, to_tuple) $
+      xp7Tuple (xpElem "FinishPosition" xpInt)
+               (xpElem "DriverID" xpInt)
+               (xpElem "Name" xpText)
+               (xpElem "LeadingLaps" xpInt)
+               (xpElem "Laps" xpInt)
+               (xpElem "Earnings" xpText)
+               (xpElem "Status" xpText)
+  where
+    from_tuple =
+      uncurryN AutoRacingScheduleListingRaceResultRaceResultListingXml
+
+    to_tuple m = (xml_finish_position m,
+                  xml_driver_id m,
+                  xml_name m,
+                  xml_leading_laps m,
+                  xml_listing_laps m,
+                  xml_earnings m,
+                  xml_status m)
+
+
+--
+-- Tasty Tests
+--
+
+-- | A list of all tests for this module.
+--
+auto_racing_schedule_tests :: TestTree
+auto_racing_schedule_tests =
+  testGroup
+    "AutoRacingSchedule tests"
+    [ test_on_delete_cascade,
+      test_pickle_of_unpickle_is_identity,
+      test_unpickle_succeeds ]
+
+-- | If we unpickle something and then pickle it, we should wind up
+--   with the same thing we started with. WARNING: success of this
+--   test does not mean that unpickling succeeded.
+--
+test_pickle_of_unpickle_is_identity :: TestTree
+test_pickle_of_unpickle_is_identity = testGroup "pickle-unpickle tests"
+  [ check "pickle composed with unpickle is the identity"
+          "test/xml/Auto_Racing_Schedule_XML.xml",
+
+    check "pickle composed with unpickle is the identity (miles track length)"
+          "test/xml/Auto_Racing_Schedule_XML-miles-track-length.xml" ]
+  where
+    check desc path = testCase desc $ do
+      (expected, actual) <- pickle_unpickle pickle_message path
+      actual @?= expected
+
+
+-- | Make sure we can actually unpickle these things.
+--
+test_unpickle_succeeds :: TestTree
+test_unpickle_succeeds = testGroup "unpickle tests"
+  [ check "unpickling succeeds"
+          "test/xml/Auto_Racing_Schedule_XML.xml",
+
+    check "unpickling succeeds (non-int team_id)"
+          "test/xml/Auto_Racing_Schedule_XML-miles-track-length.xml" ]
+  where
+    check desc path = testCase desc $ do
+      actual <- unpickleable path pickle_message
+      let expected = True
+      actual @?= expected
+
+
+-- | Make sure everything gets deleted when we delete the top-level
+--   record.
+--
+test_on_delete_cascade :: TestTree
+test_on_delete_cascade = testGroup "cascading delete tests"
+    [ check "deleting auto_racing_schedules deletes its children"
+          "test/xml/Auto_Racing_Schedule_XML.xml" ,
+
+    check ("deleting auto_racing_schedules deletes its children " ++
+            "(miles track length)")
+          "test/xml/Auto_Racing_Schedule_XML-miles-track-length.xml" ]
+  where
+    check desc path = testCase desc $ do
+      sched <- unsafe_unpickle path pickle_message
+      let a = undefined :: AutoRacingSchedule
+      let b = undefined :: AutoRacingScheduleListing
+      let c = undefined :: AutoRacingScheduleListingRaceResultRaceResultListing
+
+      actual <- withSqliteConn ":memory:" $ runDbConn $ do
+                  runMigration silentMigrationLogger $ do
+                    migrate a
+                    migrate b
+                    migrate c
+                  _ <- dbimport sched
+                  -- No idea how 'delete' works, so do this instead.
+                  executeRaw False "DELETE FROM auto_racing_schedules;" []
+                  count_a <- countAll a
+                  count_b <- countAll b
+                  count_c <- countAll c
+                  return $ sum [count_a, count_b, count_c]
+      let expected = 0
+      actual @?= expected
diff --git a/src/TSN/XML/Heartbeat.hs b/src/TSN/XML/Heartbeat.hs
--- a/src/TSN/XML/Heartbeat.hs
+++ b/src/TSN/XML/Heartbeat.hs
@@ -3,6 +3,7 @@
 -- | Handle documents defined by Heartbeat.dtd.
 --
 module TSN.XML.Heartbeat (
+  dtd,
   verify,
   -- * Tests
   heartbeat_tests )
@@ -26,6 +27,11 @@
 import TSN.DbImport ( ImportResult(..) )
 import Xml ( pickle_unpickle, unpickleable )
 
+
+-- | The DTD to which this module corresponds.
+--
+dtd :: String
+dtd = "Heartbeat.dtd"
 
 -- | The data structure that holds the XML representation of a
 --   Heartbeat message.
diff --git a/src/TSN/XML/Injuries.hs b/src/TSN/XML/Injuries.hs
--- a/src/TSN/XML/Injuries.hs
+++ b/src/TSN/XML/Injuries.hs
@@ -17,6 +17,7 @@
 --   time_stamp.
 --
 module TSN.XML.Injuries (
+  dtd,
   pickle_message,
   -- * Tests
   injuries_tests,
@@ -71,6 +72,12 @@
   unpickleable,
   unsafe_unpickle )
 
+
+
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
+--
+dtd :: String
+dtd = "injuriesxml.dtd"
 
 --
 -- DB/XML Data types
diff --git a/src/TSN/XML/InjuriesDetail.hs b/src/TSN/XML/InjuriesDetail.hs
--- a/src/TSN/XML/InjuriesDetail.hs
+++ b/src/TSN/XML/InjuriesDetail.hs
@@ -13,6 +13,7 @@
 --   real meat.
 --
 module TSN.XML.InjuriesDetail (
+  dtd,
   pickle_message,
   -- * Tests
   injuries_detail_tests,
@@ -65,6 +66,13 @@
   pickle_unpickle,
   unpickleable,
   unsafe_unpickle )
+
+
+
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
+--
+dtd :: String
+dtd = "Injuries_Detail_XML.dtd"
 
 
 --
diff --git a/src/TSN/XML/News.hs b/src/TSN/XML/News.hs
--- a/src/TSN/XML/News.hs
+++ b/src/TSN/XML/News.hs
@@ -11,6 +11,7 @@
 --   a root element \<message\> that contains an entire news item.
 --
 module TSN.XML.News (
+  dtd,
   pickle_message,
   -- * Tests
   news_tests,
@@ -73,7 +74,13 @@
   unsafe_unpickle )
 
 
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
 --
+dtd :: String
+dtd = "newsxml.dtd"
+
+
+--
 -- DB/XML Data types
 --
 
@@ -272,7 +279,6 @@
 -- use our own codegen to peel those off before naming the columns.
 mkPersist tsn_codegen_config [groundhog|
 - entity: News
-  dbName: news
   constructors:
     - name: News
       uniques:
diff --git a/src/TSN/XML/Odds.hs b/src/TSN/XML/Odds.hs
--- a/src/TSN/XML/Odds.hs
+++ b/src/TSN/XML/Odds.hs
@@ -12,6 +12,7 @@
 --   other... disorganized... information.
 --
 module TSN.XML.Odds (
+  dtd,
   pickle_message,
   -- * Tests
   odds_tests,
@@ -77,7 +78,13 @@
   unsafe_unpickle )
 
 
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
 --
+dtd :: String
+dtd = "Odds_XML.dtd"
+
+
+--
 -- DB/XML data types
 --
 
@@ -793,12 +800,12 @@
 --
 test_on_delete_cascade :: TestTree
 test_on_delete_cascade = testGroup "cascading delete tests"
-    [ check "deleting odds deleted its children"
+    [ check "deleting odds deletes its children"
           "test/xml/Odds_XML.xml"
           13 -- 5 casinos, 8 teams
     ,
 
-    check "deleting odds deleted its children (non-int team_id)"
+    check "deleting odds deletes its children (non-int team_id)"
           "test/xml/Odds_XML-noninteger-team-id.xml"
           51 -- 5 casinos, 46 teams
     ,
diff --git a/src/TSN/XML/Scores.hs b/src/TSN/XML/Scores.hs
new file mode 100644
--- /dev/null
+++ b/src/TSN/XML/Scores.hs
@@ -0,0 +1,630 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GADTs #-}
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeFamilies #-}
+
+-- | Parse TSN XML for the DTD \"scoresxml.dtd\". Each document
+--   contains a single \<game\> and some \<location\>s.
+--
+module TSN.XML.Scores (
+  dtd,
+  pickle_message,
+  -- * Tests
+  scores_tests,
+  -- * WARNING: these are private but exported to silence warnings
+  Score_ScoreLocationConstructor(..),
+  ScoreConstructor(..),
+  ScoreGameConstructor(..),
+  ScoreGameTeamConstructor(..),
+  ScoreLocationConstructor(..),
+  ScoreGame_ScoreGameTeamConstructor(..) )
+where
+
+-- System imports.
+import Data.Data ( Data )
+import Data.Time ( UTCTime )
+import Data.Tuple.Curry ( uncurryN )
+import Data.Typeable ( Typeable )
+import Database.Groundhog (
+  countAll,
+  executeRaw,
+  insert,
+  insert_,
+  migrate,
+  runMigration,
+  silentMigrationLogger )
+import Database.Groundhog.Core ( DefaultKey )
+import Database.Groundhog.Generic ( runDbConn )
+import Database.Groundhog.Sqlite ( withSqliteConn )
+import Database.Groundhog.TH (
+  defaultCodegenConfig,
+  groundhog,
+  mkPersist )
+import Test.Tasty ( TestTree, testGroup )
+import Test.Tasty.HUnit ( (@?=), testCase )
+import Text.XML.HXT.Core (
+  PU,
+  xp7Tuple,
+  xp11Tuple,
+  xpAttr,
+  xpElem,
+  xpInt,
+  xpList,
+  xpOption,
+  xpPair,
+  xpPrim,
+  xpText,
+  xpTriple,
+  xpWrap )
+
+-- Local imports.
+import TSN.Codegen (
+  tsn_codegen_config )
+import TSN.DbImport ( DbImport(..), ImportResult(..), run_dbmigrate )
+import TSN.Picklers ( xp_time_stamp )
+import TSN.XmlImport ( XmlImport(..), XmlImportFk(..) )
+import Xml (
+  FromXml(..),
+  FromXmlFk(..),
+  ToDb(..),
+  pickle_unpickle,
+  unpickleable,
+  unsafe_unpickle )
+
+
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
+--
+dtd :: String
+dtd = "scoresxml.dtd"
+
+
+---
+--- DB/XML Data types
+---
+
+
+-- * Score / Message
+
+-- | Database representation of a 'Message'. It lacks the
+--   'xml_locations' and 'xml_game' which are related via foreign keys
+--   instead.
+--
+data Score =
+  Score {
+    db_xml_file_id :: Int,
+    db_heading :: String,
+    db_game_id :: Int,
+    db_schedule_id :: Int,
+    db_tsnupdate :: Maybe Bool,
+    db_category :: String,
+    db_sport :: String,
+    db_season_type :: String,
+    db_time_stamp :: UTCTime }
+
+
+-- | XML representation of the top level \<message\> element (i.e. a
+--   'Score').
+--
+data Message =
+  Message {
+    xml_xml_file_id :: Int,
+    xml_heading :: String,
+    xml_game_id :: Int,
+    xml_schedule_id :: Int,
+    xml_tsnupdate :: Maybe Bool,
+    xml_category :: String,
+    xml_sport :: String,
+    xml_locations :: [ScoreLocation],
+    xml_season_type :: String,
+    xml_game :: ScoreGameXml,
+    xml_time_stamp :: UTCTime }
+  deriving (Eq, Show)
+
+instance ToDb Message where
+  -- | The database representation of a 'Message' is a 'Score'.
+  type Db Message = Score
+
+instance FromXml Message where
+  from_xml Message{..} =
+    Score {
+      db_xml_file_id = xml_xml_file_id,
+      db_heading = xml_heading,
+      db_game_id = xml_game_id,
+      db_schedule_id = xml_schedule_id,
+      db_tsnupdate = xml_tsnupdate,
+      db_category = xml_category,
+      db_sport = xml_sport,
+      db_season_type = xml_season_type,
+      db_time_stamp = xml_time_stamp }
+
+
+-- | This lets us insert the XML representation 'Message' directly.
+--
+instance XmlImport Message
+
+
+-- * ScoreGame / ScoreGameXml
+
+-- | This is an embedded field within 'SportsGame'. Each \<status\>
+--   element has two attributes, a numeral and a type. It also
+--   contains some text. Rather than put these in their own table, we
+--   include them in the parent 'SportsGame'.
+--
+data ScoreGameStatus =
+  ScoreGameStatus {
+    db_status_numeral :: Int,
+    db_status_type :: String, -- ^ These are probably only one-character long,
+                              --   but they all take the same amount of space
+                              --   in Postgres.
+    db_status_text :: String }
+  deriving (Data, Eq, Show, Typeable)
+
+
+-- | Database representation of a game.
+--
+data ScoreGame =
+  ScoreGame {
+    db_scores_id :: DefaultKey Score,
+    db_vscore :: Int,
+    db_hscore :: Int,
+    db_time_r :: Maybe String, -- ^ Time remaining, the format is uncertain.
+    db_status :: ScoreGameStatus,
+    db_notes  :: Maybe String }
+
+
+-- | XML representation of a \<game\> element (i.e. a 'ScoreGame').
+--
+data ScoreGameXml =
+  ScoreGameXml {
+    xml_vteam  :: ScoreGameVTeam,
+    xml_hteam  :: ScoreGameHTeam,
+    xml_vscore :: Int,
+    xml_hscore :: Int,
+    xml_time_r :: Maybe String, -- ^ Time remaining, the format is uncertain.
+    xml_status :: ScoreGameStatus,
+    xml_notes  :: Maybe String }
+  deriving (Eq, Show)
+
+-- | Pseudo-accessor to get the 'ScoreGameTeam' out of 'xml_vteam'.
+vteam :: ScoreGameXml -> ScoreGameTeam
+vteam g = let (ScoreGameVTeam t) = xml_vteam g in t
+
+-- | Pseudo-accessor to get the 'ScoreGameTeam' out of 'xml_hteam'.
+hteam :: ScoreGameXml -> ScoreGameTeam
+hteam g = let (ScoreGameHTeam t) = xml_hteam g in t
+
+instance ToDb ScoreGameXml where
+  -- | The database representation of a 'ScoreGameXml' is a
+  --   'ScoreGame'.
+  --
+  type Db ScoreGameXml = ScoreGame
+
+instance FromXmlFk ScoreGameXml where
+  -- | Each 'ScoreGameXml' is contained in (i.e. has a foreign key to)
+  --   a 'Score'.
+  --
+  type Parent ScoreGameXml = Score
+
+  from_xml_fk fk ScoreGameXml{..} =
+    ScoreGame {
+      db_scores_id = fk,
+      db_vscore = xml_vscore,
+      db_hscore = xml_hscore,
+      db_time_r = xml_time_r,
+      db_status = xml_status,
+      db_notes = xml_notes }
+
+-- | This lets us import the database representation 'ScoreGameXml'
+--   directly.
+--
+instance XmlImportFk ScoreGameXml
+
+
+-- * ScoreGameTeam
+
+-- | A team that appears in a 'ScoreGame'. This is meant to represent
+--   both home and away teams.
+--
+data ScoreGameTeam =
+  ScoreGameTeam {
+    team_id :: String,
+    team_name :: String }
+  deriving (Eq, Show)
+
+-- | A wrapper around 'ScoreGameTeam' that lets us distinguish between
+--   home and away teams. See also 'ScoreGameHTeam'.
+--
+newtype ScoreGameVTeam =
+  ScoreGameVTeam ScoreGameTeam
+  deriving (Eq, Show)
+
+
+-- | A wrapper around 'ScoreGameTeam' that lets us distinguish between
+--   home and away teams. See also 'ScoreGameVTeam'.
+--
+newtype ScoreGameHTeam =
+  ScoreGameHTeam ScoreGameTeam
+  deriving (Eq, Show)
+
+
+-- * ScoreGame_ScoreGameTeam
+
+-- | Join a 'ScoreGame' with its home/away teams. Database-only. We
+--   use a join table because the teams are kept unique.
+--
+data ScoreGame_ScoreGameTeam =
+  ScoreGame_ScoreGameTeam
+    (DefaultKey ScoreGame) -- ^ game id
+    (DefaultKey ScoreGameTeam) -- ^ vteam id
+    (DefaultKey ScoreGameTeam) -- ^ hteam id
+
+
+-- * ScoreLocation
+
+-- | Database and XML representation of a \<location\>. This is almost
+--   identical to 'TSN.XML.NewsLocation', but the city/state have not
+--   appeared optional here so far.
+--
+data ScoreLocation =
+  ScoreLocation {
+    city :: String,
+    state :: String,
+    country :: String }
+  deriving (Eq, Show)
+
+
+-- * Score_ScoreLocation
+
+-- | Join each 'Score' with its 'ScoreLocation's. Database-only. We
+--   use a join table because the locations are kept unique.
+--
+data Score_ScoreLocation =
+  Score_ScoreLocation
+    (DefaultKey Score)
+    (DefaultKey ScoreLocation)
+
+
+
+instance DbImport Message where
+  dbmigrate _ =
+    run_dbmigrate $ do
+      migrate (undefined :: Score)
+      migrate (undefined :: ScoreGame)
+      migrate (undefined :: ScoreGameTeam)
+      migrate (undefined :: ScoreGame_ScoreGameTeam)
+      migrate (undefined :: ScoreLocation)
+      migrate (undefined :: Score_ScoreLocation)
+
+  dbimport m = do
+    -- Insert the message and get its ID.
+    msg_id <- insert_xml m
+
+    -- Insert all of the locations contained within this message and
+    -- collect their IDs in a list.
+    location_ids <- mapM insert (xml_locations m)
+
+    -- Now use that list to construct 'Score_ScoreLocation' objects,
+    -- and insert them.
+    mapM_ (insert_ . Score_ScoreLocation msg_id) location_ids
+
+    -- Insert the game and its hteam/vteam, noting the IDs.
+    game_id <- insert_xml_fk msg_id (xml_game m)
+    vteam_id <- insert (vteam $ xml_game m)
+    hteam_id <- insert (hteam $ xml_game m)
+
+    -- Finally add a 'ScoreGame_ScoreGameTeam' mapping the
+    -- aforementioned game to its hteam/vteam.
+    insert_ $ ScoreGame_ScoreGameTeam game_id vteam_id hteam_id
+
+    return ImportSucceeded
+
+
+-- These types don't have special XML representations or field name
+-- collisions so we use the defaultCodegenConfig and give their
+-- fields nice simple names.
+mkPersist defaultCodegenConfig [groundhog|
+- entity: ScoreGameTeam
+  dbName: scores_games_teams
+  constructors:
+    - name: ScoreGameTeam
+      uniques:
+        - name: unique_scores_games_team
+          type: constraint
+          fields: [team_id]
+
+- entity: ScoreLocation
+  dbName: scores_locations
+  constructors:
+    - name: ScoreLocation
+      uniques:
+        - name: unique_scores_location
+          type: constraint
+          fields: [city, state, country]
+
+|]
+
+
+
+-- These types have fields with e.g. db_ and xml_ prefixes, so we
+-- use our own codegen to peel those off before naming the columns.
+mkPersist tsn_codegen_config [groundhog|
+- entity: Score
+  dbName: scores
+  constructors:
+    - name: Score
+      uniques:
+        - name: unique_scores
+          type: constraint
+          # Prevent multiple imports of the same message.
+          fields: [db_xml_file_id]
+
+- embedded: ScoreGameStatus
+  fields:
+    - name: db_status_numeral
+      dbName: status_numeral
+    - name: db_status_type
+      dbName: status_type
+    - name: db_status_text
+      dbName: status_text
+
+- entity: ScoreGame
+  dbName: scores_games
+  constructors:
+    - name: ScoreGame
+      fields:
+        - name: db_scores_id
+          reference:
+            onDelete: cascade
+        - name: db_status
+          embeddedType:
+            - { name: status_numeral, dbName: status_numeral }
+            - { name: status_type, dbName: status_type }
+            - { name: status_text, dbName: status_text }
+
+- entity: ScoreGame_ScoreGameTeam
+  dbName: scores_games__scores_games_teams
+  constructors:
+    - name: ScoreGame_ScoreGameTeam
+      fields:
+        - name: scoreGame_ScoreGameTeam0 # Default created by mkNormalFieldName
+          dbName: scores_games_id
+          reference:
+            onDelete: cascade
+        - name: scoreGame_ScoreGameTeam1 # Default created by mkNormalFieldName
+          dbName: scores_games_teams_vteam_id
+          reference:
+            onDelete: cascade
+        - name: scoreGame_ScoreGameTeam2 # Default created by mkNormalFieldName
+          dbName: scores_games_teams_hteam_id
+          reference:
+            onDelete: cascade
+
+- entity: Score_ScoreLocation
+  dbName: scores__scores_locations
+  constructors:
+    - name: Score_ScoreLocation
+      fields:
+        - name: score_ScoreLocation0 # Default created by mkNormalFieldName
+          dbName: scores_id
+          reference:
+            onDelete: cascade
+        - name: score_ScoreLocation1 # Default created by mkNormalFieldName
+          dbName: scores_locations_id
+          reference:
+            onDelete: cascade
+|]
+
+
+--
+-- Pickling
+--
+
+-- | Convert a 'Message' to/from \<message\>.
+--
+pickle_message :: PU Message
+pickle_message =
+  xpElem "message" $
+    xpWrap (from_tuple, to_tuple) $
+    xp11Tuple (xpElem "XML_File_ID" xpInt)
+              (xpElem "heading" xpText)
+              (xpElem "game_id" xpInt)
+              (xpElem "schedule_id" xpInt)
+              (xpOption $ xpElem "tsnupdate" xpPrim)
+              (xpElem "category" xpText)
+              (xpElem "sport" xpText)
+              (xpList pickle_location)
+              (xpElem "seasontype" xpText)
+              pickle_game
+              (xpElem "time_stamp" xp_time_stamp)
+  where
+    from_tuple = uncurryN Message
+    to_tuple m = (xml_xml_file_id m,
+                  xml_heading m,
+                  xml_game_id m,
+                  xml_schedule_id m,
+                  xml_tsnupdate m,
+                  xml_category m,
+                  xml_sport m,
+                  xml_locations m,
+                  xml_season_type m,
+                  xml_game m,
+                  xml_time_stamp m)
+
+
+
+-- | Convert a 'ScoreLocation' to/from \<location\>.
+--
+pickle_location :: PU ScoreLocation
+pickle_location =
+  xpElem "location" $
+    xpWrap (from_tuple, to_tuple) $
+    xpTriple (xpElem "city" xpText)
+             (xpElem "state" xpText)
+             (xpElem "country" xpText)
+  where
+    from_tuple =
+      uncurryN ScoreLocation
+    to_tuple l = (city l, state l, country l)
+
+
+-- | Convert a 'ScoreGameStatus' to/from \<status\>.
+--
+pickle_status :: PU ScoreGameStatus
+pickle_status =
+  xpElem "status" $
+    xpWrap (from_tuple, to_tuple) $
+      xpTriple (xpAttr "numeral" xpInt)
+               (xpAttr "type" xpText)
+               xpText
+  where
+    from_tuple = uncurryN ScoreGameStatus
+    to_tuple ScoreGameStatus{..} = (db_status_numeral,
+                                    db_status_type,
+                                    db_status_text)
+
+
+-- | Convert a 'ScoreGameXml' to/from \<game\>.
+--
+pickle_game :: PU ScoreGameXml
+pickle_game =
+  xpElem "game" $
+    xpWrap (from_tuple, to_tuple) $
+      xp7Tuple pickle_vteam
+               pickle_hteam
+               (xpElem "vscore" xpInt)
+               (xpElem "hscore" xpInt)
+               (xpOption $ xpElem "time_r" xpText)
+               pickle_status
+               (xpOption $ xpElem "notes" xpText)
+  where
+    from_tuple = uncurryN ScoreGameXml
+    to_tuple ScoreGameXml{..} = (xml_vteam,
+                                 xml_hteam,
+                                 xml_vscore,
+                                 xml_hscore,
+                                 xml_time_r,
+                                 xml_status,
+                                 xml_notes)
+
+
+-- | Convert a 'ScoreGameVTeam' to/from \<vteam\>.
+--
+pickle_vteam :: PU ScoreGameVTeam
+pickle_vteam =
+  xpElem "vteam" $
+    xpWrap (from_tuple, to_tuple) $
+      xpPair (xpAttr "id" xpText)
+             xpText
+  where
+    from_tuple = ScoreGameVTeam . uncurry ScoreGameTeam
+    to_tuple (ScoreGameVTeam ScoreGameTeam{..}) = (team_id, team_name)
+
+
+-- | Convert a 'ScoreGameVTeam' to/from \<hteam\>. Identical to
+--   'pickle_vteam' modulo the \"h\" and \"v\".
+--
+pickle_hteam :: PU ScoreGameHTeam
+pickle_hteam =
+  xpElem "hteam" $
+    xpWrap (from_tuple, to_tuple) $
+      xpPair (xpAttr "id" xpText)
+             xpText
+  where
+    from_tuple = ScoreGameHTeam  . uncurry ScoreGameTeam
+    to_tuple (ScoreGameHTeam ScoreGameTeam{..}) = (team_id, team_name)
+
+
+
+---
+--- Tasty tests
+---
+
+-- | A list of all tests for this module.
+--
+scores_tests :: TestTree
+scores_tests =
+  testGroup
+    "Scores tests"
+    [ test_on_delete_cascade,
+      test_pickle_of_unpickle_is_identity,
+      test_unpickle_succeeds ]
+
+
+-- | If we unpickle something and then pickle it, we should wind up
+--   with the same thing we started with. WARNING: success of this
+--   test does not mean that unpickling succeeded.
+--
+test_pickle_of_unpickle_is_identity :: TestTree
+test_pickle_of_unpickle_is_identity = testGroup "pickle-unpickle tests"
+  [ check "pickle composed with unpickle is the identity"
+          "test/xml/scoresxml.xml",
+
+    check "pickle composed with unpickle is the identity (no locations)"
+          "test/xml/scoresxml-no-locations.xml" ]
+  where
+    check desc path = testCase desc $ do
+      (expected, actual) <- pickle_unpickle pickle_message path
+      actual @?= expected
+
+
+-- | Make sure we can actually unpickle these things.
+--
+test_unpickle_succeeds :: TestTree
+test_unpickle_succeeds = testGroup "unpickle tests"
+  [ check "unpickling succeeds"
+          "test/xml/scoresxml.xml",
+
+    check "unpickling succeeds (no locations)"
+          "test/xml/scoresxml-no-locations.xml" ]
+  where
+    check desc path = testCase desc $ do
+      actual <- unpickleable path pickle_message
+      let expected = True
+      actual @?= expected
+
+
+-- | Make sure everything gets deleted when we delete the top-level
+--   record.
+--
+test_on_delete_cascade :: TestTree
+test_on_delete_cascade = testGroup "cascading delete tests"
+  [ check "unpickling succeeds"
+          "test/xml/scoresxml.xml"
+          4, -- 2 teams, 2 locations
+
+    check "unpickling succeeds (no locations)"
+          "test/xml/scoresxml-no-locations.xml"
+          2 -- 2 teams, 0 locations
+  ]
+  where
+    check desc path expected = testCase desc $ do
+      score <- unsafe_unpickle path pickle_message
+      let a = undefined :: Score
+      let b = undefined :: ScoreGame
+      let c = undefined :: ScoreGameTeam
+      let d = undefined :: ScoreGame_ScoreGameTeam
+      let e = undefined :: ScoreLocation
+      let f = undefined :: Score_ScoreLocation
+      actual <- withSqliteConn ":memory:" $ runDbConn $ do
+                  runMigration silentMigrationLogger $ do
+                    migrate a
+                    migrate b
+                    migrate c
+                    migrate d
+                    migrate e
+                    migrate f
+                  _ <- dbimport score
+                  -- No idea how 'delete' works, so do this instead.
+                  executeRaw False "DELETE FROM scores;" []
+                  count_a <- countAll a
+                  count_b <- countAll b
+                  count_c <- countAll c
+                  count_d <- countAll d
+                  count_e <- countAll e
+                  count_f <- countAll f
+                  return $ sum [count_a, count_b, count_c,
+                                count_d, count_e, count_f ]
+      actual @?= expected
diff --git a/src/TSN/XML/Weather.hs b/src/TSN/XML/Weather.hs
--- a/src/TSN/XML/Weather.hs
+++ b/src/TSN/XML/Weather.hs
@@ -10,6 +10,7 @@
 --   that league contains a bunch of listings.
 --
 module TSN.XML.Weather (
+  dtd,
   pickle_message,
   -- * Tests
   weather_tests,
@@ -62,6 +63,13 @@
   pickle_unpickle,
   unpickleable,
   unsafe_unpickle )
+
+
+
+-- | The DTD to which this module corresponds. Used to invoke dbimport.
+--
+dtd :: String
+dtd = "weatherxml.dtd"
 
 
 --
diff --git a/test/TestSuite.hs b/test/TestSuite.hs
--- a/test/TestSuite.hs
+++ b/test/TestSuite.hs
@@ -1,20 +1,24 @@
 import Test.Tasty ( TestTree, defaultMain, testGroup )
 
+import TSN.XML.AutoRacingSchedule ( auto_racing_schedule_tests )
 import TSN.XML.Heartbeat ( heartbeat_tests )
 import TSN.XML.Injuries ( injuries_tests )
 import TSN.XML.InjuriesDetail ( injuries_detail_tests )
 import TSN.XML.News ( news_tests )
 import TSN.XML.Odds ( odds_tests )
+import TSN.XML.Scores ( scores_tests )
 import TSN.XML.Weather ( weather_tests )
 
 tests :: TestTree
 tests = testGroup
           "All tests"
-          [ heartbeat_tests,
+          [ auto_racing_schedule_tests,
+            heartbeat_tests,
             injuries_tests,
             injuries_detail_tests,
             news_tests,
             odds_tests,
+            scores_tests,
             weather_tests ]
 
 main :: IO ()
diff --git a/test/shell/import-duplicates.test b/test/shell/import-duplicates.test
--- a/test/shell/import-duplicates.test
+++ b/test/shell/import-duplicates.test
@@ -15,15 +15,15 @@
 # Heartbeat.xml that doesn't really count.
 find ./test/xml -name '*.xml' | wc -l
 >>>
-12
+16
 >>>= 0
 
 # Run the imports again; we should get complaints about the duplicate
-# xml_file_ids. There are 2 errors for each violation, so we expect 2*11
+# xml_file_ids. There are 2 errors for each violation, so we expect 2*15
 # occurrences of the string 'ERROR'.
 ./dist/build/htsn-import/htsn-import -c 'shelltest.sqlite3' test/xml/*.xml 2>&1 | grep ERROR | wc -l
 >>>
-22
+30
 >>>= 0
 
 # Finally, clean up after ourselves.
diff --git a/test/xml/Auto_Racing_Schedule_XML-miles-track-length.xml b/test/xml/Auto_Racing_Schedule_XML-miles-track-length.xml
new file mode 100644
--- /dev/null
+++ b/test/xml/Auto_Racing_Schedule_XML-miles-track-length.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Leader 1.0/EN" "Auto_Racing_Schedule_XML.dtd"><message><XML_File_ID>20136765</XML_File_ID><heading>ATX%SCHEDULE</heading><category>Statistics</category><sport>NASCAR-T</sport><Title>2014 Camping World Series Schedule</Title><Complete_Through>Complete through </Complete_Through><Listing><RaceID>1739</RaceID><Race_Date>02/21/2014</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>NextEra Energy Resources 250</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>FS1</TV_Listing><Laps>100</Laps><TrackLength>2.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1740</RaceID><Race_Date>03/29/2014</Race_Date><Race_Time>01:30 PM</Race_Time><RaceName>Kroger 250</RaceName><TrackName>Martinsville Speedway</TrackName><Location>Martinsville, VA</Location><TV_Listing>FS1</TV_Listing><Laps>250</Laps><TrackLength>0.526</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1741</RaceID><Race_Date>05/09/2014</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>SFP 250</RaceName><TrackName>Kansas Speedway</TrackName><Location>Kansas City, KS</Location><TV_Listing>FS1</TV_Listing><Laps>167</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1742</RaceID><Race_Date>05/16/2014</Race_Date><Race_Time>08:00 PM</Race_Time><RaceName>North Carolina Education Lottery 200</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>FS1</TV_Listing><Laps>134</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1743</RaceID><Race_Date>05/30/2014</Race_Date><Race_Time>05:00 PM</Race_Time><RaceName>Lucas Oil 200</RaceName><TrackName>Dover International Speedway</TrackName><Location>Dover, DE</Location><TV_Listing>FS1</TV_Listing><Laps>200</Laps><TrackLength>1.0</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1744</RaceID><Race_Date>06/06/2014</Race_Date><Race_Time>09:00 PM</Race_Time><RaceName>WinStar World Casino 400</RaceName><TrackName>Texas Motor Speedway</TrackName><Location>Fort Worth, TX</Location><TV_Listing>FS1</TV_Listing><Laps>167</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1759</RaceID><Race_Date>06/14/2014</Race_Date><Race_Time>09:00 PM</Race_Time><RaceName>Gateway 200</RaceName><TrackName>Gateway Motorsports Park</TrackName><Location>Madison, IL</Location><TV_Listing>FS1</TV_Listing><Laps>160</Laps><TrackLength>1.25 miles</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1745</RaceID><Race_Date>06/26/2014</Race_Date><Race_Time>08:00 PM</Race_Time><RaceName>UNOH 225</RaceName><TrackName>Kentucky Speedway</TrackName><Location>Sparta, KY</Location><TV_Listing>FS1</TV_Listing><Laps>150</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1746</RaceID><Race_Date>07/11/2014</Race_Date><Race_Time>08:30 PM</Race_Time><RaceName>American Ethanol 200</RaceName><TrackName>Iowa Speedway</TrackName><Location>Newton, IA</Location><TV_Listing>FS1</TV_Listing><Laps>200</Laps><TrackLength>0.875</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1747</RaceID><Race_Date>07/23/2014</Race_Date><Race_Time>09:35 PM</Race_Time><RaceName>Mudsummer Classic</RaceName><TrackName>Eldora Speedway</TrackName><Location>Rossburg, OH</Location><TV_Listing>FS1</TV_Listing><Laps>153</Laps><TrackLength>0.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1748</RaceID><Race_Date>08/02/2014</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Pocono Mountains 125</RaceName><TrackName>Pocono Raceway</TrackName><Location>Long Pond, PA</Location><TV_Listing>FS1</TV_Listing><Laps>54</Laps><TrackLength>2.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1749</RaceID><Race_Date>08/16/2014</Race_Date><Race_Time>12:30 PM</Race_Time><RaceName>Michigan National Guard 200</RaceName><TrackName>Michigan International Speedway</TrackName><Location>Brooklyn, MI</Location><TV_Listing>FS1</TV_Listing><Laps>100</Laps><TrackLength>2.0</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1750</RaceID><Race_Date>08/20/2014</Race_Date><Race_Time>08:00 PM</Race_Time><RaceName>UNOH 200</RaceName><TrackName>Bristol Motor Speedway</TrackName><Location>Bristol, TN</Location><TV_Listing>FS1</TV_Listing><Laps>200</Laps><TrackLength>0.533</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1751</RaceID><Race_Date>08/31/2014</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Chevrolet Silverado 250</RaceName><TrackName>Canadian Tire Motorsport Park</TrackName><Location>Bowmanville, ON, Canada</Location><TV_Listing>FS1</TV_Listing><Laps>64</Laps><TrackLength>2.459</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1752</RaceID><Race_Date>09/12/2014</Race_Date><Race_Time>08:30 PM</Race_Time><RaceName>EnjoyIllinois.com 225</RaceName><TrackName>Chicagoland Speedway</TrackName><Location>Joliet, IL</Location><TV_Listing>FS1</TV_Listing><Laps>150</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1760</RaceID><Race_Date>09/20/2014</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Camping World Truck Series 200</RaceName><TrackName>New Hampshire Motor Speedway</TrackName><Location>Loudon, NH</Location><TV_Listing>FS1</TV_Listing><Laps>175</Laps><TrackLength>1.058</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1753</RaceID><Race_Date>09/27/2014</Race_Date><Race_Time>08:30 PM</Race_Time><RaceName>Smith's 350</RaceName><TrackName>Las Vegas Motor Speedway</TrackName><Location>Las Vegas, NV</Location><TV_Listing>FS1</TV_Listing><Laps>146</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1754</RaceID><Race_Date>10/18/2014</Race_Date><Race_Time>04:00 PM</Race_Time><RaceName>Fred's 250</RaceName><TrackName>Talladega Superspeedway</TrackName><Location>Talladega, AL</Location><TV_Listing>FS1</TV_Listing><Laps>94</Laps><TrackLength>2.66</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1755</RaceID><Race_Date>10/25/2014</Race_Date><Race_Time>01:30 PM</Race_Time><RaceName>Kroger 200</RaceName><TrackName>Martinsville Speedway</TrackName><Location>Martinsville, VA</Location><TV_Listing>FS1</TV_Listing><Laps>200</Laps><TrackLength>0.526</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1756</RaceID><Race_Date>10/31/2014</Race_Date><Race_Time>08:30 PM</Race_Time><RaceName>WinStar World Casino 350</RaceName><TrackName>Texas Motor Speedway</TrackName><Location>Fort Worth, TX</Location><TV_Listing>FS1</TV_Listing><Laps>147</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1757</RaceID><Race_Date>11/07/2014</Race_Date><Race_Time>08:00 PM</Race_Time><RaceName>Lucas Oil 150</RaceName><TrackName>Phoenix International Raceway</TrackName><Location>Avondale, AZ</Location><TV_Listing>FS1</TV_Listing><Laps>150</Laps><TrackLength>1.0</TrackLength><RaceResults></RaceResults></Listing><Listing><RaceID>1758</RaceID><Race_Date>11/14/2014</Race_Date><Race_Time>08:00 PM</Race_Time><RaceName>Ford EcoBoost 200</RaceName><TrackName>Homestead-Miami Speedway</TrackName><Location>Homestead, FL</Location><TV_Listing>FS1</TV_Listing><Laps>148</Laps><TrackLength>1.5</TrackLength><RaceResults></RaceResults></Listing><time_stamp> January 13, 2014, at 12:04 PM ET </time_stamp></message>
diff --git a/test/xml/Auto_Racing_Schedule_XML.dtd b/test/xml/Auto_Racing_Schedule_XML.dtd
new file mode 100644
--- /dev/null
+++ b/test/xml/Auto_Racing_Schedule_XML.dtd
@@ -0,0 +1,26 @@
+<!ELEMENT XML_File_ID (#PCDATA)>
+<!ELEMENT heading (#PCDATA)>
+<!ELEMENT category (#PCDATA)>
+<!ELEMENT sport (#PCDATA)>
+<!ELEMENT Title (#PCDATA)>
+<!ELEMENT Complete_Through (#PCDATA)>
+<!ELEMENT RaceID (#PCDATA)>
+<!ELEMENT Race_Date (#PCDATA)>
+<!ELEMENT Race_Time (#PCDATA)>
+<!ELEMENT RaceName (#PCDATA)>
+<!ELEMENT TrackName (#PCDATA)>
+<!ELEMENT Location (#PCDATA)>
+<!ELEMENT TV_Listing (#PCDATA)>
+<!ELEMENT Laps (#PCDATA)>
+<!ELEMENT TrackLength (#PCDATA)>
+<!ELEMENT FinishPosition (#PCDATA)>
+<!ELEMENT DriverID (#PCDATA)>
+<!ELEMENT Name (#PCDATA)>
+<!ELEMENT LeadingLaps (#PCDATA)>
+<!ELEMENT Earnings (#PCDATA)>
+<!ELEMENT Status (#PCDATA)>
+<!ELEMENT RaceResultsListing ( ( FinishPosition, DriverID, Name, LeadingLaps, Laps, Earnings, Status ) )>
+<!ELEMENT RaceResults ( RaceResultsListing* )>
+<!ELEMENT Listing ( ( RaceID, Race_Date, Race_Time, RaceName, TrackName, Location, TV_Listing, Laps, TrackLength, RaceResults ) )>
+<!ELEMENT time_stamp (#PCDATA)>
+<!ELEMENT message ( ( XML_File_ID, heading, category, sport, Title, Complete_Through, Listing*, time_stamp ) )>
diff --git a/test/xml/Auto_Racing_Schedule_XML.xml b/test/xml/Auto_Racing_Schedule_XML.xml
new file mode 100644
--- /dev/null
+++ b/test/xml/Auto_Racing_Schedule_XML.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Leader 1.0/EN" "Auto_Racing_Schedule_XML.dtd"><message><XML_File_ID>20136714</XML_File_ID><heading>BFX%SCHEDULE</heading><category>Statistics</category><sport>NASCAR</sport><Title>2013 NASCAR Sprint Cup Schedule</Title><Complete_Through>Complete through </Complete_Through><Listing><RaceID>1492</RaceID><Race_Date>02/16/2013</Race_Date><Race_Time>08:10 PM</Race_Time><RaceName>Sprint Unlimited at Daytona</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>FOX</TV_Listing><Laps>75</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>40</LeadingLaps><Laps>75</Laps><Earnings>205,075</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>2</LeadingLaps><Laps>75</Laps><Earnings>101,325</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>75</Laps><Earnings>61,325</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>5</LeadingLaps><Laps>75</Laps><Earnings>52,325</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>26</LeadingLaps><Laps>75</Laps><Earnings>51,300</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1493</RaceID><Race_Date>02/21/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Budweiser Duel 1</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>SPEED</TV_Listing><Laps>60</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>23</LeadingLaps><Laps>60</Laps><Earnings>57,792</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>42,789</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>37,789</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>23,789</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>30,789</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1494</RaceID><Race_Date>02/21/2013</Race_Date><Race_Time>04:00 PM</Race_Time><RaceName>Budweiser Duel 2</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>SPEED</TV_Listing><Laps>60</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>19</LeadingLaps><Laps>60</Laps><Earnings>58,977</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>43,963</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1321</DriverID><Name>Austin Dillon</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>38,963</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>1</LeadingLaps><Laps>60</Laps><Earnings>33,963</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>0</LeadingLaps><Laps>60</Laps><Earnings>31,963</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1495</RaceID><Race_Date>02/24/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Daytona 500</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>FOX</TV_Listing><Laps>200</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>17</LeadingLaps><Laps>200</Laps><Earnings>1,525,275</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>1,104,814</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>32</DriverID><Name>Mark Martin</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>817,013</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>13</LeadingLaps><Laps>200</Laps><Earnings>707,855</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>3</LeadingLaps><Laps>200</Laps><Earnings>578,471</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1496</RaceID><Race_Date>03/03/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Subway Fresh Fit 500</RaceName><TrackName>Phoenix International Raceway</TrackName><Location>Avondale, AZ</Location><TV_Listing>FOX</TV_Listing><Laps>316</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>122</LeadingLaps><Laps>316</Laps><Earnings>298,875</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>1</LeadingLaps><Laps>316</Laps><Earnings>209,686</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>0</LeadingLaps><Laps>316</Laps><Earnings>157,575</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>16</LeadingLaps><Laps>316</Laps><Earnings>168,076</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>47</LeadingLaps><Laps>316</Laps><Earnings>130,750</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1497</RaceID><Race_Date>03/10/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Kobalt Tools 400</RaceName><TrackName>Las Vegas Motor Speedway</TrackName><Location>Las Vegas, NV</Location><TV_Listing>FOX</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>42</LeadingLaps><Laps>267</Laps><Earnings>408,666</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>114</LeadingLaps><Laps>267</Laps><Earnings>284,340</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>12</LeadingLaps><Laps>267</Laps><Earnings>248,956</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>27</LeadingLaps><Laps>267</Laps><Earnings>208,698</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>180,590</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1498</RaceID><Race_Date>03/17/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Food City 500</RaceName><TrackName>Bristol Motor Speedway</TrackName><Location>Bristol, TN</Location><TV_Listing>FOX</TV_Listing><Laps>500</Laps><TrackLength>0.533</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>109</LeadingLaps><Laps>500</Laps><Earnings>176,760</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>56</LeadingLaps><Laps>500</Laps><Earnings>188,893</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>62</LeadingLaps><Laps>500</Laps><Earnings>168,651</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>1</LeadingLaps><Laps>500</Laps><Earnings>134,255</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>144,543</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1499</RaceID><Race_Date>03/24/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Auto Club 400</RaceName><TrackName>Auto Club Speedway</TrackName><Location>Fontana, CA</Location><TV_Listing>FOX</TV_Listing><Laps>200</Laps><TrackLength>2.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>125</LeadingLaps><Laps>200</Laps><Earnings>334,233</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>212,340</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>41</LeadingLaps><Laps>200</Laps><Earnings>193,673</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>181,815</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>146,585</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1500</RaceID><Race_Date>04/07/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>STP Gas Booster 500</RaceName><TrackName>Martinsville Speedway</TrackName><Location>Martinsville, VA</Location><TV_Listing>FOX</TV_Listing><Laps>500</Laps><TrackLength>0.526</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>346</LeadingLaps><Laps>500</Laps><Earnings>214,471</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>164,893</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>146,446</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>112,385</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>56</LeadingLaps><Laps>500</Laps><Earnings>145,278</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1501</RaceID><Race_Date>04/13/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>NRA 500</RaceName><TrackName>Texas Motor Speedway</TrackName><Location>Fort Worth, TX</Location><TV_Listing>FOX</TV_Listing><Laps>334</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>171</LeadingLaps><Laps>334</Laps><Earnings>550,858</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>142</LeadingLaps><Laps>334</Laps><Earnings>346,555</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>268,605</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>214,855</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>1</LeadingLaps><Laps>334</Laps><Earnings>209,913</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1502</RaceID><Race_Date>04/21/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>STP 400</RaceName><TrackName>Kansas Speedway</TrackName><Location>Kansas City, KS</Location><TV_Listing>FOX</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>163</LeadingLaps><Laps>267</Laps><Earnings>263,816</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>182,085</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>9</LeadingLaps><Laps>267</Laps><Earnings>185,021</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>46</LeadingLaps><Laps>267</Laps><Earnings>155,985</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>156,218</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1503</RaceID><Race_Date>04/27/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Toyota Owners 400</RaceName><TrackName>Richmond International Raceway</TrackName><Location>Richmond, VA</Location><TV_Listing>FOX</TV_Listing><Laps>406</Laps><TrackLength>0.75</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>3</LeadingLaps><Laps>406</Laps><Earnings>242,511</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>113</LeadingLaps><Laps>406</Laps><Earnings>196,668</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>406</Laps><Earnings>161,618</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>67</LeadingLaps><Laps>406</Laps><Earnings>147,474</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>16</DriverID><Name>Jeff Burton</Name><LeadingLaps>7</LeadingLaps><Laps>406</Laps><Earnings>118,435</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1504</RaceID><Race_Date>05/05/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Aaron's 499</RaceName><TrackName>Talladega Superspeedway</TrackName><Location>Talladega, AL</Location><TV_Listing>FOX</TV_Listing><Laps>192</Laps><TrackLength>2.66</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>455</DriverID><Name>David Ragan</Name><LeadingLaps>4</LeadingLaps><Laps>192</Laps><Earnings>373,108</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>399</DriverID><Name>David Gilliland</Name><LeadingLaps>0</LeadingLaps><Laps>192</Laps><Earnings>235,153</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>5</LeadingLaps><Laps>192</Laps><Earnings>207,720</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>46</DriverID><Name>Michael Waltrip</Name><LeadingLaps>0</LeadingLaps><Laps>192</Laps><Earnings>155,620</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>16</LeadingLaps><Laps>192</Laps><Earnings>181,426</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1505</RaceID><Race_Date>05/11/2013</Race_Date><Race_Time>07:00 PM</Race_Time><RaceName>Bojangles Southern 500</RaceName><TrackName>Darlington Raceway</TrackName><Location>Darlington, SC</Location><TV_Listing>FOX</TV_Listing><Laps>367</Laps><TrackLength>1.366</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>17</LeadingLaps><Laps>367</Laps><Earnings>314,866</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>0</LeadingLaps><Laps>367</Laps><Earnings>211,465</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>16</LeadingLaps><Laps>367</Laps><Earnings>200,026</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>0</LeadingLaps><Laps>367</Laps><Earnings>178,876</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>367</Laps><Earnings>165,976</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1506</RaceID><Race_Date>05/18/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Sprint Showdown</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>SPEED</TV_Listing><Laps>40</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>40</LeadingLaps><Laps>40</Laps><Earnings>50,915</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>1341</DriverID><Name>Ricky Stenhouse Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>40,915</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>16</DriverID><Name>Jeff Burton</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>36,640</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>34,540</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>40</Laps><Earnings>33,540</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1507</RaceID><Race_Date>05/18/2013</Race_Date><Race_Time>09:00 PM</Race_Time><RaceName>NASCAR Sprint All-Star Race</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>SPEED</TV_Listing><Laps>90</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>10</LeadingLaps><Laps>90</Laps><Earnings>1,039,175</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>244,175</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>29</LeadingLaps><Laps>90</Laps><Earnings>144,175</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>11</LeadingLaps><Laps>90</Laps><Earnings>114,150</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>29</LeadingLaps><Laps>90</Laps><Earnings>109,150</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1508</RaceID><Race_Date>05/26/2013</Race_Date><Race_Time>06:00 PM</Race_Time><RaceName>Coca-Cola 600</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>FOX</TV_Listing><Laps>400</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>28</LeadingLaps><Laps>400</Laps><Earnings>407,011</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>161</LeadingLaps><Laps>400</Laps><Earnings>291,615</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>8</LeadingLaps><Laps>400</Laps><Earnings>218,560</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>6</LeadingLaps><Laps>400</Laps><Earnings>220,915</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>400</Laps><Earnings>174,823</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1509</RaceID><Race_Date>06/02/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>FedEx 400</RaceName><TrackName>Dover International Speedway</TrackName><Location>Dover, DE</Location><TV_Listing>FOX</TV_Listing><Laps>400</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>139</LeadingLaps><Laps>400</Laps><Earnings>318,100</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>19</LeadingLaps><Laps>400</Laps><Earnings>226,504</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>0</LeadingLaps><Laps>400</Laps><Earnings>203,051</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>150</LeadingLaps><Laps>400</Laps><Earnings>196,198</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>2</LeadingLaps><Laps>400</Laps><Earnings>177,431</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1510</RaceID><Race_Date>06/09/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Party in the Poconos 400</RaceName><TrackName>Pocono Raceway</TrackName><Location>Long Pond, PA</Location><TV_Listing>TNT</TV_Listing><Laps>160</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>128</LeadingLaps><Laps>160</Laps><Earnings>244,436</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>179,185</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>143,060</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>165,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>19</LeadingLaps><Laps>160</Laps><Earnings>144,343</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1511</RaceID><Race_Date>06/16/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Quicken Loans 400</RaceName><TrackName>Michigan International Speedway</TrackName><Location>Brooklyn, MI</Location><TV_Listing>TNT</TV_Listing><Laps>200</Laps><TrackLength>2.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>48</LeadingLaps><Laps>200</Laps><Earnings>240,460</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>173,781</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>145,670</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>148,803</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>142,085</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1513</RaceID><Race_Date>06/23/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Toyota/Save Mart 350</RaceName><TrackName>Sonoma Raceway</TrackName><Location>Sonoma, CA</Location><TV_Listing>TNT</TV_Listing><Laps>110</Laps><TrackLength>1.99</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>51</LeadingLaps><Laps>110</Laps><Earnings>309,250</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>4</LeadingLaps><Laps>110</Laps><Earnings>240,451</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>110</Laps><Earnings>198,140</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>15</LeadingLaps><Laps>110</Laps><Earnings>154,860</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>110</Laps><Earnings>157,548</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1514</RaceID><Race_Date>06/30/2013</Race_Date><Race_Time>12:00 PM</Race_Time><RaceName>Quaker State 400</RaceName><TrackName>Kentucky Speedway</TrackName><Location>Sparta, KY</Location><TV_Listing>TNT</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>38</LeadingLaps><Laps>267</Laps><Earnings>200,451</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>159,115</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>146,078</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>130,338</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>139,743</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1515</RaceID><Race_Date>07/06/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Coke Zero 400</RaceName><TrackName>Daytona International Speedway</TrackName><Location>Daytona Beach, FL</Location><TV_Listing>TNT</TV_Listing><Laps>161</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>94</LeadingLaps><Laps>161</Laps><Earnings>327,961</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>254,490</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>224,301</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>182,073</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>46</DriverID><Name>Michael Waltrip</Name><LeadingLaps>0</LeadingLaps><Laps>161</Laps><Earnings>141,365</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1516</RaceID><Race_Date>07/14/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Camping World RV Sales 301</RaceName><TrackName>New Hampshire Motor Speedway</TrackName><Location>Loudon, NH</Location><TV_Listing>TNT</TV_Listing><Laps>302</Laps><TrackLength>1.058</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>118</DriverID><Name>Brian Vickers</Name><LeadingLaps>16</LeadingLaps><Laps>302</Laps><Earnings>214,075</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>53</LeadingLaps><Laps>302</Laps><Earnings>228,043</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>16</DriverID><Name>Jeff Burton</Name><LeadingLaps>0</LeadingLaps><Laps>302</Laps><Earnings>147,135</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>14</LeadingLaps><Laps>302</Laps><Earnings>179,076</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>580</DriverID><Name>Aric Almirola</Name><LeadingLaps>0</LeadingLaps><Laps>302</Laps><Earnings>152,496</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1517</RaceID><Race_Date>07/28/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Crown Royal 400 at the Brickyard</RaceName><TrackName>Indianapolis Motor Speedway</TrackName><Location>Indianapolis, IN</Location><TV_Listing>ESPN</TV_Listing><Laps>160</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>45</LeadingLaps><Laps>160</Laps><Earnings>423,033</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>73</LeadingLaps><Laps>160</Laps><Earnings>379,736</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>299,500</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>43</DriverID><Name>Tony Stewart</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>300,650</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>0</LeadingLaps><Laps>160</Laps><Earnings>273,266</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1518</RaceID><Race_Date>08/04/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>GoBowling.com 400</RaceName><TrackName>Pocono Raceway</TrackName><Location>Long Pond, PA</Location><TV_Listing>ESPN</TV_Listing><Laps>160</Laps><TrackLength>2.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>66</LeadingLaps><Laps>160</Laps><Earnings>208,500</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>7</LeadingLaps><Laps>160</Laps><Earnings>199,221</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>9</LeadingLaps><Laps>160</Laps><Earnings>153,930</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>2</LeadingLaps><Laps>160</Laps><Earnings>161,343</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>2</LeadingLaps><Laps>160</Laps><Earnings>130,585</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1519</RaceID><Race_Date>08/11/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Cheez-It 355 at the Glen</RaceName><TrackName>Watkins Glen International</TrackName><Location>Watkins Glen, NY</Location><TV_Listing>ESPN</TV_Listing><Laps>90</Laps><TrackLength>2.45</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>29</LeadingLaps><Laps>90</Laps><Earnings>236,658</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>204,876</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>161,735</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>90</Laps><Earnings>149,360</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>1</LeadingLaps><Laps>90</Laps><Earnings>137,524</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1520</RaceID><Race_Date>08/18/2013</Race_Date><Race_Time>01:00 PM</Race_Time><RaceName>Pure Michigan 400</RaceName><TrackName>Michigan International Speedway</TrackName><Location>Brooklyn, MI</Location><TV_Listing>ESPN</TV_Listing><Laps>200</Laps><TrackLength>2.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>51</LeadingLaps><Laps>200</Laps><Earnings>252,393</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>180,731</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>43</LeadingLaps><Laps>200</Laps><Earnings>136,315</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>143,486</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>200</Laps><Earnings>145,493</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1521</RaceID><Race_Date>08/24/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>IRWIN Tools Night Race</RaceName><TrackName>Bristol Motor Speedway</TrackName><Location>Bristol, TN</Location><TV_Listing>ABC</TV_Listing><Laps>500</Laps><TrackLength>0.533</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>149</LeadingLaps><Laps>500</Laps><Earnings>328,466</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>214,815</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>59</DriverID><Name>Juan Pablo Montoya</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>200,529</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>118</DriverID><Name>Brian Vickers</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>150,315</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>155,973</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1522</RaceID><Race_Date>09/01/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>AdvoCare 500</RaceName><TrackName>Atlanta Motor Speedway</TrackName><Location>Hampton, GA</Location><TV_Listing>ESPN</TV_Listing><Laps>325</Laps><TrackLength>1.54</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>36</LeadingLaps><Laps>325</Laps><Earnings>338,058</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>78</LeadingLaps><Laps>325</Laps><Earnings>244,473</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>325</Laps><Earnings>207,065</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>325</Laps><Earnings>165,235</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>3</LeadingLaps><Laps>325</Laps><Earnings>167,848</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1523</RaceID><Race_Date>09/07/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Federated Auto Parts 400</RaceName><TrackName>Richmond International Raceway</TrackName><Location>Richmond, VA</Location><TV_Listing>ABC</TV_Listing><Laps>400</Laps><TrackLength>0.75</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>46</LeadingLaps><Laps>400</Laps><Earnings>286,475</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>73</LeadingLaps><Laps>400</Laps><Earnings>185,355</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>47</DriverID><Name>Ryan Newman</Name><LeadingLaps>4</LeadingLaps><Laps>400</Laps><Earnings>181,443</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>6</LeadingLaps><Laps>400</Laps><Earnings>151,805</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>3</LeadingLaps><Laps>400</Laps><Earnings>140,701</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1524</RaceID><Race_Date>09/15/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>GEICO 400</RaceName><TrackName>Chicagoland Speedway</TrackName><Location>Joliet, IL</Location><TV_Listing>ESPN</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>89</LeadingLaps><Laps>267</Laps><Earnings>334,891</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>67</LeadingLaps><Laps>267</Laps><Earnings>261,048</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>2</LeadingLaps><Laps>267</Laps><Earnings>221,326</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>169,960</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>40</LeadingLaps><Laps>267</Laps><Earnings>176,926</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1525</RaceID><Race_Date>09/22/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Sylvania 300</RaceName><TrackName>New Hampshire Motor Speedway</TrackName><Location>Loudon, NH</Location><TV_Listing>ESPN</TV_Listing><Laps>300</Laps><TrackLength>1.058</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>106</LeadingLaps><Laps>300</Laps><Earnings>262,066</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>0</LeadingLaps><Laps>300</Laps><Earnings>210,143</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>49</DriverID><Name>Greg Biffle</Name><LeadingLaps>0</LeadingLaps><Laps>300</Laps><Earnings>151,785</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>1</LeadingLaps><Laps>300</Laps><Earnings>160,796</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>0</LeadingLaps><Laps>300</Laps><Earnings>142,005</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1526</RaceID><Race_Date>09/29/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>AAA 400</RaceName><TrackName>Dover International Speedway</TrackName><Location>Dover, DE</Location><TV_Listing>ESPN</TV_Listing><Laps>400</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>243</LeadingLaps><Laps>400</Laps><Earnings>243,836</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>80</LeadingLaps><Laps>400</Laps><Earnings>197,210</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>0</LeadingLaps><Laps>400</Laps><Earnings>166,068</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>3</LeadingLaps><Laps>400</Laps><Earnings>168,296</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>30</LeadingLaps><Laps>400</Laps><Earnings>162,068</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1527</RaceID><Race_Date>10/06/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Hollywood Casino 400</RaceName><TrackName>Kansas Speedway</TrackName><Location>Kansas City, KS</Location><TV_Listing>ESPN</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>138</LeadingLaps><Laps>267</Laps><Earnings>364,636</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>229,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>216,776</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>33</LeadingLaps><Laps>267</Laps><Earnings>176,473</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>127</DriverID><Name>Carl Edwards</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>169,965</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1528</RaceID><Race_Date>10/12/2013</Race_Date><Race_Time>07:30 PM</Race_Time><RaceName>Bank of America 500</RaceName><TrackName>Charlotte Motor Speedway</TrackName><Location>Concord, NC</Location><TV_Listing>ABC</TV_Listing><Laps>334</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>11</LeadingLaps><Laps>334</Laps><Earnings>314,441</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>138</LeadingLaps><Laps>334</Laps><Earnings>224,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>1</LeadingLaps><Laps>334</Laps><Earnings>199,426</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>130</LeadingLaps><Laps>334</Laps><Earnings>192,721</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>4</LeadingLaps><Laps>334</Laps><Earnings>163,568</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1529</RaceID><Race_Date>10/20/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Camping World RV Sales 500</RaceName><TrackName>Talladega Superspeedway</TrackName><Location>Talladega, AL</Location><TV_Listing>ESPN</TV_Listing><Laps>188</Laps><TrackLength>2.66</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>34</DriverID><Name>Jamie McMurray</Name><LeadingLaps>16</LeadingLaps><Laps>188</Laps><Earnings>236,345</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>38</LeadingLaps><Laps>188</Laps><Earnings>185,410</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1341</DriverID><Name>Ricky Stenhouse Jr.</Name><LeadingLaps>6</LeadingLaps><Laps>188</Laps><Earnings>187,596</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>310</DriverID><Name>Paul Menard</Name><LeadingLaps>0</LeadingLaps><Laps>188</Laps><Earnings>154,726</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>304</DriverID><Name>Kyle Busch</Name><LeadingLaps>9</LeadingLaps><Laps>188</Laps><Earnings>162,068</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1530</RaceID><Race_Date>10/27/2013</Race_Date><Race_Time>02:00 PM</Race_Time><RaceName>Goody's Headache Relief Shot 500</RaceName><TrackName>Martinsville Speedway</TrackName><Location>Ridgeway, VA</Location><TV_Listing>ESPN</TV_Listing><Laps>500</Laps><TrackLength>0.526</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>22</DriverID><Name>Jeff Gordon</Name><LeadingLaps>78</LeadingLaps><Laps>500</Laps><Earnings>188,796</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>202</LeadingLaps><Laps>500</Laps><Earnings>177,736</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>60</LeadingLaps><Laps>500</Laps><Earnings>141,478</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>433</DriverID><Name>Brad Keselowski</Name><LeadingLaps>0</LeadingLaps><Laps>500</Laps><Earnings>153,436</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>123</LeadingLaps><Laps>500</Laps><Earnings>144,046</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1531</RaceID><Race_Date>11/03/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>AAA Texas 500</RaceName><TrackName>Texas Motor Speedway</TrackName><Location>Fort Worth, TX</Location><TV_Listing>ESPN</TV_Listing><Laps>334</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>255</LeadingLaps><Laps>334</Laps><Earnings>484,211</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>337,810</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>1306</DriverID><Name>Joey Logano</Name><LeadingLaps>1</LeadingLaps><Laps>334</Laps><Earnings>256,393</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>3</LeadingLaps><Laps>334</Laps><Earnings>238,776</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>0</LeadingLaps><Laps>334</Laps><Earnings>180,585</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1532</RaceID><Race_Date>11/10/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>AdvoCare 500</RaceName><TrackName>Phoenix International Raceway</TrackName><Location>Avondale, AZ</Location><TV_Listing>ESPN</TV_Listing><Laps>312</Laps><TrackLength>1.0</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>25</DriverID><Name>Kevin Harvick</Name><LeadingLaps>70</LeadingLaps><Laps>312</Laps><Earnings>263,386</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>109</DriverID><Name>Kasey Kahne</Name><LeadingLaps>41</LeadingLaps><Laps>312</Laps><Earnings>171,715</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>27</DriverID><Name>Jimmie Johnson</Name><LeadingLaps>1</LeadingLaps><Laps>312</Laps><Earnings>182,326</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>2</LeadingLaps><Laps>312</Laps><Earnings>131,135</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>18</DriverID><Name>Kurt Busch</Name><LeadingLaps>0</LeadingLaps><Laps>312</Laps><Earnings>137,630</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><Listing><RaceID>1533</RaceID><Race_Date>11/17/2013</Race_Date><Race_Time>03:00 PM</Race_Time><RaceName>Ford EcoBoost 400</RaceName><TrackName>Homestead-Miami Speedway</TrackName><Location>Homestead, FL</Location><TV_Listing>ESPN</TV_Listing><Laps>267</Laps><TrackLength>1.5</TrackLength><RaceResults><RaceResultsListing><FinishPosition>1</FinishPosition><DriverID>490</DriverID><Name>Denny Hamlin</Name><LeadingLaps>72</LeadingLaps><Laps>267</Laps><Earnings>322,350</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>2</FinishPosition><DriverID>28</DriverID><Name>Matt Kenseth</Name><LeadingLaps>144</LeadingLaps><Laps>267</Laps><Earnings>293,251</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>3</FinishPosition><DriverID>20</DriverID><Name>Dale Earnhardt Jr.</Name><LeadingLaps>28</LeadingLaps><Laps>267</Laps><Earnings>203,860</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>4</FinishPosition><DriverID>266</DriverID><Name>Martin Truex Jr.</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>179,435</Earnings><Status>Running</Status></RaceResultsListing><RaceResultsListing><FinishPosition>5</FinishPosition><DriverID>431</DriverID><Name>Clint Bowyer</Name><LeadingLaps>0</LeadingLaps><Laps>267</Laps><Earnings>167,968</Earnings><Status>Running</Status></RaceResultsListing></RaceResults></Listing><time_stamp> January 13, 2014, at 11:34 AM ET </time_stamp></message>
diff --git a/test/xml/scoresxml-no-locations.xml b/test/xml/scoresxml-no-locations.xml
new file mode 100644
--- /dev/null
+++ b/test/xml/scoresxml-no-locations.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Scores 1.0/EN" "scoresxml.dtd"><message><XML_File_ID>20160285</XML_File_ID><heading>BC-BLP+P26:P56*  7  7 1R14:56</heading><game_id>50719</game_id><schedule_id>50719</schedule_id><category>Scores</category><sport>CBASK-W</sport><seasontype>Regular</seasontype><game><vteam id="P26">Campbell</vteam><hteam id="P56">Gardner-Webb</hteam><vscore>7</vscore><hscore>7</hscore><time_r>14:56</time_r><status numeral="1" type="P">1 Half</status></game><time_stamp> January 16, 2014, at 11:17 AM ET </time_stamp></message>
diff --git a/test/xml/scoresxml.dtd b/test/xml/scoresxml.dtd
new file mode 100644
--- /dev/null
+++ b/test/xml/scoresxml.dtd
@@ -0,0 +1,27 @@
+<!ELEMENT XML_File_ID (#PCDATA)>
+<!ELEMENT heading (#PCDATA)>
+<!ELEMENT game_id (#PCDATA)>
+<!ELEMENT schedule_id (#PCDATA)>
+<!ELEMENT tsnupdate (#PCDATA)>
+<!ELEMENT category (#PCDATA)>
+<!ELEMENT sport (#PCDATA)>
+<!ELEMENT seasontype (#PCDATA)>
+<!ELEMENT vteam (#PCDATA)>
+<!ELEMENT hteam (#PCDATA)>
+<!ELEMENT vscore (#PCDATA)>
+<!ELEMENT hscore (#PCDATA)>
+<!ELEMENT time_r (#PCDATA)>
+<!ELEMENT status (#PCDATA)>
+<!ELEMENT game ( ( vteam, hteam, vscore, hscore, time_r?, status, notes? ) )>
+<!ELEMENT time_stamp (#PCDATA)>
+<!ELEMENT message ( ( XML_File_ID, heading, game_id, schedule_id, tsnupdate?, category, sport, location*, seasontype, game, time_stamp ) )>
+<!ELEMENT city (#PCDATA)>
+<!ELEMENT state (#PCDATA)>
+<!ELEMENT country (#PCDATA)>
+<!ELEMENT location ( ( city, state, country ) )>
+<!ELEMENT notes (#PCDATA)>
+
+<!ATTLIST vteam id CDATA #REQUIRED>
+<!ATTLIST hteam id CDATA #REQUIRED>
+<!ATTLIST status numeral CDATA #REQUIRED>
+<!ATTLIST status type CDATA #REQUIRED>
diff --git a/test/xml/scoresxml.xml b/test/xml/scoresxml.xml
new file mode 100644
--- /dev/null
+++ b/test/xml/scoresxml.xml
@@ -0,0 +1,1 @@
+<?xml version="1.0" standalone="no" ?><!DOCTYPE message PUBLIC "-//TSN//DTD Scores 1.0/EN" "scoresxml.dtd"><message><XML_File_ID>20160114</XML_File_ID><heading>BC-ADi+129:143*  0  0 0</heading><game_id>18166</game_id><schedule_id>18166</schedule_id><category>Scores</category><sport>NHL</sport><location><city>Montreal</city><state>QUEBEC</state><country>CANADA</country></location><location><city>Ottawa</city><state>ONTARIO</state><country>CANADA</country></location><seasontype>Regular</seasontype><game><vteam id="129">Montreal</vteam><hteam id="143">Ottawa</hteam><vscore>0</vscore><hscore>0</hscore><status numeral="0" type="i">0 Period</status><notes>Ottawa - Right Wing Chris Neil (1/16, lower body) is probable for Thursday's   game against Montreal.</notes></game><time_stamp> January 16, 2014, at 10:39 AM ET </time_stamp></message>
