diff --git a/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkup.h b/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkup.h
new file mode 100644
index 0000000..d132ce6
--- /dev/null
+++ b/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkup.h
@@ -0,0 +1,94 @@
+//////////////////////////////////////////////////////////////////////////////
+// Program Name: recordedMarkup.h
+// Created     : Apr. 17, 2013
+//
+// Copyright (c) 2013 Tikinou LLC <dev-team@tikinou.com>
+//
+// Licensed under the GPL v2 or later, see COPYING for details
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef RECORDEDMARKUP_H_
+#define RECORDEDMARKUP_H_
+
+#include <QVariantList>
+#include <QDateTime>
+
+#include "serviceexp.h"
+#include "datacontracthelper.h"
+
+#include "recordedMarkupItem.h"
+
+namespace DTC
+{
+
+class SERVICE_PUBLIC RecordedMarkup : public QObject
+{
+    Q_OBJECT
+    Q_CLASSINFO( "version", "1.0" );
+
+    // Q_CLASSINFO Used to augment Metadata for properties. 
+    // See datacontracthelper.h for details
+
+    Q_CLASSINFO( "Markups", "type=DTC::RecordedMarkupItem");
+
+    Q_PROPERTY( int          ChannelId      READ ChannelId       WRITE setChannelId      )
+    Q_PROPERTY( QDateTime    StartTime      READ StartTime       WRITE setStartTime      )
+
+    Q_PROPERTY( QVariantList Markups READ Markups DESIGNABLE true )
+
+    PROPERTYIMP       ( int         , ChannelId       )
+    PROPERTYIMP       ( QDateTime   , StartTime       )
+
+    PROPERTYIMP_RO_REF( QVariantList, Markups )
+
+    public:
+
+        static void InitializeCustomTypes()
+        {
+            qRegisterMetaType< RecordedMarkup   >();
+            qRegisterMetaType< RecordedMarkup*  >();
+
+            RecordedMarkupItem::InitializeCustomTypes();
+        }
+
+    public:
+
+        RecordedMarkup(QObject *parent = 0)
+            : QObject( parent ) ,
+              m_ChannelId( 0 )
+        {
+        }
+
+        RecordedMarkup( const RecordedMarkup &src )
+        {
+            Copy( src );
+        }
+
+        void Copy( const RecordedMarkup &src )
+        {
+            m_ChannelId     = src.m_ChannelId      ;
+            m_StartTime     = src.m_StartTime      ;
+
+            CopyListContents< RecordedMarkupItem >( this, m_Markups, src.m_Markups );
+        }
+
+        RecordedMarkupItem *AddNewMarkupItem()
+        {
+            // We must make sure the object added to the QVariantList has
+            // a parent of 'this'
+
+        	RecordedMarkupItem *pObject = new RecordedMarkupItem( this );
+            m_Markups.append( QVariant::fromValue<QObject *>( pObject ));
+
+            return pObject;
+        }
+
+};
+
+} // namespace DTC
+
+Q_DECLARE_METATYPE( DTC::RecordedMarkup  )
+Q_DECLARE_METATYPE( DTC::RecordedMarkup* )
+
+#endif
diff --git a/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkupItem.h b/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkupItem.h
new file mode 100644
index 0000000..5aaeacc
--- /dev/null
+++ b/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkupItem.h
@@ -0,0 +1,77 @@
+//////////////////////////////////////////////////////////////////////////////
+// Program Name: recordedMarkupItem.h
+// Created     : Apr. 17, 2013
+//
+// Copyright (c) 2013 Tikinou LLC <dev-team@tikinou.com>
+//                                          
+// Licensed under the GPL v2 or later, see COPYING for details
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef RECORDEDMARKUPITEM_H_
+#define RECORDEDMARKUPITEM_H_
+
+#include "serviceexp.h" 
+#include "datacontracthelper.h"
+#include "programtypes.h"
+
+namespace DTC
+{
+
+/////////////////////////////////////////////////////////////////////////////
+
+class SERVICE_PUBLIC RecordedMarkupItem : public QObject
+{
+    Q_OBJECT
+    Q_CLASSINFO( "version"    , "1.0" );
+
+    Q_PROPERTY( int             Mark            READ Mark             WRITE setMark           )
+    Q_PROPERTY( int             Data            READ Data             WRITE setData           )
+    Q_PROPERTY( int             DataType        READ DataType         WRITE setDataType    DESIGNABLE SerializeDetails )
+
+    PROPERTYIMP         ( int        , Mark           )
+    PROPERTYIMP         ( int        , Data           )
+    PROPERTYIMP_ENUM    ( MarkTypes  , DataType       )
+
+    // Used only by Serializer
+    PROPERTYIMP( bool, SerializeDetails )
+
+    public:
+
+        static void InitializeCustomTypes()
+        {
+            qRegisterMetaType< RecordedMarkupItem  >();
+            qRegisterMetaType< RecordedMarkupItem* >();
+        }
+
+    public:
+
+        RecordedMarkupItem(QObject *parent = 0)
+            : QObject             ( parent ),
+              m_Mark              ( 0             ),
+              m_Data              ( 0             ),
+              m_DataType          ( MARK_ALL      ),
+              m_SerializeDetails  ( true          )
+        { 
+        }
+        
+        RecordedMarkupItem( const RecordedMarkupItem &src )
+        {
+            Copy( src );
+        }
+
+        void Copy( const RecordedMarkupItem &src )
+        {
+        	m_Mark                = src.m_Mark                        ;
+        	m_Data                = src.m_Data                        ;
+        	m_DataType                = src.m_DataType                ;
+        	m_SerializeDetails    = src.m_SerializeDetails            ;
+        }
+};
+
+} // namespace DTC
+
+Q_DECLARE_METATYPE( DTC::RecordedMarkupItem  )
+Q_DECLARE_METATYPE( DTC::RecordedMarkupItem* )
+
+#endif
diff --git a/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkupList.h b/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkupList.h
new file mode 100644
index 0000000..06e7442
--- /dev/null
+++ b/mythtv/libs/libmythservicecontracts/datacontracts/recordedMarkupList.h
@@ -0,0 +1,90 @@
+//////////////////////////////////////////////////////////////////////////////
+// Program Name: recordedMarkupList.h
+// Created     : Apr. 17, 2013
+//
+// Copyright (c) 2013 Tikinou LLC <dev-team@tikinou.com>
+//                                          
+// Licensed under the GPL v2 or later, see COPYING for details
+//
+//////////////////////////////////////////////////////////////////////////////
+
+#ifndef RECORDEDMARKUPLIST_H_
+#define RECORDEDMARKUPLIST_H_
+
+#include <QDateTime>
+#include <QVariantList>
+
+#include "serviceexp.h" 
+#include "datacontracthelper.h"
+
+#include "recordedMarkup.h"
+
+namespace DTC
+{
+
+class SERVICE_PUBLIC RecordedMarkupList : public QObject
+{
+    Q_OBJECT
+    Q_CLASSINFO( "version", "1.0" );
+
+    // Q_CLASSINFO Used to augment Metadata for properties. 
+    // See datacontracthelper.h for details
+
+    Q_CLASSINFO( "RecordingMarkups", "type=DTC::RecordedMarkup");
+	Q_CLASSINFO( "AsOf"	   , "transient=true"   );
+
+    Q_PROPERTY( QDateTime    AsOf                 READ AsOf                WRITE setAsOf           )
+    Q_PROPERTY( QVariantList RecordingMarkups     READ RecordingMarkups    DESIGNABLE true         )
+
+    PROPERTYIMP       ( QDateTime   , AsOf            )
+
+    PROPERTYIMP_RO_REF( QVariantList, RecordingMarkups      )
+
+    public:
+
+        static void InitializeCustomTypes()
+        {
+            qRegisterMetaType< RecordedMarkupList  >();
+            qRegisterMetaType< RecordedMarkupList* >();
+
+            RecordedMarkup::InitializeCustomTypes();
+        }
+
+    public:
+
+        RecordedMarkupList(QObject *parent = 0)
+            : QObject         ( parent )
+        {
+        }
+        
+        RecordedMarkupList( const RecordedMarkupList &src )
+        {
+            Copy( src );
+        }
+
+        void Copy( const RecordedMarkupList &src )
+        {
+            m_AsOf          = src.m_AsOf           ;
+
+            CopyListContents< RecordedMarkup >( this, m_RecordingMarkups, src.m_RecordingMarkups );
+        }
+
+        RecordedMarkup *AddNewRecordedMarkup()
+        {
+            // We must make sure the object added to the QVariantList has
+            // a parent of 'this'
+
+            RecordedMarkup *pObject = new RecordedMarkup( this );
+            m_RecordingMarkups.append( QVariant::fromValue<QObject *>( pObject ));
+
+            return pObject;
+        }
+
+};
+
+} // namespace DTC
+
+Q_DECLARE_METATYPE( DTC::RecordedMarkupList  )
+Q_DECLARE_METATYPE( DTC::RecordedMarkupList* )
+
+#endif
diff --git a/mythtv/libs/libmythservicecontracts/libmythservicecontracts.pro b/mythtv/libs/libmythservicecontracts/libmythservicecontracts.pro
index 638aa94..11d4b46 100644
--- a/mythtv/libs/libmythservicecontracts/libmythservicecontracts.pro
+++ b/mythtv/libs/libmythservicecontracts/libmythservicecontracts.pro
@@ -40,6 +40,8 @@
 HEADERS += datacontracts/liveStreamInfo.h        datacontracts/liveStreamInfoList.h
 HEADERS += datacontracts/labelValue.h
 HEADERS += datacontracts/logMessage.h            datacontracts/logMessageList.h
+HEADERS += datacontracts/recordedMarkupItem.h    datacontracts/recordedMarkup.h
+HEADERS += datacontracts/recordedMarkupList.h
 
 SOURCES += service.cpp
 
@@ -80,6 +82,8 @@
 incDatacontracts.files += datacontracts/liveStreamInfo.h      datacontracts/liveStreamInfoList.h
 incDatacontracts.files += datacontracts/labelValue.h
 incDatacontracts.files += datacontracts/logMessage.h          datacontracts/logMessageList.h
+incDatacontracts.files += datacontracts/recordedMarkupItem.h  datacontracts/recordedMarkup.h
+incDatacontracts.files += datacontracts/recordedMarkupList.h
 
 INSTALLS += inc incServices incDatacontracts
 
diff --git a/mythtv/libs/libmythservicecontracts/services/contentServices.h b/mythtv/libs/libmythservicecontracts/services/contentServices.h
index cc851b0..d8d4206 100644
--- a/mythtv/libs/libmythservicecontracts/services/contentServices.h
+++ b/mythtv/libs/libmythservicecontracts/services/contentServices.h
@@ -19,6 +19,7 @@
 #include "service.h"
 #include "datacontracts/artworkInfoList.h"
 #include "datacontracts/liveStreamInfoList.h"
+#include "datacontracts/recordedMarkupList.h"
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
@@ -39,7 +40,7 @@
 class SERVICE_PUBLIC ContentServices : public Service  //, public QScriptable ???
 {
     Q_OBJECT
-    Q_CLASSINFO( "version"    , "1.32" );
+    Q_CLASSINFO( "version"    , "1.33" );
     Q_CLASSINFO( "DownloadFile_Method",            "POST" )
 
     public:
@@ -51,6 +52,7 @@
         {
             DTC::ArtworkInfoList::InitializeCustomTypes();
             DTC::LiveStreamInfoList::InitializeCustomTypes();
+            DTC::RecordedMarkupList::InitializeCustomTypes();
         }
 
     public slots:
@@ -102,6 +104,12 @@
         virtual bool                DownloadFile        ( const QString   &URL,
                                                           const QString   &StorageGroup ) = 0;
 
+        virtual DTC::RecordedMarkup *GetRecordingMarkups        ( int              ChanId,
+                                                                  const QDateTime &StartTime ) = 0;
+
+        virtual DTC::RecordedMarkupList *GetAllRecordingMarkups    ( void ) = 0;
+
+
         virtual DTC::LiveStreamInfo     *AddLiveStream          ( const QString   &StorageGroup,
                                                                   const QString   &FileName,
                                                                   const QString   &HostName,
diff --git a/mythtv/programs/mythbackend/services/content.cpp b/mythtv/programs/mythbackend/services/content.cpp
index 97758be..7927a1f 100644
--- a/mythtv/programs/mythbackend/services/content.cpp
+++ b/mythtv/programs/mythbackend/services/content.cpp
@@ -632,6 +632,100 @@
 /////////////////////////////////////////////////////////////////////////////
 //
 /////////////////////////////////////////////////////////////////////////////
+DTC::RecordedMarkup *Content::GetRecordingMarkups ( int              chanId,
+                                                    const QDateTime &startTime )
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+
+    if (!query.isConnected())
+        throw( QString("Database not open while trying to get "
+                       "Recording Markups."));
+    query.prepare("SELECT chanid, starttime, mark, type, data "
+                  " FROM recordedmarkup "
+                  " WHERE chanid = :CHANID AND starttime = :STARTTIME "
+                  " ORDER BY starttime");
+
+    query.bindValue( ":CHANID",     chanId    );
+    query.bindValue( ":STARTTIME",  startTime );
+
+    if (!query.exec())
+    {
+        MythDB::DBError("MythAPI::GetRecordingMarkups()", query);
+            throw( QString( "Database Error executing query." ));
+    }
+    // ----------------------------------------------------------------------
+    // return the results of the query
+    // ----------------------------------------------------------------------
+
+    DTC::RecordedMarkup *pRecordedMarkup = new DTC::RecordedMarkup();
+
+    while (query.next())
+    {
+        QDateTime dateTime = MythDate::as_utc(query.value(1).toDateTime());
+        pRecordedMarkup->setChannelId    ( query.value(0).toInt()       );
+        pRecordedMarkup->setStartTime    ( dateTime    );
+
+        DTC::RecordedMarkupItem *pItem = pRecordedMarkup->AddNewMarkupItem();
+        pItem->setMark        ( query.value(2).toInt() );
+        pItem->setDataType    ( query.value(3).toInt() );
+        pItem->setData        ( query.value(4).toInt() );
+    }
+
+    return pRecordedMarkup;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+/////////////////////////////////////////////////////////////////////////////
+DTC::RecordedMarkupList *Content::GetAllRecordingMarkups    ( void )
+{
+    MSqlQuery query(MSqlQuery::InitCon());
+
+    if (!query.isConnected())
+        throw( QString("Database not open while trying to get "
+                       "Recording Markups."));
+    query.prepare("SELECT chanid, starttime, mark, type, data "
+                  " FROM recordedmarkup "
+                  " ORDER BY chanid, starttime" );
+
+    if (!query.exec())
+    {
+        MythDB::DBError("MythAPI::GetRecordingMarkups()", query);
+            throw( QString( "Database Error executing query." ));
+    }
+    // ----------------------------------------------------------------------
+    // return the results of the query
+    // ----------------------------------------------------------------------
+
+    DTC::RecordedMarkupList* pList = new DTC::RecordedMarkupList();
+
+    int previousChanId = -1;
+    QDateTime previousDateTime;
+    DTC::RecordedMarkup *pRecordedMarkup = NULL;
+    while (query.next())
+    {
+        QDateTime dateTime = MythDate::as_utc(query.value(1).toDateTime());
+        if(dateTime != previousDateTime)
+        {
+             pRecordedMarkup = pList->AddNewRecordedMarkup();
+             pRecordedMarkup->setChannelId    ( query.value(0).toInt()       );
+             pRecordedMarkup->setStartTime    ( dateTime    );
+             previousDateTime = dateTime;
+        }
+        DTC::RecordedMarkupItem *pItem = pRecordedMarkup->AddNewMarkupItem();
+        pItem->setMark        ( query.value(2).toInt() );
+        pItem->setDataType    ( query.value(3).toInt() );
+        pItem->setData        ( query.value(4).toInt() );
+    }
+
+    pList->setAsOf          ( MythDate::current() );
+
+    return pList;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+/////////////////////////////////////////////////////////////////////////////
 
 QFileInfo Content::GetMusic( int nId )
 {
diff --git a/mythtv/programs/mythbackend/services/content.h b/mythtv/programs/mythbackend/services/content.h
index 9655321..b07cd1f 100644
--- a/mythtv/programs/mythbackend/services/content.h
+++ b/mythtv/programs/mythbackend/services/content.h
@@ -85,6 +85,11 @@
         bool                DownloadFile        ( const QString   &URL,
                                                   const QString   &StorageGroup );
 
+        DTC::RecordedMarkup *GetRecordingMarkups        ( int              ChanId,
+                                                          const QDateTime &StartTime );
+
+        DTC::RecordedMarkupList *GetAllRecordingMarkups    ( void );
+
         // HTTP Live Streaming
         DTC::LiveStreamInfo     *AddLiveStream          ( const QString   &StorageGroup,
                                                           const QString   &FileName,
