diff --git a/mythtv/libs/libmyth/programinfo.cpp b/mythtv/libs/libmyth/programinfo.cpp
index 4d7e25e..23550eb 100644
--- a/mythtv/libs/libmyth/programinfo.cpp
+++ b/mythtv/libs/libmyth/programinfo.cpp
@@ -4019,7 +4019,15 @@ static const char *from_recordedseek_mark_desc =
     " AND type = :TYPE"
     " AND offset <= :QUERY_ARG"
     " ORDER BY chanid DESC, starttime DESC, type DESC, mark DESC LIMIT 1;";
-bool ProgramInfo::QueryKeyFrameInfo(uint64_t * result, uint64_t position_or_keyframe, bool backwards, MarkTypes type, const char *from_filemarkup_asc, const char *from_filemarkup_desc, const char *from_recordedseek_asc,const char *from_recordedseek_desc) const
+
+bool ProgramInfo::QueryKeyFrameInfo(uint64_t * result,
+                                    uint64_t position_or_keyframe,
+                                    bool backwards,
+                                    MarkTypes type,
+                                    const char *from_filemarkup_asc,
+                                    const char *from_filemarkup_desc,
+                                    const char *from_recordedseek_asc,
+                                    const char *from_recordedseek_desc) const
 {
     MSqlQuery query(MSqlQuery::InitCon());
 
@@ -4091,21 +4099,41 @@ bool ProgramInfo::QueryKeyFrameInfo(uint64_t * result, uint64_t position_or_keyf
 
 }
 
-bool ProgramInfo::QueryPositionKeyFrame(uint64_t *keyframe, uint64_t position, bool backwards) const
+bool ProgramInfo::QueryPositionKeyFrame(uint64_t *keyframe, uint64_t position,
+                                        bool backwards) const
 {
-   return QueryKeyFrameInfo(keyframe, position, backwards, MARK_GOP_BYFRAME, from_filemarkup_mark_asc, from_filemarkup_mark_desc, from_recordedseek_mark_asc, from_recordedseek_mark_desc);
+   return QueryKeyFrameInfo(keyframe, position, backwards, MARK_GOP_BYFRAME,
+                            from_filemarkup_mark_asc,
+                            from_filemarkup_mark_desc,
+                            from_recordedseek_mark_asc,
+                            from_recordedseek_mark_desc);
 }
-bool ProgramInfo::QueryKeyFramePosition(uint64_t *position, uint64_t keyframe, bool backwards) const
+bool ProgramInfo::QueryKeyFramePosition(uint64_t *position, uint64_t keyframe,
+                                        bool backwards) const
 {
-   return QueryKeyFrameInfo(position, keyframe, backwards, MARK_GOP_BYFRAME, from_filemarkup_offset_asc, from_filemarkup_offset_desc, from_recordedseek_offset_asc, from_recordedseek_offset_desc);
+   return QueryKeyFrameInfo(position, keyframe, backwards, MARK_GOP_BYFRAME,
+                            from_filemarkup_offset_asc,
+                            from_filemarkup_offset_desc,
+                            from_recordedseek_offset_asc,
+                            from_recordedseek_offset_desc);
 }
-bool ProgramInfo::QueryDurationKeyFrame(uint64_t *keyframe, uint64_t duration, bool backwards) const
+bool ProgramInfo::QueryDurationKeyFrame(uint64_t *keyframe, uint64_t duration,
+                                        bool backwards) const
 {
-   return QueryKeyFrameInfo(keyframe, duration, backwards, MARK_DURATION_MS, from_filemarkup_mark_asc, from_filemarkup_mark_desc, from_recordedseek_mark_asc, from_recordedseek_mark_desc);
+   return QueryKeyFrameInfo(keyframe, duration, backwards, MARK_DURATION_MS,
+                            from_filemarkup_mark_asc,
+                            from_filemarkup_mark_desc,
+                            from_recordedseek_mark_asc,
+                            from_recordedseek_mark_desc);
 }
-bool ProgramInfo::QueryKeyFrameDuration(uint64_t *duration, uint64_t keyframe, bool backwards) const
+bool ProgramInfo::QueryKeyFrameDuration(uint64_t *duration, uint64_t keyframe,
+                                        bool backwards) const
 {
-   return QueryKeyFrameInfo(duration, keyframe, backwards, MARK_DURATION_MS, from_filemarkup_offset_asc, from_filemarkup_offset_desc, from_recordedseek_offset_asc, from_recordedseek_offset_desc);
+   return QueryKeyFrameInfo(duration, keyframe, backwards, MARK_DURATION_MS,
+                            from_filemarkup_offset_asc,
+                            from_filemarkup_offset_desc,
+                            from_recordedseek_offset_asc,
+                            from_recordedseek_offset_desc);
 }
 
 /// \brief Store aspect ratio of a frame in the recordedmark table
diff --git a/mythtv/libs/libmyth/programinfo.h b/mythtv/libs/libmyth/programinfo.h
index 0503174..dbaed33 100644
--- a/mythtv/libs/libmyth/programinfo.h
+++ b/mythtv/libs/libmyth/programinfo.h
@@ -627,11 +627,20 @@ class MPUBLIC ProgramInfo
     void SavePositionMapDelta(frm_pos_map_t &, MarkTypes type) const;
 
     // Get position/duration for keyframe and vice versa
-    bool QueryKeyFrameInfo(uint64_t *, uint64_t position_or_keyframe, bool backwards, MarkTypes type, const char *from_filemarkup_asc, const char *from_filemarkup_desc, const char *from_recordedseek_asc,const char *from_recordedseek_desc) const;
-    bool QueryKeyFramePosition(uint64_t *, uint64_t keyframe, bool backwards) const;
-    bool QueryPositionKeyFrame(uint64_t *, uint64_t position, bool backwards) const;
-    bool QueryKeyFrameDuration(uint64_t *, uint64_t keyframe, bool backwards) const;
-    bool QueryDurationKeyFrame(uint64_t *, uint64_t duration, bool backwards) const;
+    bool QueryKeyFrameInfo(uint64_t *, uint64_t position_or_keyframe,
+                           bool backwards,
+                           MarkTypes type, const char *from_filemarkup_asc,
+                           const char *from_filemarkup_desc,
+                           const char *from_recordedseek_asc,
+                           const char *from_recordedseek_desc) const;
+    bool QueryKeyFramePosition(uint64_t *, uint64_t keyframe,
+                               bool backwards) const;
+    bool QueryPositionKeyFrame(uint64_t *, uint64_t position,
+                               bool backwards) const;
+    bool QueryKeyFrameDuration(uint64_t *, uint64_t keyframe,
+                               bool backwards) const;
+    bool QueryDurationKeyFrame(uint64_t *, uint64_t duration,
+                               bool backwards) const;
 
     // Get/set all markup
     struct MarkupEntry
diff --git a/mythtv/libs/libmythservicecontracts/services/dvrServices.h b/mythtv/libs/libmythservicecontracts/services/dvrServices.h
index 81c02b1..2302a7e 100644
--- a/mythtv/libs/libmythservicecontracts/services/dvrServices.h
+++ b/mythtv/libs/libmythservicecontracts/services/dvrServices.h
@@ -45,7 +45,7 @@
 class SERVICE_PUBLIC DvrServices : public Service  //, public QScriptable ???
 {
     Q_OBJECT
-    Q_CLASSINFO( "version"    , "6.1" );
+    Q_CLASSINFO( "version"    , "7.0" );
     Q_CLASSINFO( "RemoveRecorded_Method",                       "POST" )
     Q_CLASSINFO( "DeleteRecording_Method",                      "POST" )
     Q_CLASSINFO( "UnDeleteRecording",                           "POST" )
@@ -112,12 +112,12 @@ class SERVICE_PUBLIC DvrServices : public Service  //, public QScriptable ???
                                                                  const QDateTime &StartTime,
                                                                  bool  Watched) = 0;
 
-        virtual long              GetSavedBookmark      ( int              RecordedId,
+        virtual long              GetSavedBookmark       ( int              RecordedId,
                                                            int              ChanId,
                                                            const QDateTime &StartTime,
                                                            const QString   &OffsetType ) = 0;
 
-        virtual bool              SetSavedBookmark      ( int              RecordedId,
+        virtual bool              SetSavedBookmark       ( int              RecordedId,
                                                            int              ChanId,
                                                            const QDateTime &StartTime,
                                                            const QString   &OffsetType,
diff --git a/mythtv/programs/mythbackend/services/dvr.cpp b/mythtv/programs/mythbackend/services/dvr.cpp
index cf62cff..30547cb 100644
--- a/mythtv/programs/mythbackend/services/dvr.cpp
+++ b/mythtv/programs/mythbackend/services/dvr.cpp
@@ -271,9 +271,9 @@ bool Dvr::UpdateRecordedWatchedStatus ( int RecordedId,
 /////////////////////////////////////////////////////////////////////////////
 
 long Dvr::GetSavedBookmark( int RecordedId,
-                                        int chanid,
-                                        const QDateTime &recstarttsRaw,
-                                        const QString &offsettype )
+                            int chanid,
+                            const QDateTime &recstarttsRaw,
+                            const QString &offsettype )
 {
     if ((RecordedId <= 0) &&
         (chanid <= 0 || !recstarttsRaw.isValid()))
@@ -287,11 +287,11 @@ long Dvr::GetSavedBookmark( int RecordedId,
     uint64_t offset;
     bool isend=true;
     uint64_t position = ri.QueryBookmark();
-    if (offsettype == "Position"){
+    if (offsettype.toLower() == "position"){
        ri.QueryKeyFramePosition(&offset, position, isend);
        return offset;
     }
-    else if (offsettype == "Duration"){
+    else if (offsettype.toLower() == "duration"){
         ri.QueryKeyFrameDuration(&offset, position, isend);
         return offset;
     }
@@ -304,15 +304,18 @@ long Dvr::GetSavedBookmark( int RecordedId,
 /////////////////////////////////////////////////////////////////////////////
 
 bool Dvr::SetSavedBookmark( int RecordedId,
-                                        int chanid,
-                                        const QDateTime &recstarttsRaw,
-                                        const QString &offsettype,
-                                        long Offset )
+                            int chanid,
+                            const QDateTime &recstarttsRaw,
+                            const QString &offsettype,
+                            long Offset )
 {
     if ((RecordedId <= 0) &&
         (chanid <= 0 || !recstarttsRaw.isValid()))
         throw QString("Recorded ID or Channel ID and StartTime appears invalid.");
 
+    if (Offset < 0)
+        throw QString("Offset must be >= 0.");
+
     RecordingInfo ri;
     if (RecordedId > 0)
         ri = RecordingInfo(RecordedId);
@@ -320,11 +323,11 @@ bool Dvr::SetSavedBookmark( int RecordedId,
         ri = RecordingInfo(chanid, recstarttsRaw.toUTC());
     uint64_t position;
     bool isend=true;
-    if (offsettype == "Position"){
+    if (offsettype.toLower() == "position"){
        if (!ri.QueryPositionKeyFrame(&position, Offset, isend))
            return false;
     }
-    else if (offsettype == "Duration"){
+    else if (offsettype.toLower() == "duration"){
         if (!ri.QueryDurationKeyFrame(&position, Offset, isend))
            return false;
     }
@@ -333,6 +336,7 @@ bool Dvr::SetSavedBookmark( int RecordedId,
     ri.SaveBookmark(position);
     return true;
 }
+
 /////////////////////////////////////////////////////////////////////////////
 //
 /////////////////////////////////////////////////////////////////////////////
diff --git a/mythtv/programs/mythbackend/services/dvr.h b/mythtv/programs/mythbackend/services/dvr.h
index 735993d..1d60856 100644
--- a/mythtv/programs/mythbackend/services/dvr.h
+++ b/mythtv/programs/mythbackend/services/dvr.h
@@ -75,12 +75,12 @@ class Dvr : public DvrServices
                                                         const QDateTime &StartTime,
                                                         bool  Watched);
 
-       long              GetSavedBookmark    ( int              RecordedId,
+       long              GetSavedBookmark     ( int              RecordedId,
                                                 int              ChanId,
                                                 const QDateTime &StartTime,
                                                 const QString   &OffsetType );
 
-       bool              SetSavedBookmark    ( int              RecordedId,
+       bool              SetSavedBookmark     ( int              RecordedId,
                                                 int              ChanId,
                                                 const QDateTime &StartTime,
                                                 const QString   &OffsetType,
