--- PowerTimer.py.orig	2016-04-18 14:30:14.047289961 +0100
+++ PowerTimer.py	2016-04-18 14:30:18.887313255 +0100
@@ -244,10 +244,17 @@
 					Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished powertimer wants to set your\n%s %s to standby. Do that now?") % (getMachineBrand(), getMachineName()), timeout = 180)
 			elif self.afterEvent == AFTEREVENT.DEEPSTANDBY:
 				if NavigationInstance.instance.RecordTimer.isRecording() or abs(NavigationInstance.instance.RecordTimer.getNextRecordingTime() - time()) <= 900 or abs(NavigationInstance.instance.RecordTimer.getNextZapTime() - time()) <= 900:
 					self.do_backoff()
 					# retry
+# GML:3
+# If this is the first backoff of a repeating timer remember the original
+# begin/end times, so that we can use *these* when setting up the repeat.
+#
+					if self.repeated and not hasattr(self, "real_begin"):
+						self.real_begin = self.begin
+						self.real_end = self.end
 					self.begin = time() + self.backoff
 					if self.end <= self.begin:
 						self.end = self.begin
 					return False
 				if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open
@@ -404,10 +411,16 @@
 			# no, sort it into active list
 			insort(self.timer_list, w)
 		else:
 			# yes. Process repeated, and re-add.
 			if w.repeated:
+# GML:3
+# If we have saved original begin/end times for a backed off timer
+# restore those values now
+				if hasattr(w, "real_begin"):
+					w.begin = w.real_begin
+					w.end = w.real_end
 				w.processRepeated()
 				w.state = PowerTimerEntry.StateWaiting
 				self.addTimerEntry(w)
 			else:
 				# Remove old timers as set in config
