Index: MediaPortal/MediaPortal.Base/language/strings_de.xml
===================================================================
--- MediaPortal/MediaPortal.Base/language/strings_de.xml	(revision 26374)
+++ MediaPortal/MediaPortal.Base/language/strings_de.xml	(working copy)
@@ -1874,6 +1874,8 @@
     <String id="200040">Skip Stufe entfernen</String>
     <String id="200041">Empfangs-Details</String>
     <String id="200042">Unterkanäle</String>
+    <String id="990000">Wöchentlich an Tag X auf diesem Kanal</String>
+    <String id="990001">{0} immer auf {1}</String>    
     <String id="200043">Aufnahmen aufräumen</String>
     <String id="200044">Ungültige Aufnahmen</String>
     <String id="200045">Gesehene und ungültige Aufnahmen</String>
Index: MediaPortal/MediaPortal.Base/language/strings_en.xml
===================================================================
--- MediaPortal/MediaPortal.Base/language/strings_en.xml	(revision 26374)
+++ MediaPortal/MediaPortal.Base/language/strings_en.xml	(working copy)
@@ -1879,6 +1879,8 @@
     <String id="200019">Press the Finish button to close this wizard</String>
     <String id="200020">Finish</String>
     <String id="200021">TV Set-up - EPG</String>
+    <String id="990000">Weekly on this channel</String>
+    <String id="990001">{0} on channel {1}</String>	
     <String id="200022">MediaPortal has found the following tv-cards:</String>
     <String id="200023">Press the Next button to configure these cards</String>
     <String id="200024">TV Set-up</String>
Index: TvEngine3/TVLibrary/Plugins/ConflictsManager/ConflictsManager.cs
===================================================================
--- TvEngine3/TVLibrary/Plugins/ConflictsManager/ConflictsManager.cs	(revision 26374)
+++ TvEngine3/TVLibrary/Plugins/ConflictsManager/ConflictsManager.cs	(working copy)
@@ -154,6 +154,7 @@
       getWeeklySchedules(scheduleList, scheduleListToParse);
       getWeekendsSchedules(scheduleList, scheduleListToParse);
       getWorkingDaysSchedules(scheduleList, scheduleListToParse);
+      getWeeklyEveryTimeOnThisChannelSchedules(scheduleList, scheduleListToParse);
       getEveryTimeOnEveryChannelSchedules(scheduleList, scheduleListToParse);
       getEveryTimeOnThisChannelSchedules(scheduleList, scheduleListToParse);
       removeCanceledSchedules(scheduleListToParse);
@@ -691,6 +692,44 @@
     }
 
     /// <summary>
+    /// Gets the Weekly every time on this channel schedules.
+    /// </summary>
+    /// <param name="schedulesList">The schedules list.</param>
+    /// <returns></returns>
+    private void getWeeklyEveryTimeOnThisChannelSchedules(IList<Schedule> schedulesList, IList<Schedule> refFillList)
+    {
+       TvBusinessLayer layer = new TvBusinessLayer();
+       foreach (Schedule schedule in schedulesList)
+       {
+           ScheduleRecordingType scheduleType = (ScheduleRecordingType)schedule.ScheduleType;
+           if (schedule.Canceled != Schedule.MinSchedule) continue;
+           if (scheduleType != ScheduleRecordingType.WeeklyEveryTimeOnThisChannel) continue;
+           Channel channel = Channel.Retrieve(schedule.IdChannel);
+           IList<Program> programsList = layer.SearchMinimalPrograms(DateTime.Now, DateTime.Now.AddMonths(1), schedule.ProgramName, channel);
+           if (programsList != null)
+           {
+               foreach (Program program in programsList)
+                {
+                  if (program.StartTime.DayOfWeek == schedule.StartTime.DayOfWeek)
+                  {
+                    Schedule incomingSchedule = schedule.Clone();
+                    incomingSchedule.IdChannel = program.IdChannel;
+                    incomingSchedule.ProgramName = program.Title;
+                    incomingSchedule.StartTime = program.StartTime;
+                    incomingSchedule.EndTime = program.EndTime;
+ 
+                    incomingSchedule.PreRecordInterval = schedule.PreRecordInterval;
+                    incomingSchedule.PostRecordInterval = schedule.PostRecordInterval;
+                    refFillList.Add(incomingSchedule);
+                  }
+                }
+            }//foreach (Program _program in _programsList)
+        }//foreach (Schedule _Schedule in schedulesList)
+        layer = null;
+        foreach (Schedule sched in refFillList) schedulesList.Remove(sched);
+    }
+	
+    /// <summary>
     /// Removes every cancled schedule.
     /// </summary>
     /// <param name="refFillList">The schedules list.</param>
Index: TvEngine3/TVLibrary/SetupTv/Sections/TvSchedules.cs
===================================================================
--- TvEngine3/TVLibrary/SetupTv/Sections/TvSchedules.cs	(revision 26374)
+++ TvEngine3/TVLibrary/SetupTv/Sections/TvSchedules.cs	(working copy)
@@ -83,6 +83,11 @@
             item.SubItems.Add("Once");
             item.SubItems.Add(String.Format("{0}", schedule.StartTime.ToString("dd-MM-yyyy HH:mm:ss", mmddFormat)));
             break;
+          case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+            item.ImageIndex = 0;
+            item.SubItems.Add("Weekly Always");
+            item.SubItems.Add(schedule.StartTime.DayOfWeek.ToString());
+            break;
           case ScheduleRecordingType.EveryTimeOnThisChannel:
             item.ImageIndex = 0;
             item.SubItems.Add("Always");
Index: TvEngine3/TVLibrary/TVDatabase/Program.cs
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/Program.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TVDatabase/Program.cs	(working copy)
@@ -690,6 +690,26 @@
       return ObjectFactory.GetCollection<Program>(stmt.Execute());
     }
 
+    public static IList<Program> RetrieveWeeklyEveryTimeOnThisChannel(DateTime startTime, DateTime endTime, string title, int channelId)
+    {
+        //select * from 'foreigntable'
+        SqlBuilder sb = new SqlBuilder(StatementType.Select, typeof (Program));
+
+        // where foreigntable.foreignkey = ourprimarykey
+        sb.AddConstraint(Operator.Equals, "Title", title);
+        sb.AddConstraint(Operator.Equals, "idChannel", channelId);
+        sb.AddConstraint(Operator.GreaterThanOrEquals, "startTime", DateTime.Now);
+        sb.AddConstraint(Operator.LessThanOrEquals, "endTime", DateTime.MaxValue);
+
+        AddWeekdayConstraint(sb, "startTime", ((int)startTime.DayOfWeek + 1).ToString());
+        // passing true indicates that we'd like a list of elements, i.e. that no primary key
+        // constraints from the type being retrieved should be added to the statement
+        SqlStatement stmt = sb.GetStatement(true);
+
+        // execute the statement/query and create a collection of User instances from the result set
+        return ObjectFactory.GetCollection<Program>(stmt.Execute());
+    }	
+
     public static IList<Program> RetrieveEveryTimeOnEveryChannel(string title)
     {
       return  RetrieveByTitleAndTimesInterval(title, DateTime.Now, DateTime.MaxValue);
Index: TvEngine3/TVLibrary/TVDatabase/Schedule.cs
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/Schedule.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TVDatabase/Schedule.cs	(working copy)
@@ -42,7 +42,8 @@
     EveryTimeOnThisChannel,
     EveryTimeOnEveryChannel,
     Weekends,
-    WorkingDays
+    WorkingDays,
+    WeeklyEveryTimeOnThisChannel
   }
 
   /// <summary>
@@ -664,6 +665,23 @@
             }
             break;
 
+          case (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+            List<Program> prgsWeeklyEveryTimeOnThisChannel = (List<Program>)Program.RetrieveWeeklyEveryTimeOnThisChannel(schedule.startTime, schedule.endTime, schedule.programName, schedule.ReferencedChannel().IdChannel);
+
+            if (prgsWeeklyEveryTimeOnThisChannel != null && prgsWeeklyEveryTimeOnThisChannel.Count > 0) 
+            {
+              foreach (Program prgWeeklyEveryTimeOnThisChannel in prgsWeeklyEveryTimeOnThisChannel)
+              {
+                if (!schedule.IsSerieIsCanceled(prgWeeklyEveryTimeOnThisChannel.StartTime))
+                {
+                  prgWeeklyEveryTimeOnThisChannel.IsRecordingOncePending = false;
+                  prgWeeklyEveryTimeOnThisChannel.IsRecordingSeriesPending = !clear;
+                  prgWeeklyEveryTimeOnThisChannel.Persist();
+                }
+              }
+            }
+            break;
+			
           case (int)ScheduleRecordingType.Weekends:
             List<Program> prgsWeekends =
               (List<Program>)
@@ -745,7 +763,8 @@
     public static bool IsPartialRecording(Schedule schedule, Program prg) 
     {
       if (schedule.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnEveryChannel ||
-          schedule.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel)
+          schedule.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel ||
+		  schedule.ScheduleType == (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel)
       {
         return false;
       }
@@ -1119,6 +1138,16 @@
             return true;
           }
           break;
+        case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+          if (program.Title == ProgramName && program.IdChannel == IdChannel && StartTime.DayOfWeek == program.StartTime.DayOfWeek)
+          {
+            if (filterCanceledRecordings && IsSerieIsCanceled(program.StartTime))
+            {
+              return false;
+            }
+            return true;
+          }
+          break;
         case ScheduleRecordingType.Daily:
           if (program.IdChannel == IdChannel)
           {
Index: TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/BusinessLayer.cs
===================================================================
--- TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/BusinessLayer.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TVDatabase/TvBusinessLayer/BusinessLayer.cs	(working copy)
@@ -3134,8 +3134,36 @@
         return recordings;
       }
 
+      IList<Program> programs;
+      if (rec.ScheduleType == (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel)
+      {
+           //Log.Debug("get {0} {1} EveryTimeOnThisChannel", rec.ProgramName, rec.ReferencedChannel().Name);
+           programs = layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, rec.ReferencedChannel());
+           foreach (Program prog in programs)
+           {
+               // dtDay.DayOfWeek == rec.StartTime.DayOfWeek
+               // Log.Debug("BusinessLayer.cs Program prog in programs WeeklyEveryTimeOnThisChannel: {0} {1} prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek {2} == {3}", rec.ProgramName, rec.ReferencedChannel().Name, prog.StartTime.DayOfWeek, rec.StartTime.DayOfWeek);
+               if (prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek && rec.IsRecordingProgram(prog, false))
+               {
+                   Schedule recNew = rec.Clone();
+                   recNew.ScheduleType = (int)ScheduleRecordingType.Once;
+                   recNew.IdChannel = prog.IdChannel;
+                   recNew.StartTime = prog.StartTime;
+                   recNew.EndTime = prog.EndTime;
+                   recNew.Series = true;
+                   if (rec.IsSerieIsCanceled(recNew.StartTime))
+                   {
+                     recNew.Canceled = recNew.StartTime;
+                   }
+                   recordings.Add(recNew);
 
-      IList<Program> programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel
+                   //Log.Debug("BusinessLayer.cs Added Recording WeeklyEveryTimeOnThisChannel: {0} {1} prog.StartTime.DayOfWeek == rec.StartTime.DayOfWeek {2} == {3}", rec.ProgramName, rec.ReferencedChannel().Name, prog.StartTime.DayOfWeek, rec.StartTime.DayOfWeek);
+               }
+           }
+           return recordings;
+      }
+
+      programs = rec.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel
                                   ? layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName,
                                                                 rec.ReferencedChannel())
                                   : layer.SearchMinimalPrograms(dtDay, dtDay.AddDays(days), rec.ProgramName, null);
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVConflicts.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVConflicts.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVConflicts.cs	(working copy)
@@ -305,6 +305,21 @@
             strType = GUILocalizeStrings.Get(649);
             item.Label2 = String.Format("{0} {1} {2}", strType, day, strTime);
             break;
+          case (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+            switch (rec.StartTime.DayOfWeek)
+            {
+                case DayOfWeek.Monday: day = GUILocalizeStrings.Get(11); break;
+                case DayOfWeek.Tuesday: day = GUILocalizeStrings.Get(12); break;
+                case DayOfWeek.Wednesday: day = GUILocalizeStrings.Get(13); break;
+                case DayOfWeek.Thursday: day = GUILocalizeStrings.Get(14); break;
+                case DayOfWeek.Friday: day = GUILocalizeStrings.Get(15); break;
+                case DayOfWeek.Saturday: day = GUILocalizeStrings.Get(16); break;
+                default: day = GUILocalizeStrings.Get(17); break;
+            }
+
+            item.Label = rec.ProgramName;
+            item.Label2 = GUILocalizeStrings.Get(990001, new object[] { day, rec.ReferencedChannel().DisplayName });
+            break;
           case (int)ScheduleRecordingType.EveryTimeOnThisChannel:
             item.Label = rec.ProgramName;
             item.Label2 = GUILocalizeStrings.Get(650, new object[] {rec.ReferencedChannel().DisplayName});
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TvNewScheduleSearchType.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TvNewScheduleSearchType.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TvNewScheduleSearchType.cs	(working copy)
@@ -314,6 +314,9 @@
         case 6: //Weekend
           rec.ScheduleType = (int)ScheduleRecordingType.Weekends;
           break;
+        case 7://everytime weekly, this channel
+          rec.ScheduleType = (int) ScheduleRecordingType.WeeklyEveryTimeOnThisChannel;
+          break;
       }
 
 
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVPriorities.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVPriorities.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVPriorities.cs	(working copy)
@@ -309,6 +309,7 @@
                                        rec.StartTime.ToShortDateString(),
                                        rec.StartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat),
                                        rec.EndTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat));
+		string day;
         switch ((ScheduleRecordingType)rec.ScheduleType)
         {
           case ScheduleRecordingType.Once:
@@ -347,7 +348,6 @@
             break;
 
           case ScheduleRecordingType.Weekly:
-            string day;
             switch (rec.StartTime.DayOfWeek)
             {
               case DayOfWeek.Monday:
@@ -379,6 +379,21 @@
             strType = GUILocalizeStrings.Get(649);
             item.Label2 = String.Format("{0} {1} {2}", strType, day, strTime);
             break;
+          case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+            switch (rec.StartTime.DayOfWeek)
+            {
+                case DayOfWeek.Monday: day = GUILocalizeStrings.Get(11); break;
+                case DayOfWeek.Tuesday: day = GUILocalizeStrings.Get(12); break;
+                case DayOfWeek.Wednesday: day = GUILocalizeStrings.Get(13); break;
+                case DayOfWeek.Thursday: day = GUILocalizeStrings.Get(14); break;
+                case DayOfWeek.Friday: day = GUILocalizeStrings.Get(15); break;
+                case DayOfWeek.Saturday: day = GUILocalizeStrings.Get(16); break;
+                default: day = GUILocalizeStrings.Get(17); break;
+            }
+
+            item.Label = rec.ProgramName;
+            item.Label2 = GUILocalizeStrings.Get(990001, new object[] { day, rec.ReferencedChannel().DisplayName });
+            break;
           case ScheduleRecordingType.EveryTimeOnThisChannel:
             item.Label = rec.ProgramName;
             item.Label2 = GUILocalizeStrings.Get(650);
@@ -575,6 +590,7 @@
         }
         dlg.Add(GUILocalizeStrings.Get(weekEndTool.GetText(DayType.Record_WorkingDays)));
         dlg.Add(GUILocalizeStrings.Get(weekEndTool.GetText(DayType.Record_WeekendDays)));
+        dlg.Add(GUILocalizeStrings.Get(990000));// 990000=Weekly everytime on this channel		
         switch ((ScheduleRecordingType)rec.ScheduleType)
         {
           case ScheduleRecordingType.Once:
@@ -598,6 +614,9 @@
           case ScheduleRecordingType.Weekends:
             dlg.SelectedLabel = 6;
             break;
+          case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+            dlg.SelectedLabel = 7;
+            break;
         }
         dlg.DoModal(GetID);
         if (dlg.SelectedLabel == -1)
@@ -634,6 +653,10 @@
             rec.ScheduleType = (int)ScheduleRecordingType.Weekends;
             rec.Canceled = Schedule.MinSchedule;
             break;
+          case 7://weekly everytime, this channel
+            rec.ScheduleType = (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel;
+            rec.Canceled = Schedule.MinSchedule;
+            break;
         }
         rec.Persist();
         TvServer server = new TvServer();
@@ -670,6 +693,9 @@
         case ScheduleRecordingType.Weekly:
           strType = GUILocalizeStrings.Get(679); //Weekly
           break;
+        case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+          strType = GUILocalizeStrings.Get(990000);//Weekly Everytime on this channel
+          break;
       }
       return strType;
     }
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVProgramInfo.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVProgramInfo.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVProgramInfo.cs	(working copy)
@@ -1091,7 +1091,8 @@
           || (schedule.ScheduleType == (int)ScheduleRecordingType.Weekly)
           || (schedule.ScheduleType == (int)ScheduleRecordingType.WorkingDays)
           || (schedule.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnEveryChannel)
-          || (schedule.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel))
+          || (schedule.ScheduleType == (int)ScheduleRecordingType.EveryTimeOnThisChannel)
+          || (schedule.ScheduleType == (int) ScheduleRecordingType.WeeklyEveryTimeOnThisChannel))          
       {
         GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_MENU);
         if (dlg == null)
@@ -1326,6 +1327,7 @@
         }
         dlg.Add(GUILocalizeStrings.Get(weekEndTool.GetText(DayType.Record_WorkingDays)));
         dlg.Add(GUILocalizeStrings.Get(weekEndTool.GetText(DayType.Record_WeekendDays)));
+        dlg.AddLocalizedString(990000); // 990000=Weekly everytime on this channel
 
         dlg.DoModal(GetID);
         if (dlg.SelectedLabel == -1)
@@ -1357,6 +1359,9 @@
           case 6: //Weekends
             scheduleType = (int)ScheduleRecordingType.Weekends;
             break;
+          case 7://Weekly everytime, this channel
+            scheduleType = (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel;
+            break;
         }
         CreateProgram(CurrentProgram, scheduleType);
 
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVScheduler.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVScheduler.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVScheduler.cs	(working copy)
@@ -658,6 +658,7 @@
         {
           string strTime;
           string strType;
+          string day;
 
           switch (rec.ScheduleType)
           {
@@ -696,7 +697,6 @@
               item.Label2 = String.Format("{0} {1}", strType, strTime);
               break;
             case (int)ScheduleRecordingType.Weekly:
-              string day;
               switch (rec.StartTime.DayOfWeek)
               {
                 case DayOfWeek.Monday:
@@ -734,6 +734,33 @@
             case (int)ScheduleRecordingType.EveryTimeOnEveryChannel:
               item.Label2 = GUILocalizeStrings.Get(651);
               break;
+           case (int) ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+             switch (rec.StartTime.DayOfWeek)
+             {
+                 case DayOfWeek.Monday:
+                     day = GUILocalizeStrings.Get(11);
+                     break;
+                 case DayOfWeek.Tuesday:
+                     day = GUILocalizeStrings.Get(12);
+                     break;
+                 case DayOfWeek.Wednesday:
+                     day = GUILocalizeStrings.Get(13);
+                     break;
+                 case DayOfWeek.Thursday:
+                     day = GUILocalizeStrings.Get(14);
+                     break;
+                 case DayOfWeek.Friday:
+                     day = GUILocalizeStrings.Get(15);
+                     break;
+                 case DayOfWeek.Saturday:
+                     day = GUILocalizeStrings.Get(16);
+                     break;
+                 default:
+                     day = GUILocalizeStrings.Get(17);
+                     break;
+             }
+             item.Label2 = GUILocalizeStrings.Get(990001, new object[] { day, rec.ReferencedChannel().DisplayName });
+             break;              
           }
         }
         else
@@ -1048,6 +1075,9 @@
           case ScheduleRecordingType.Weekends:
             dlg.SelectedLabel = 6;
             break;
+          case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+            dlg.SelectedLabel = 7;
+            break;
         }
         dlg.DoModal(GetID);
         if (dlg.SelectedLabel == -1)
@@ -1084,6 +1114,10 @@
             rec.ScheduleType = (int)ScheduleRecordingType.Weekends;
             rec.Canceled = Schedule.MinSchedule;
             break;
+          case 7://Weekly everytime, this channel
+            rec.ScheduleType = (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel;
+            rec.Canceled = Schedule.MinSchedule;
+            break;
         }
         rec.Persist();
         TvServer server = new TvServer();
@@ -1163,6 +1197,9 @@
         case ScheduleRecordingType.Weekly:
           strType = GUILocalizeStrings.Get(679); //Weekly
           break;
+        case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+          strType = String.Format(GUILocalizeStrings.Get(990000), schedule.ReferencedChannel().DisplayName); ;//Weekly Everytime on this channel
+          break;
       }
       return strType;
     }
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVSearch.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVSearch.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVSearch.cs	(working copy)
@@ -1243,6 +1243,7 @@
         }
         dlg.Add(GUILocalizeStrings.Get(weekEndTool.GetText(DayType.Record_WorkingDays)));
         dlg.Add(GUILocalizeStrings.Get(weekEndTool.GetText(DayType.Record_WeekendDays)));
+        dlg.Add(GUILocalizeStrings.Get(990000));  // 990000=Weekly everytime on this channel
 
         dlg.DoModal(GetID);
         if (dlg.SelectedLabel == -1)
@@ -1300,6 +1301,9 @@
           case 7: //Weekends
             rec.ScheduleType = (int)ScheduleRecordingType.Weekends;
             break;
+          case 8://Weekly everytime, this channel
+            rec.ScheduleType = (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel;
+            break;
         }
         rec.Persist();
         server.OnNewSchedule();
Index: TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVUtil.cs
===================================================================
--- TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVUtil.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvPlugin/TvPlugin/TVUtil.cs	(working copy)
@@ -111,6 +111,9 @@
           programs = Program.RetrieveEveryTimeOnEveryChannel(rec.ProgramName, _days);
           break;
 
+        case (int)ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+          programs = Program.RetrieveWeeklyEveryTimeOnThisChannel(startTime, endTime, rec.ProgramName, rec.ReferencedChannel().IdChannel);
+          break;
       }
       recordings = AddProgramsToSchedulesList(rec, programs);
       return recordings;
Index: TvEngine3/TVLibrary/TvService/Scheduler/Scheduler.cs
===================================================================
--- TvEngine3/TVLibrary/TvService/Scheduler/Scheduler.cs	(revision 26374)
+++ TvEngine3/TVLibrary/TvService/Scheduler/Scheduler.cs	(working copy)
@@ -666,10 +666,43 @@
         case ScheduleRecordingType.EveryTimeOnEveryChannel:
           isTimeToRecord = IsTimeToRecordEveryTimeOnEveryChannel(schedule);
           break;
+
+        case ScheduleRecordingType.WeeklyEveryTimeOnThisChannel:
+          isTimeToRecord = IsTimeToRecordWeeklyEveryTimeOnThisChannel(schedule, currentTime);
+          break;
       }
       return isTimeToRecord;
     }
 
+    private bool IsTimeToRecordWeeklyEveryTimeOnThisChannel(Schedule schedule, DateTime currentTime)
+    {
+      bool isTimeToRecord = false;    
+      TvDatabase.Program current = schedule.ReferencedChannel().GetProgramAt(currentTime.AddMinutes(schedule.PreRecordInterval), schedule.ProgramName);
+
+        if (current != null)
+        {
+            // (currentTime.DayOfWeek == schedule.StartTime.DayOfWeek)
+            // Log.Debug("Scheduler.cs WeeklyEveryTimeOnThisChannel: {0} {1} current.StartTime.DayOfWeek == schedule.StartTime.DayOfWeek {2} == {3}", schedule.ProgramName, schedule.ReferencedChannel().Name, current.StartTime.DayOfWeek, schedule.StartTime.DayOfWeek);
+            if (current.StartTime.DayOfWeek == schedule.StartTime.DayOfWeek) 
+            {
+                if (currentTime >= current.StartTime.AddMinutes(-schedule.PreRecordInterval) &&
+                    currentTime <= current.EndTime.AddMinutes(schedule.PostRecordInterval))
+                {
+                    if (!schedule.IsSerieIsCanceled(current.StartTime))
+                    {
+                       bool createSpawnedOnceSchedule = CreateSpawnedOnceSchedule(schedule, current);
+                       if (createSpawnedOnceSchedule)
+                       {
+                           ResetTimer(); //lets process the spawned once schedule at once.
+                       }
+                    }            
+                }
+	        }
+        }        
+      
+      return isTimeToRecord;
+    }
+
     private bool IsTimeToRecordEveryTimeOnEveryChannel(Schedule schedule)
     {
       bool isTimeToRecord = false;
