Index: conf/poker.server.xml.in
===================================================================
--- conf/poker.server.xml.in	(revision 6210)
+++ conf/poker.server.xml.in	(working copy)
@@ -6,7 +6,7 @@
    if a PHPSESSID is involved (auth module) cookie_timeout must be 
       greater than PHPSESSID timeout
  -->
-<server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="server.xsd" ping="20" autodeal="yes" max_joined="4000" max_queued_client_packets="500" cleanup="yes" simultaneous="4" max_missed_round="5" verbose="0" chat="yes" memcached="127.0.0.1:11211" session_timeout="60" session_check="10" cookie_timeout="1200" sng_timeout="3600" remove_completed="1" admin="false" poker_network_version="2.0.0">
+<server xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="server.xsd" ping="20" autodeal="yes" max_joined="4000" max_queued_client_packets="500" cleanup="yes" simultaneous="4" max_missed_round="5" verbose="0" chat="yes" memcached="127.0.0.1:11211" session_timeout="60" session_check="10" cookie_timeout="1200" sng_timeout="3600" remove_completed="1" remove_canceled="1" admin="false" poker_network_version="2.0.0">
 
 <!-- max_queued_client_packets defaults to 500 if you leave it out.
      max_missed_round defaults to 10 if you leave it out.
Index: pokernetwork/pokerservice.py
===================================================================
--- pokernetwork/pokerservice.py	(revision 6210)
+++ pokernetwork/pokerservice.py	(working copy)
@@ -222,6 +222,7 @@
             module = imp.load_source("monitor", monitor.content)
             self.monitor_plugins.append(getattr(module, "handle_event"))
         self.remove_completed = self.settings.headerGetInt("/server/@remove_completed")
+        self.remove_canceled = self.settings.headerGetInt("/server/@remove_canceled")
 
     def setupTourneySelectInfo(self):
         #
@@ -1220,7 +1221,7 @@
         cursor = self.db.cursor(DictCursor)
         criterion = split(string, "\t")
         tourney_sql = "SELECT tourneys.*,COUNT(user2tourney.user_serial) AS registered FROM tourneys LEFT JOIN(user2tourney) ON(tourneys.serial = user2tourney.tourney_serial) "
-        tourney_sql += "WHERE (state != 'complete' OR (state = 'complete' AND finish_time > UNIX_TIMESTAMP(NOW() - INTERVAL %d HOUR))) " % self.remove_completed
+        tourney_sql += "WHERE ((state != 'complete' AND state != 'canceled') OR (state = 'complete' AND finish_time > UNIX_TIMESTAMP(NOW() - INTERVAL %d HOUR)) OR (state = 'canceled' AND %d = 0)) " % (self.remove_completed, self.remove_canceled)
         schedule_sql = "SELECT * FROM tourneys_schedule AS tourneys WHERE respawn = 'n' AND active = 'y'"
         sql = ''
         if len(criterion) > 1:
Index: tests/test-pokerservice.py.in
===================================================================
--- tests/test-pokerservice.py.in	(revision 6210)
+++ tests/test-pokerservice.py.in	(working copy)
@@ -103,7 +103,7 @@
 
 
 settings_xml = """<?xml version="1.0" encoding="ISO-8859-1"?>
-<server verbose="6" ping="300000" autodeal="yes" max_joined="1000" simultaneous="4" chat="yes" remove_completed="1" >
+<server verbose="6" ping="300000" autodeal="yes" max_joined="1000" simultaneous="4" chat="yes" remove_completed="1" remove_canceled="1" >
   <delays autodeal="18" round="12" position="60" showdown="30" finish="18" />
 
   <table name="Table1" variant="holdem" betting_structure="100-200-no-limit" seats="10" player_timeout="60" currency_serial="1" />
@@ -318,7 +318,7 @@
         cursor.close()
 
 list_table_xml = """<?xml version="1.0" encoding="ISO-8859-1"?>
-<server verbose="6" ping="300000" autodeal="yes" max_joined="1000" simultaneous="4" chat="yes" remove_completed="1" >
+<server verbose="6" ping="300000" autodeal="yes" max_joined="1000" simultaneous="4" chat="yes" remove_completed="1" remove_canceled="1" >
   <delays autodeal="18" round="12" position="60" showdown="30" finish="18" />
 
   <table name="NL HE 10-max 100/200" variant="holdem" betting_structure="100-200-no-limit" seats="10" player_timeout="60" currency_serial="1" />
@@ -912,6 +912,18 @@
         self.assertEquals(len(tourneys),1)
         self.assertEquals(tourneys[0]["name"], "sitngo2")
 
+    def test05_with_old_canceled(self):
+        self.service.startService()
+        self.createUsers()
+        tourneys = self.service.tourneySelect('')
+        self.assertEquals(len(tourneys),2)
+        db = self.service.db
+        db.db.query("UPDATE tourneys SET finish_time = UNIX_TIMESTAMP(NOW() - INTERVAL 2 HOUR), state = 'canceled' WHERE name = 'regular1'")
+        self.assertEquals(self.service.remove_canceled, 1)
+        tourneys = self.service.tourneySelect('')
+        self.assertEquals(len(tourneys),1)
+        self.assertEquals(tourneys[0]["name"], "sitngo2")
+
 class PlayerPlacesTestCase(PokerServiceTestCaseBase):
 
     def test00_not_anywhere(self):
Index: tests/test-tourneytablebalance.py.in
===================================================================
--- tests/test-tourneytablebalance.py.in	(revision 6210)
+++ tests/test-tourneytablebalance.py.in	(working copy)
@@ -79,7 +79,7 @@
 pokertournament.shuffler = ConstantPlayerShuffler()
 
 settings_xml = """<?xml version="1.0" encoding="ISO-8859-1"?>
-<server verbose="6" ping="300000" autodeal="yes" max_joined="1000" simultaneous="4" chat="yes" remove_completed="1" >
+<server verbose="6" ping="300000" autodeal="yes" max_joined="1000" simultaneous="4" chat="yes" remove_completed="1" remove_canceled="1" >
   <delays autodeal="18" round="12" position="60" showdown="30" finish="18" />
 
   <table name="Table1" variant="holdem" betting_structure="100-200-no-limit" seats="10" player_timeout="60" currency_serial="1" />
