Index: includes/programs.php
===================================================================
--- includes/programs.php	(revision 10396)
+++ includes/programs.php	(working copy)
@@ -275,6 +275,7 @@
     var $is_movie;
 
     var $timestretch;
+    var $playgroup;
 
     var $credits = array();
 
@@ -321,7 +322,8 @@
             $this->recpriority     = $data[36];
             $this->airdate         = date('Y-m-d', $data[37]);
             $this->hasairdate      = $data[38];
-            $this->timestretch     = $data[39];
+            $this->playgroup       = $data[39];
+            $this->timestretch     = '';            # Not printed by ToStringList() 
             $this->recpriority2    = $data[40];
         // Is this a previously-recorded program?
             if (!empty($this->filename)) {
Index: includes/recording_schedules.php
===================================================================
--- includes/recording_schedules.php	(revision 10396)
+++ includes/recording_schedules.php	(working copy)
@@ -143,6 +143,7 @@
     var $findid;
     var $transcoder;
     var $parentid;
+    var $playgroup;
 
     var $texttype;
     var $channel;
@@ -251,7 +252,7 @@
     // Update the type, in case it changed
         $this->type = $new_type;
     // Update the record
-        $result = mysql_query('REPLACE INTO record (recordid,type,chanid,starttime,startdate,endtime,enddate,search,title,subtitle,description,profile,recpriority,category,maxnewest,inactive,maxepisodes,autoexpire,startoffset,endoffset,recgroup,dupmethod,dupin,station,seriesid,programid,autocommflag,findday,findtime,findid,autotranscode,transcoder,parentid,tsdefault,autouserjob1,autouserjob2,autouserjob3,autouserjob4) values ('
+        $result = mysql_query('REPLACE INTO record (recordid,type,chanid,starttime,startdate,endtime,enddate,search,title,subtitle,description,profile,recpriority,category,maxnewest,inactive,maxepisodes,autoexpire,startoffset,endoffset,recgroup,dupmethod,dupin,station,seriesid,programid,autocommflag,findday,findtime,findid,autotranscode,transcoder,parentid,tsdefault,autouserjob1,autouserjob2,autouserjob3,autouserjob4,playgroup) values ('
                                 .escape($this->recordid, true)             .','
                                 .escape($this->type)                       .','
                                 .escape($this->chanid)                     .','
@@ -289,7 +290,8 @@
                                 .escape($this->autouserjob1)               .','
                                 .escape($this->autouserjob2)               .','
                                 .escape($this->autouserjob3)               .','
-                                .escape($this->autouserjob4)               .')')
+                                .escape($this->autouserjob4)               .','
+				.escape($this->playgroup)                  .')')
             or trigger_error('SQL Error: '.mysql_error(), FATAL);
     // Get the id that was returned
         $recordid = mysql_insert_id();
@@ -512,4 +514,31 @@
         echo '</select>';
     }
 
+/**
+ * prints a <select> of the various playback groups available
+/**/
+    function playgroup_select($this_playgroup, $name = 'playgroup', $js = '', $id = '')
+    {
+        static $playgroups = array();
+        if(!sizeof($playgroups))
+        {
+            $res = mysql_query('SELECT name FROM playgroup');
+            while($row = mysql_fetch_row($res))
+                $playgroups[$row[0]] = $row[0];
+            mysql_free_result($res);
+        }
 
+        echo "<select name=\"$name\"";
+        if(strlen($js))
+           echo " onchange=\"$js\" id=\"playgroup_$id\" name=\"playgroup_$id\"";
+        echo ">\n";
+        foreach($playgroups as $playgroup)
+        {
+            echo "\t<option value=\"" . html_entities($playgroup) . '"';
+            if($this_playgroup == $playgroup)
+                echo ' SELECTED';
+            echo '>' . html_entities($playgroup) . "</option>\n";
+        }
+        echo "</select>\n";
+        return;
+    }
Index: includes/css.php
===================================================================
--- includes/css.php	(revision 10396)
+++ includes/css.php	(working copy)
@@ -31,14 +31,15 @@
     // Scan the $Categories hash for any matches
         else {
             global $Categories;
-            foreach ($Categories as $cat => $details) {
-                if (!$details[1])
-                    continue;
-                if (preg_match('/'.$details[1].'/', $category)) {
-                    $class[] = $cache[$category] = 'cat_'.$cat;
-                    break;
+            if(is_array($Categories))
+                foreach ($Categories as $cat => $details) {
+                    if (!$details[1])
+                        continue;
+                    if (preg_match('/'.$details[1].'/', $category)) {
+                        $class[] = $cache[$category] = 'cat_'.$cat;
+                        break;
+                    }
                 }
-            }
         }
     // No category found?
         if (!$cache[$category])
Index: modules/settings/playgroup.php
===================================================================
--- modules/settings/playgroup.php	(revision 0)
+++ modules/settings/playgroup.php	(revision 0)
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Configure MythTV playback groups 
+ *
+ * @url         $URL$
+ * @date        $Date$
+ * @version     $Revision$
+ * @author      $Author$
+ * @license     GPL
+ *
+ * @package     MythWeb
+ * @subpackage  Settings
+ *
+/**/
+// We need the list of available playgroups
+    require_once 'includes/recording_schedules.php';
+
+// Load a playgroup to edit
+    $row = array();
+    if(isset($_GET['playgroup'])) {
+        $sh = $db->query('SELECT * FROM playgroup WHERE name = ?', $_GET['playgroup']);
+        if($sh->num_rows() == 1)
+           $row = $sh->fetch_assoc();
+    }
+    $name        = isset($row['name']) ? $row['name'] : '';
+    $titlematch  = isset($row['titlematch']) ? $row['titlematch'] : '';
+    $skipahead   = isset($row['skipahead']) ? $row['skipahead'] : '';
+    $skipback    = isset($row['skipback']) ? $row['skipback'] : '';
+    $timestretch = isset($row['timestretch']) ? $row['timestretch'] : '';
+    $jump        = isset($row['jump']) ? $row['jump'] : '';
+
+// Save changes
+    if(isset($_POST['save']))
+        $db->query('REPLACE INTO playgroup (name, titlematch, skipahead, skipback, timestretch, jump) VALUES (?, ?, ?, ?, ?, ?)', $_POST['name'], $_POST['titlematch'], $_POST['skipahead'], $_POST['skipback'], $_POST['timestretch'], $_POST['jump']);
+
+// Delete group
+    if(isset($_POST['delete']))
+        $db->query('DELETE FROM playgroup WHERE name = ?', $_POST['name']);
+
+// Load the class for this page
+    require_once tmpl_dir.'playgroup.php';
+
+    exit(0);
Index: modules/settings/init.php
===================================================================
--- modules/settings/init.php	(revision 10396)
+++ modules/settings/init.php	(working copy)
@@ -23,5 +23,6 @@
                                                         'channels'  => t('MythTV channel info'),
                                                         'keys'      => t('MythTV key bindings'),
                                                         'settings'  => t('MythTV settings table'),
+							'playgroup' => t('MythTV playback group editor')
                                                        ),
                                 );
Index: modules/settings/tmpl/default/playgroup.php
===================================================================
--- modules/settings/tmpl/default/playgroup.php	(revision 0)
+++ modules/settings/tmpl/default/playgroup.php	(revision 0)
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Configure MythTV playback groups 
+ *
+ * @url         $URL$
+ * @date        $Date$
+ * @version     $Revision$
+ * @author      $Author$
+ * @license     GPL
+ *
+ * @package     MythWeb
+ * @subpackage  Settings
+ *
+/**/
+
+
+// Set the desired page title
+    $page_title = 'MythWeb - '.t('Playback Group Editor');
+
+// Print the page header
+    require 'modules/_shared/tmpl/'.tmpl.'/header.php';
+
+?>
+<table align="center" width="40%" cellspacing="2" cellpadding="2">
+<tr>
+    <td width="50%" class="command command_border_l command_border_t command_border_b command_border_r" align="center">
+        <form class="form" method="get" action="<?php echo root ?>settings/playgroup">
+        <table width="100%" border="0" cellspacing="0" cellpadding="2">
+        <tr>
+            <td nowrap align="center"><?php echo t('Edit existing group') ?>:&nbsp;&nbsp;</td>
+                <td><?php playgroup_select(NULL); ?></td>
+            <td align="center"><input type="submit" class="submit" value="<?php echo t('Load Group') ?>"></td>
+        </tr>
+        </table>
+        </form>
+        </td>
+</tr>
+</table>
+
+<form class="form" method="post" action="<?php echo root ?>settings/playgroup">
+
+<table border="0" cellpadding="4" cellspacing="2" class="list small" align="center">
+<tr class="menu large" align="center">
+    <td colspan="6"><?php echo t('Playback Group Editor') ?></td>
+</tr><tr class="menu" align="center">
+    <td><?php echo t('Name') ?></td>
+    <td><?php echo t('Title Match') ?></td>
+    <td><?php echo t('Skip Ahead') ?></td>
+    <td><?php echo t('Skip Back') ?></td>
+    <td><?php echo t('Time Stretch') ?></td>
+    <td><?php echo t('Jump') ?></td>
+</tr>
+<tr class="menu">
+    <td><input type="text" name="name" value="<?php echo $name ?>" /></td>
+    <td><input type="text" name="titlematch" value="<?php echo $titlematch ?>" /></td>
+    <td><input type="text" name="skipahead" value="<?php echo $skipahead ?>" /></td>
+    <td><input type="text" name="skipback" value="<?php echo $skipback ?>" /></td>
+    <td><input type="text" name="timestretch" value="<?php echo $timestretch ?>" /></td>
+    <td><input type="text" name="jump" value="<?php echo $jump ?>" /></td>
+</tr>
+</table>
+
+<p align="center">
+<input type="submit" name="save" value="<?php echo t('Save') ?>">
+<input type="submit" name="delete" value="<?php echo t('Delete') ?>">
+</p>
+
+</form>
+<?php
+
+// Print the page footer
+    require 'modules/_shared/tmpl/'.tmpl.'/footer.php';
+
Index: modules/_shared/lang/English_GB.lang
===================================================================
--- modules/_shared/lang/English_GB.lang	(revision 10396)
+++ modules/_shared/lang/English_GB.lang	(working copy)
@@ -106,6 +106,7 @@
 "Duplicates"
 "Duration"
 "Edit"
+"Edit existing group"
 "Edit keybindings on"
 "Edit MythWeb and some MythTV settings."
 "Edit settings for"
@@ -182,6 +183,7 @@
 "Listing &quot;Jump to&quot;"
 "Listing Time Key"
 "Listings"
+"Load Group"
 "Logs"
 "Low"
 "Manual"
@@ -202,6 +204,7 @@
 "MythTV channel info"
 "MythTV global defaults"
 "MythTV key bindings"
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
 "MythVideo Artwork Dir"
@@ -244,6 +247,8 @@
 "Past Year"
 "People"
 "People Search"
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
 "Please search for something."
 "plot"
@@ -414,6 +419,8 @@
 "Showing all programs."
     Showing all programmes.
 "SI Units?"
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
 "Star character"
@@ -434,10 +441,12 @@
 "The requested recording schedule has been deleted."
 "Thursday"
 "Time"
+"Time Stretch"
 "Time Stretch Default"
 "Timeslot size"
 "title"
 "Title"
+"Title Match"
 "Title Search"
 "Today"
 "Tomorrow"
Index: modules/_shared/lang/Spanish.lang
===================================================================
--- modules/_shared/lang/Spanish.lang	(revision 10396)
+++ modules/_shared/lang/Spanish.lang	(working copy)
@@ -198,6 +198,7 @@
     Duración
 "Edit"
     Editar
+"Edit existing group"
 "Edit keybindings on"
     Editar Teclas en
 "Edit MythWeb and some MythTV settings."
@@ -332,6 +333,7 @@
     Hora Listado
 "Listings"
     Listados
+"Load Group"
 "Logs"
 "Low"
     Bajo
@@ -360,6 +362,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     Vínculos Teclas MythTV
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
     Estado MythTV
@@ -427,6 +430,8 @@
     Gente
 "People Search"
     Búsqueda gente
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     Tenga cuidado al alterar esta tabla sin saber lo que hace, puede romper el funcionamiento de MythTV
 "Please search for something."
@@ -654,6 +659,8 @@
     Mostrando todos los programas
 "SI Units?"
     ¿Unidades SI?
+"Skip Ahead"
+"Skip Back"
 "sourceid"
     id fuente
 "Special Searches"
@@ -692,6 +699,7 @@
     Jueves
 "Time"
     Hora
+"Time Stretch"
 "Time Stretch Default"
     Ajuste de tiempo por defecto
 "Timeslot size"
@@ -699,6 +707,7 @@
     título
 "Title"
     Título
+"Title Match"
 "Title Search"
     Buscar título
 "Today"
Index: modules/_shared/lang/French.lang
===================================================================
--- modules/_shared/lang/French.lang	(revision 10396)
+++ modules/_shared/lang/French.lang	(working copy)
@@ -161,6 +161,7 @@
     Doublonner
 "Duration"
 "Edit"
+"Edit existing group"
 "Edit keybindings on"
     Editer les touches sur
 "Edit MythWeb and some MythTV settings."
@@ -275,6 +276,7 @@
     Lister Touches de temps
 "Listings"
     Liste
+"Load Group"
 "Logs"
 "Low"
     faible
@@ -295,6 +297,7 @@
 "MythTV channel info"
 "MythTV global defaults"
 "MythTV key bindings"
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
 "MythVideo Artwork Dir"
@@ -347,6 +350,8 @@
 "Past Year"
 "People"
 "People Search"
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     Nous vous pr&eacute;venons que modifier les touches sans savoir ce que vous fa&icirc;tes peut s&eacute;rieusement endomager le fonctionnement de MythTV
 "Please search for something."
@@ -552,6 +557,8 @@
 "Showing all programs."
 "SI Units?"
     Units mtriques?
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
 "Star character"
@@ -584,12 +591,14 @@
     Jeudi
 "Time"
     Heure
+"Time Stretch"
 "Time Stretch Default"
 "Timeslot size"
 "title"
     Titre
 "Title"
     Titre
+"Title Match"
 "Title Search"
 "Today"
     Aujourd&acute;hui
Index: modules/_shared/lang/Swedish.lang
===================================================================
--- modules/_shared/lang/Swedish.lang	(revision 10396)
+++ modules/_shared/lang/Swedish.lang	(working copy)
@@ -200,6 +200,7 @@
     Längd
 "Edit"
     Redigera
+"Edit existing group"
 "Edit keybindings on"
     Editera knappar på
 "Edit MythWeb and some MythTV settings."
@@ -335,6 +336,7 @@
     TV-tablå tid
 "Listings"
     TV-tablåer
+"Load Group"
 "Logs"
     Logg
 "Low"
@@ -364,6 +366,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     MythTV tangentbindningar
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
     MythTV-status
@@ -431,6 +434,8 @@
     Person
 "People Search"
     Sök person
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     OBS! Genom att ändra dessa inställningar utan att veta vad du gör kan du allvarligt störa MythTVs funktionalitet.
 "Please search for something."
@@ -658,6 +663,8 @@
     Visar alla program.
 "SI Units?"
     SI-enheter?
+"Skip Ahead"
+"Skip Back"
 "sourceid"
     käll-id
 "Special Searches"
@@ -696,6 +703,7 @@
     Torsdag
 "Time"
     Tid
+"Time Stretch"
 "Time Stretch Default"
     Förvalt tempo
 "Timeslot size"
@@ -703,6 +711,7 @@
     titel
 "Title"
     Titel
+"Title Match"
 "Title Search"
     Sök titel
 "Today"
Index: modules/_shared/lang/Danish.lang
===================================================================
--- modules/_shared/lang/Danish.lang	(revision 10396)
+++ modules/_shared/lang/Danish.lang	(working copy)
@@ -179,6 +179,7 @@
     Varighed
 "Edit"
     Ændre
+"Edit existing group"
 "Edit keybindings on"
     Rediger tastaturgenveje for
 "Edit MythWeb and some MythTV settings."
@@ -295,6 +296,7 @@
     Programoversigt tid
 "Listings"
     Programoversigt
+"Load Group"
 "Logs"
 "Low"
     Lav
@@ -318,6 +320,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     MythTV taste indstillinger
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
 "MythVideo Artwork Dir"
@@ -374,6 +377,8 @@
 "Past Year"
 "People"
 "People Search"
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     Bemærk at ved at ændre i denne tabel uden at vide hvad du laver, kan du ødelægge mythtvs funktioner.
 "Please search for something."
@@ -589,6 +594,8 @@
 "Showing all programs."
 "SI Units?"
     SI enheder?
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
     Specielle søgninger
@@ -624,6 +631,7 @@
     Torsdag
 "Time"
     Tidspunkt
+"Time Stretch"
 "Time Stretch Default"
     Standard Afspilnings hastighed
 "Timeslot size"
@@ -631,6 +639,7 @@
     titel
 "Title"
     Titel
+"Title Match"
 "Title Search"
 "Today"
     I dag
Index: modules/_shared/lang/Dutch.lang
===================================================================
--- modules/_shared/lang/Dutch.lang	(revision 10396)
+++ modules/_shared/lang/Dutch.lang	(working copy)
@@ -200,6 +200,7 @@
     Lengte
 "Edit"
     Bewerken
+"Edit existing group"
 "Edit keybindings on"
     Toetsbindingen bewerken op
 "Edit MythWeb and some MythTV settings."
@@ -334,6 +335,7 @@
     Weergave Tijd Gids
 "Listings"
     Programmagids
+"Load Group"
 "Logs"
     Logboek
 "Low"
@@ -363,6 +365,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     MythTV toetsbindingen
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
     MythTV status
@@ -430,6 +433,8 @@
     Personen
 "People Search"
     Personen zoeken
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     Waarschuwing! Als u niet weet wat u doet, kan het veranderen van deze tabel de werking van MythTV ernstig verstoren.
 "Please search for something."
@@ -656,6 +661,8 @@
     Alle programma's laten zien
 "SI Units?"
     SI eenheden?
+"Skip Ahead"
+"Skip Back"
 "sourceid"
     bron
 "Special Searches"
@@ -694,6 +701,7 @@
     Donderdag
 "Time"
     Tijd
+"Time Stretch"
 "Time Stretch Default"
     TimeStretch Standaard
 "Timeslot size"
@@ -701,6 +709,7 @@
     titel
 "Title"
     Titel
+"Title Match"
 "Title Search"
     Titel zoeken
 "Today"
Index: modules/_shared/lang/German.lang
===================================================================
--- modules/_shared/lang/German.lang	(revision 10396)
+++ modules/_shared/lang/German.lang	(working copy)
@@ -200,6 +200,7 @@
     Dauer
 "Edit"
     Bearbeiten
+"Edit existing group"
 "Edit keybindings on"
     Tastaturbelegung ändern für
 "Edit MythWeb and some MythTV settings."
@@ -332,6 +333,7 @@
 "Listing Time Key"
 "Listings"
     TV Programm
+"Load Group"
 "Logs"
     Logs
 "Low"
@@ -361,6 +363,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     MythTV Tastaturbelegung
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
     MythTV Status
@@ -427,6 +430,8 @@
     Leute
 "People Search"
     Suche nach Darsteller
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     Achtung! Falls diese Tabelle ohne das nötige Hintergrundwissen verändert wird, könnte MythTVs Funktionalität nachhaltig gestört werden.
 "Please search for something."
@@ -654,6 +659,8 @@
     Zeige alle Sendungen.
 "SI Units?"
     SI Einheiten?
+"Skip Ahead"
+"Skip Back"
 "sourceid"
     Source ID
 "Special Searches"
@@ -690,6 +697,7 @@
     Donnerstag
 "Time"
     Zeit
+"Time Stretch"
 "Time Stretch Default"
     Zeitraffer Vorgabewert
 "Timeslot size"
@@ -697,6 +705,7 @@
     Titel
 "Title"
     Titel
+"Title Match"
 "Title Search"
     Titel Suche
 "Today"
Index: modules/_shared/lang/Japanese.lang
===================================================================
--- modules/_shared/lang/Japanese.lang	(revision 10396)
+++ modules/_shared/lang/Japanese.lang	(working copy)
@@ -185,6 +185,7 @@
     時間
 "Edit"
     編集
+"Edit existing group"
 "Edit keybindings on"
     キーバインド編集対象
 "Edit MythWeb and some MythTV settings."
@@ -312,6 +313,7 @@
     一覧 タイムキー
 "Listings"
     番組表
+"Load Group"
 "Logs"
     ログ
 "Low"
@@ -337,6 +339,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     MythTVキーバインド
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
     MythTVステータス
@@ -399,6 +402,8 @@
     ピープル
 "People Search"
     ピープルサーチ
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     設定項目の意味がわからないときは変更しないでください。MythTVが正常に動作しなくなります。
 "Please search for something."
@@ -623,6 +628,8 @@
     すべての番組を表示
 "SI Units?"
     SI単位を使用する
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
     スペシャル検索
@@ -659,6 +666,7 @@
     木曜日
 "Time"
     放送時間
+"Time Stretch"
 "Time Stretch Default"
     タイムストレッチ設定
 "Timeslot size"
@@ -666,6 +674,7 @@
     タイトル
 "Title"
     タイトル
+"Title Match"
 "Title Search"
     タイトルサーチ
 "Today"
Index: modules/_shared/lang/English.lang
===================================================================
--- modules/_shared/lang/English.lang	(revision 10396)
+++ modules/_shared/lang/English.lang	(working copy)
@@ -102,6 +102,7 @@
 "Duplicates"
 "Duration"
 "Edit"
+"Edit existing group"
 "Edit keybindings on"
 "Edit MythWeb and some MythTV settings."
 "Edit settings for"
@@ -177,6 +178,7 @@
 "Listing &quot;Jump to&quot;"
 "Listing Time Key"
 "Listings"
+"Load Group"
 "Logs"
 "Low"
 "Manual"
@@ -194,6 +196,7 @@
 "MythTV channel info"
 "MythTV global defaults"
 "MythTV key bindings"
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
 "MythVideo Artwork Dir"
@@ -234,6 +237,8 @@
 "Past Year"
 "People"
 "People Search"
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
 "Please search for something."
 "plot"
@@ -402,6 +407,8 @@
 "Showing all programs from the $1 group."
 "Showing all programs."
 "SI Units?"
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
 "Star character"
@@ -422,10 +429,12 @@
 "The requested recording schedule has been deleted."
 "Thursday"
 "Time"
+"Time Stretch"
 "Time Stretch Default"
 "Timeslot size"
 "title"
 "Title"
+"Title Match"
 "Title Search"
 "Today"
 "Tomorrow"
Index: modules/_shared/lang/Czech.lang
===================================================================
--- modules/_shared/lang/Czech.lang	(revision 10396)
+++ modules/_shared/lang/Czech.lang	(working copy)
@@ -135,6 +135,7 @@
 "Duplicates"
 "Duration"
 "Edit"
+"Edit existing group"
 "Edit keybindings on"
 "Edit MythWeb and some MythTV settings."
 "Edit settings for"
@@ -224,6 +225,7 @@
 "Listing Time Key"
 "Listings"
     Výpisy
+"Load Group"
 "Logs"
 "Low"
 "Manual"
@@ -245,6 +247,7 @@
 "MythTV channel info"
 "MythTV global defaults"
 "MythTV key bindings"
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
 "MythVideo Artwork Dir"
@@ -295,6 +298,8 @@
 "Past Year"
 "People"
 "People Search"
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
 "Please search for something."
 "plot"
@@ -474,6 +479,8 @@
 "Showing all programs from the $1 group."
 "Showing all programs."
 "SI Units?"
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
 "Star character"
@@ -499,12 +506,14 @@
 "Thursday"
     Čtvrtek
 "Time"
+"Time Stretch"
 "Time Stretch Default"
 "Timeslot size"
 "title"
     název
 "Title"
     Název
+"Title Match"
 "Title Search"
 "Today"
     Dnes
Index: modules/_shared/lang/Finnish.lang
===================================================================
--- modules/_shared/lang/Finnish.lang	(revision 10396)
+++ modules/_shared/lang/Finnish.lang	(working copy)
@@ -197,6 +197,7 @@
     Kesto
 "Edit"
     Muokkaa
+"Edit existing group"
 "Edit keybindings on"
     Muokkaa näppäinkomentoja
 "Edit MythWeb and some MythTV settings."
@@ -326,6 +327,7 @@
     Listauksen Aikanäppäin
 "Listings"
     Listaus
+"Load Group"
 "Logs"
     Lokit
 "Low"
@@ -351,6 +353,7 @@
 "MythTV global defaults"
 "MythTV key bindings"
     MythTV komennot
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
     MythTV Tila
@@ -414,6 +417,8 @@
 "People"
 "People Search"
     Haku Nimellä
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
     Varoitus: Näiden asetusten muokkaus voi haitata MythTV:n toimintaa.
 "Please search for something."
@@ -638,6 +643,8 @@
     Näytetään kaikki ohjelmat.
 "SI Units?"
     SI-yksiköt
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
     Edistynyt Haku
@@ -675,6 +682,7 @@
     Torstai
 "Time"
     Aika
+"Time Stretch"
 "Time Stretch Default"
     Ajan Säädön Oletus
 "Timeslot size"
@@ -682,6 +690,7 @@
     Nimike
 "Title"
     Nimike
+"Title Match"
 "Title Search"
     Haku Nimikkeellä
 "Today"
Index: modules/_shared/lang/Slovenian.lang
===================================================================
--- modules/_shared/lang/Slovenian.lang	(revision 10396)
+++ modules/_shared/lang/Slovenian.lang	(working copy)
@@ -156,6 +156,7 @@
     Duplikati
 "Duration"
 "Edit"
+"Edit existing group"
 "Edit keybindings on"
     Zamenjaj bližnjico za
 "Edit MythWeb and some MythTV settings."
@@ -269,6 +270,7 @@
     Seznam
 "Listings"
     Seznam
+"Load Group"
 "Logs"
 "Low"
     Nizka
@@ -289,6 +291,7 @@
 "MythTV channel info"
 "MythTV global defaults"
 "MythTV key bindings"
+"MythTV playback group editor"
 "MythTV settings table"
 "MythTV Status"
 "MythVideo Artwork Dir"
@@ -341,6 +344,8 @@
 "Past Year"
 "People"
 "People Search"
+"Playback Group"
+"Playback Group Editor"
 "Please be warned that by altering this table without knowing what you are doing, you could seriously disrupt mythtv functionality."
 "Please search for something."
     Prosim poiščite kaj
@@ -544,6 +549,8 @@
 "Showing all programs."
 "SI Units?"
     SI enote
+"Skip Ahead"
+"Skip Back"
 "sourceid"
 "Special Searches"
 "Star character"
@@ -576,12 +583,14 @@
     Četrtek
 "Time"
     Čas
+"Time Stretch"
 "Time Stretch Default"
 "Timeslot size"
 "title"
     Naslov
 "Title"
     Naslov
+"Title Match"
 "Title Search"
 "Today"
     Danes
Index: modules/tv/detail.php
===================================================================
--- modules/tv/detail.php	(revision 10396)
+++ modules/tv/detail.php	(working copy)
@@ -132,6 +132,7 @@
             $schedule->endoffset     = intval($_POST['endoffset']);
             $schedule->autotranscode = $_POST['autotranscode'] ? 1 : 0;
             $schedule->transcoder    = $_POST['transcoder'];
+            $schedule->playgroup     = $_POST['playgroup'];
             $schedule->tsdefault     = $_POST['timestretch'];
         // Keep track of the parent recording for overrides
             if ($_POST['record'] == rectype_override) {
Index: modules/tv/schedules_custom.php
===================================================================
--- modules/tv/schedules_custom.php	(revision 10396)
+++ modules/tv/schedules_custom.php	(working copy)
@@ -100,6 +100,7 @@
             $schedule->findday       = $_POST['findday'];
             $schedule->autotranscode = $_POST['autotranscode'] ? 1 : 0;
             $schedule->transcoder    = $_POST['transcoder'];
+            $schedule->playgroup     = $_POST['playgroup'];
         // Parse the findtime
             $schedule->findtime      = trim($_POST['findtime']);
             if ($schedule->findtime) {
Index: modules/tv/schedules_manual.php
===================================================================
--- modules/tv/schedules_manual.php	(revision 10396)
+++ modules/tv/schedules_manual.php	(working copy)
@@ -87,6 +87,7 @@
             $schedule->findtime    = date('H:m:s', $schedule->starttime);
             $schedule->autotranscode = $_POST['autotranscode'] ? 1 : 0;
             $schedule->transcoder  = $_POST['transcoder'];
+            $schedule->playgroup   = $_POST['playgroup'];
         // Figure out the title
             $channel = $Channels[$_POST['channel']];
             if (strcasecmp($_POST['title'], t('Use callsign')) == 0) {
Index: modules/tv/tmpl/default/schedules_custom.php
===================================================================
--- modules/tv/tmpl/default/schedules_custom.php	(revision 10396)
+++ modules/tv/tmpl/default/schedules_custom.php	(working copy)
@@ -160,6 +160,8 @@
                         echo ">$i</option>";
                     }
                     ?></select></dd>
+                <dt><?php echo t('Playback Group') ?>:</dt>
+                <dd><?php playgroup_select($schedule->playgroup) ?></dd>
                 <dt><?php echo t('Check for duplicates in') ?>:</dt>
                 <dd><select name="dupin"><?php
                         echo '<option value="1"';
Index: modules/tv/tmpl/default/schedules_manual.php
===================================================================
--- modules/tv/tmpl/default/schedules_manual.php	(revision 10396)
+++ modules/tv/tmpl/default/schedules_manual.php	(working copy)
@@ -113,6 +113,8 @@
                         echo ">$i</option>";
                     }
                     ?></select></dd>
+                <dt><?php echo t('Playback Group') ?>:</dt>
+                <dd><?php playgroup_select($schedule->playgroup) ?></dd>
                 <dt><?php echo t('Check for duplicates in') ?>:</dt>
                 <dd><select name="dupin"><?php
                         echo '<option value="1"';
Index: modules/tv/tmpl/default/detail.php
===================================================================
--- modules/tv/tmpl/default/detail.php	(revision 10396)
+++ modules/tv/tmpl/default/detail.php	(working copy)
@@ -371,6 +371,8 @@
                         echo ">$i</option>";
                     }
                     ?></select></dd>
+                <dt><?php echo t('Playback Group') ?>:</dt>
+                <dd><?php playgroup_select($schedule->playgroup) ?></dd>
                 <dt><?php echo t('Time Stretch Default') ?>:</dt>
                 <dd>
                     <select name="timestretch">
Index: modules/tv/tmpl/default/recorded.php
===================================================================
--- modules/tv/tmpl/default/recorded.php	(revision 10396)
+++ modules/tv/tmpl/default/recorded.php	(working copy)
@@ -68,6 +68,14 @@
                    +'&chanid='+file.chanid+'&starttime='+file.starttime);
     }
 
+    function set_playgroup(id) {
+        var file = files[id];
+        var sel  = get_element('playgroup_' + file.chanid + '.' + file.starttime);
+        submit_url('<?php echo root ?>tv/recorded?ajax&playgroup='+
+                    sel.options[sel.selectedIndex].value+
+                    '&chanid='+file.chanid+'&starttime='+file.starttime);
+    }
+
     function confirm_delete(id, forget_old) {
         var file = files[id];
         if (confirm("<?php echo t('Are you sure you want to delete the following show?') ?>\n\n     "+file.title+": "+file.subtitle)) {
@@ -325,6 +333,9 @@
              name="autoexpire_<?php echo $show->chanid, '.', $show->recstartts ?>"
              <?php if ($show->auto_expire) echo ' CHECKED' ?> onchange="set_autoexpire(<?php echo $row ?>)" />
             </span>
+        <span style="padding-right: 25px"><?php echo strtolower(t('Playback Group')) ?>:&nbsp;
+            <?php playgroup_select($show->playgroup, 'playgroup', "set_playgroup($row)", $show->chanid . '.' . $show->recstartts) ?>
+            </span>
         <?php echo t('has bookmark') ?>:&nbsp;
             <b><?php echo $show->bookmark ? t('Yes') : t('No') ?></b>
         </td>
Index: modules/tv/recorded.php
===================================================================
--- modules/tv/recorded.php	(revision 10396)
+++ modules/tv/recorded.php	(working copy)
@@ -58,18 +58,27 @@
 
 // Auto-expire
     isset($_GET['autoexpire']) or $_GET['autoexpire'] = $_POST['autoexpire'];
-    if (isset($_GET['autoexpire']) && $_GET['chanid'] && $_GET['starttime']) {
+    if (isset($_GET['autoexpire']) && $_GET['chanid'] && $_GET['starttime'])
         $sh = $db->query('UPDATE recorded
                              SET autoexpire = ?
                            WHERE chanid = ? AND starttime = FROM_UNIXTIME(?)',
                          $_GET['autoexpire'] ? 1 : 0,
                          $_GET['chanid'],
                          $_GET['starttime']);
+// Playback group edit
+    isset($_GET['playgroup']) or $_GET['playgroup'] = $_POST['playgroup'];
+    if(isset($_GET['playgroup']) && $_GET['chanid'] && $_GET['starttime'])
+        $sh = $db->query('UPDATE recorded
+                             SET playgroup = ?
+                           WHERE chanid = ? AND starttime = FROM_UNIXTIME(?)',
+                         $_GET['playgroup'],
+                         $_GET['chanid'],
+                         $_GET['starttime']);
+
     // Exit early if we're in AJAX mode.
-        if (isset($_GET['ajax'])) {
-            echo 'success';
-            exit;
-        }
+    if (isset($_GET['ajax']) && isset($_GET['playgroup'])) {
+        echo 'success';
+        exit;
     }
     else {
         /** @todo need some sort of handler here for the non-ajax stuff */
