diff --git a/mythtv/libs/libmythtv/eitfixup.cpp b/mythtv/libs/libmythtv/eitfixup.cpp
index cd4c300..b23d686 100644
--- a/mythtv/libs/libmythtv/eitfixup.cpp
+++ b/mythtv/libs/libmythtv/eitfixup.cpp
@@ -8,6 +8,8 @@
 
 #include "programinfo.h" // for subtitle types and audio and video properties
 #include "dishdescriptors.h" // for dish_theme_type_to_string
+#include "mythverbose.h"
+#define LOC QString("EITFixup: ")
 
 /*------------------------------------------------------------------------
  * Event Fix Up Scripts - Turned on by entry in dtv_privatetype table
@@ -119,8 +121,11 @@ EITFixUp::EITFixUp()
                         "NRK2s historiekveld|Detektimen|Nattkino|Filmklassiker|Film|Kortfilm|P.skemorgen|"
                         "Radioteatret|Opera|P2-Akademiet|Nyhetsmorgen i P2 og Alltid Nyheter:): (.+)"),
       m_noPremiere("\\s+-\\s+(Sesongpremiere|Premiere)!?$"),
-      m_Stereo("\\b\\(?[sS]tereo\\)?\\b")
-
+      m_Stereo("\\b\\(?[sS]tereo\\)?\\b"),
+      m_AUFreeviewSY("(.*) \\((.+)\\) \\(([12][0-9][0-9][0-9])\\)$"),
+      m_AUFreeviewY("(.*) \\(([12][0-9][0-9][0-9])\\)$"),
+      m_AUFreeviewYC("(.*) \\(([12][0-9][0-9][0-9])\\) \\((.+)\\)$"),
+      m_AUFreeviewSYC("(.*) \\((.+)\\) \\(([12][0-9][0-9][0-9])\\) \\((.+)\\)$")
 {
 }
 
@@ -159,6 +164,18 @@ void EITFixUp::Fix(DBEventEIT &event) const
     if (kFixAUStar & event.fixup)
         FixAUStar(event);
 
+    if (kFixAUDescription & event.fixup)
+        FixAUDescription(event);
+        
+    if (kFixAUFreeview & event.fixup)
+        FixAUFreeview(event);
+        
+    if (kFixAUNine & event.fixup)
+        FixAUNine(event);
+        
+    if (kFixAUSeven & event.fixup)
+        FixAUSeven(event);
+    
     if (kFixMCA & event.fixup)
         FixMCA(event);
 
@@ -1142,6 +1159,151 @@ void EITFixUp::FixAUStar(DBEventEIT &event) const
     }
 }
 
+/** \fn EITFixUp::FixAUDescription(DBEventEIT&) const
+ *  \brief Use this to standardize DVB-T guide in Australia. (fix common annoyances common to most networks)
+ */
+void EITFixUp::FixAUDescription(DBEventEIT &event) const
+{
+    if (event.description.startsWith("[Program data ") || event.description.startsWith("[Program info "))//TEN
+    {
+        event.description = "";//event.subtitle;
+        //VERBOSE(VB_EIT, LOC + QString("EIT: set subtitle to empty: %1").arg(event.subtitle));
+    }
+    if (event.description.endsWith("Copyright West TV Ltd. 2011)"))
+        event.description.resize(event.description.length()-40);
+    
+    if (event.description.isEmpty() && !event.subtitle.isEmpty())//due to ten's copyright info, this won't be caught before
+    {
+        event.description = event.subtitle;
+        event.subtitle = QString::null;
+        //VERBOSE(VB_EIT, QString("EIT: set subtitle to empty: %1").arg(event.subtitle));
+    }
+    if (event.description.startsWith(event.title+" - "))
+        event.description.remove(0,event.title.length()+3);
+    if (event.title.startsWith("LIVE: ", Qt::CaseInsensitive))
+    {
+        event.title.remove(0, 6);
+        event.description.prepend("(Live) ");
+    }
+}
+/** \fn EITFixUp::FixAUNine(DBEventEIT&) const
+ *  \brief Use this to standardize DVB-T guide in Australia. (Nine network)
+ */
+void EITFixUp::FixAUNine(DBEventEIT &event) const
+{
+    QRegExp rating("\\((G|PG|M|MA)\\)");
+    if (rating.indexIn(event.description) == 0)
+    {
+      EventRating prograting;
+      prograting.system="AU"; prograting.rating = rating.cap(1);
+      event.ratings.push_back(prograting);
+      event.description.remove(0,rating.matchedLength()+1);
+    }
+    if (event.description.startsWith("[HD]"))
+    {
+      event.videoProps |= VID_HDTV;
+      event.description.remove(0,5);
+    }
+    if (event.description.startsWith("[CC]"))
+    {
+      event.subtitleType |= SUB_NORMAL;
+      event.description.remove(0,5);
+    }
+    if (event.subtitle == "Movie")
+    {
+        event.subtitle = QString::null;
+        event.categoryType = kCategoryMovie;
+    }
+    if (event.description.startsWith(event.title))
+      event.description.remove(0,event.title.length()+1);
+}
+/** \fn EITFixUp::FixAUSeven(DBEventEIT&) const
+ *  \brief Use this to standardize DVB-T guide in Australia. (Seven network)
+ */
+void EITFixUp::FixAUSeven(DBEventEIT &event) const
+{
+    if (event.description.endsWith(" Rpt"))
+    {
+        event.previouslyshown = true;
+        event.description.resize(event.description.size()-4);
+    }
+    QRegExp year("(\\d{4})$");
+    if (year.indexIn(event.description) != -1)
+    {
+        event.airdate = year.cap(3).toUInt();
+        event.description.resize(event.description.size()-5);
+    }
+    if (event.description.endsWith(" CC"))
+    {
+      event.subtitleType |= SUB_NORMAL;
+      event.description.resize(event.description.size()-3);
+    }
+    QString advisories;//store the advisories to append later
+    QRegExp adv("(\\([A-Z,]+\\))$");
+    if (adv.indexIn(event.description) != -1)
+    {
+        advisories = adv.cap(1);
+        event.description.resize(event.description.size()-(adv.matchedLength()+1));
+    }
+    QRegExp rating("(C|G|PG|M|MA)$");
+    if (rating.indexIn(event.description) != -1)
+    {
+        EventRating prograting;
+        prograting.system=""; prograting.rating = rating.cap(1);
+        if (!advisories.isEmpty())
+            prograting.rating.append(" ").append(advisories);
+        event.ratings.push_back(prograting);
+        event.description.resize(event.description.size()-(rating.matchedLength()+1));
+    }
+}
+/** \fn EITFixUp::FixAUFreeview(DBEventEIT&) const
+ *  \brief Use this to standardize DVB-T guide in Australia. (generic freeview - extra info in brackets at end of desc)
+ */
+void EITFixUp::FixAUFreeview(DBEventEIT &event) const
+{
+    if (event.description.endsWith(".."))//has been truncated to fit within the 'subtitle' eit field, so none of the following will work (ABC)
+        return;
+
+    if (m_AUFreeviewSY.indexIn(event.description.trimmed(), 0) != -1) 
+    {
+        if (event.subtitle.isEmpty())//nine sometimes has an actual subtitle field and the brackets thingo)
+            event.subtitle = m_AUFreeviewSY.cap(2);
+        event.airdate = m_AUFreeviewSY.cap(3).toUInt();
+        event.description = m_AUFreeviewSY.cap(1);
+        //VERBOSE(VB_EIT, LOC + QString("freeviewSY: %1").arg(m_AUFreeviewSY.cap(1)));
+    }
+    else if (m_AUFreeviewY.indexIn(event.description.trimmed(), 0) != -1) 
+    {
+        event.airdate = m_AUFreeviewY.cap(2).toUInt();
+        event.description = m_AUFreeviewY.cap(1);
+        //VERBOSE(VB_EIT, LOC + QString("freeviewY: %1").arg(m_AUFreeviewY.cap(1)));
+    }
+    else if (m_AUFreeviewSYC.indexIn(event.description.trimmed(), 0) != -1) 
+    {
+        if (event.subtitle.isEmpty())
+            event.subtitle = m_AUFreeviewSYC.cap(2);
+        event.airdate = m_AUFreeviewSYC.cap(3).toUInt();
+        QStringList actors = m_AUFreeviewSYC.cap(4).split("/");
+        for (int i = 0; i < actors.size(); ++i)
+            event.AddPerson(DBPerson::kActor, actors.at(i));
+        event.description = m_AUFreeviewSYC.cap(1);
+        //VERBOSE(VB_EIT, LOC + QString("freeviewSY: %1").arg(m_AUFreeviewSYC.cap(1)));
+    }
+    else if (m_AUFreeviewYC.indexIn(event.description.trimmed(), 0) != -1) 
+    {
+        event.airdate = m_AUFreeviewYC.cap(2).toUInt();
+        QStringList actors = m_AUFreeviewYC.cap(3).split("/");
+        for (int i = 0; i < actors.size(); ++i)
+            event.AddPerson(DBPerson::kActor, actors.at(i));
+        event.description = m_AUFreeviewYC.cap(1);
+        //VERBOSE(VB_EIT, LOC + QString("freeviewSY: %1").arg(m_AUFreeviewSYC.cap(1)));
+    }
+    else
+    {
+        //VERBOSE(VB_EIT, LOC + QString("no freeview match: %1").arg(event.description));
+    }
+}
+
 /** \fn EITFixUp::FixMCA(DBEventEIT&) const
  *  \brief Use this to standardise the MultiChoice Africa DVB-S guide.
  */
diff --git a/mythtv/libs/libmythtv/eitfixup.h b/mythtv/libs/libmythtv/eitfixup.h
index d4e9cf8..34e1001 100644
--- a/mythtv/libs/libmythtv/eitfixup.h
+++ b/mythtv/libs/libmythtv/eitfixup.h
@@ -51,6 +51,10 @@ class EITFixUp
         kFixNO         = 0x10000,
         kFixNRK_DVBT   = 0x20000,
         kFixDish       = 0x40000,
+        kFixAUFreeview    = 0x80000,
+        kFixAUDescription = 0x100000,
+        kFixAUNine        = 0x200000,
+        kFixAUSeven       = 0x400000,
 
         // Early fixups
         kEFixForceISO8859_1  = 0x2000,
@@ -82,6 +86,10 @@ class EITFixUp
     void FixComHem(DBEventEIT &event,
                    bool parse_subtitle) const;      // Sweden DVB-C
     void FixAUStar(DBEventEIT &event) const;        // Australia DVB-S
+    void FixAUFreeview(DBEventEIT &event) const;    // Australia DVB-T
+    void FixAUNine(DBEventEIT &event) const;    
+    void FixAUSeven(DBEventEIT &event) const;    
+    void FixAUDescription(DBEventEIT &event) const;
     void FixMCA(DBEventEIT &event) const;           // MultiChoice Africa DVB-S
     void FixRTL(DBEventEIT &event) const;           // RTL group DVB
     void FixFI(DBEventEIT &event) const;            // Finland DVB-T
@@ -192,6 +200,10 @@ class EITFixUp
     const QRegExp m_noNRKCategories;
     const QRegExp m_noPremiere;
     const QRegExp m_Stereo;
+    const QRegExp m_AUFreeviewSY;//subtitle, year
+    const QRegExp m_AUFreeviewY;//year
+    const QRegExp m_AUFreeviewYC;//year, cast
+    const QRegExp m_AUFreeviewSYC;//subtitle, year, cast
 };
 
 #endif // EITFIXUP_H
diff --git a/mythtv/libs/libmythtv/eithelper.cpp b/mythtv/libs/libmythtv/eithelper.cpp
index 9afe5df..1fb89a3 100644
--- a/mythtv/libs/libmythtv/eithelper.cpp
+++ b/mythtv/libs/libmythtv/eithelper.cpp
@@ -443,6 +443,59 @@ void EITHelper::AddEIT(const DVBEventInformationTable *eit)
                 if (EITFixUp::kFixDish & fix)
                     category  = content.GetCategory();
             }
+            else if (EITFixUp::kFixAUDescription & fix)//AU Freeview assigned genres
+            {
+                ContentDescriptor content(content_data);
+                switch (content.Nibble1(0))
+                {
+                    case 0x01: 
+                        category = "Movie"; 
+                        break;
+                    case 0x02: 
+                        category = "News"; 
+                        break;
+                    case 0x03: 
+                        category = "Entertainment"; 
+                        break;
+                    case 0x04: 
+                        category = "Sport"; 
+                        break;
+                    case 0x05: 
+                        category = "Children"; 
+                        break;
+                    case 0x06: 
+                        category = "Music"; 
+                        break;
+                    case 0x07: 
+                        category = "Arts/Culture"; 
+                        break;
+                    case 0x08: 
+                        category = "Current Affairs"; 
+                        break;
+                    case 0x09: 
+                        category = "Education"; 
+                        break;
+                    case 0x0A: 
+                        category = "Infotainment"; 
+                        break;
+                    case 0x0B: 
+                        category = "Special"; 
+                        break;
+                    case 0x0C: 
+                        category = "Comedy"; 
+                        break;
+                    case 0x0D: 
+                        category = "Drama"; 
+                        break;
+                    case 0x0E: 
+                        category = "Documentary"; 
+                        break;
+                    default:
+                        category = "";
+                        break;
+                }
+                category_type = content.GetMythCategory(0);
+            }
             else
             {
                 ContentDescriptor content(content_data);
@@ -464,8 +517,13 @@ void EITHelper::AddEIT(const DVBEventInformationTable *eit)
                 if (desc.ContentType() == 0x01 || desc.ContentType() == 0x31)
                     programId = desc.ContentId();
                 else if (desc.ContentType() == 0x02 || desc.ContentType() == 0x32)
+                {
                     seriesId = desc.ContentId();
+                    category_type = kCategorySeries;
+                }
             }
+            else
+                VERBOSE(VB_EIT, LOC + QString("Crid with unknown encoding: %1").arg(desc.ContentEncoding()));
         }
 
         QDateTime starttime = MythUTCToLocal(eit->StartTimeUTC(i));
@@ -818,8 +876,14 @@ static void init_fixup(QMap<uint64_t,uint> &fix)
     fix[40999U << 16 | 1069] = EITFixUp::kFixSubtitle;
 
     // Australia
-    fix[ 4096U << 16] = EITFixUp::kFixAUStar;
-    fix[ 4096U << 16] = EITFixUp::kFixAUStar;
+    fix[ 4096U  << 16] = EITFixUp::kFixAUStar;
+    fix[ 4096U  << 16] = EITFixUp::kFixAUStar;
+    fix[ 12801U << 16] = EITFixUp::kFixAUFreeview | EITFixUp::kFixAUDescription;//ABC
+    fix[ 12803U << 16] = EITFixUp::kFixAUFreeview | EITFixUp::kFixAUDescription | EITFixUp::kFixAUNine;//Nine
+    fix[ 12802U << 16] = EITFixUp::kFixAUDescription;//SBS
+    fix[ 4115U  << 16] = EITFixUp::kFixAUDescription | EITFixUp::kFixAUSeven;//Seven
+    fix[ 4116U  << 16] = EITFixUp::kFixAUDescription;//Ten
+    fix[12862U  << 16] = EITFixUp::kFixAUDescription;//WestTV
 
     // MultiChoice Africa
     fix[ 6144U << 16] = EITFixUp::kFixMCA;
diff --git a/mythtv/libs/libmythtv/programdata.cpp b/mythtv/libs/libmythtv/programdata.cpp
index 8b36660..565c61e 100644
--- a/mythtv/libs/libmythtv/programdata.cpp
+++ b/mythtv/libs/libmythtv/programdata.cpp
@@ -583,6 +583,22 @@ uint DBEvent::UpdateDB(
         for (uint i = 0; i < credits->size(); i++)
             (*credits)[i].InsertDB(query, chanid, starttime);
     }
+    
+    QList<EventRating>::const_iterator j = ratings.begin();
+    for (; j != ratings.end(); ++j)
+    {
+        query.prepare(
+            "INSERT INTO programrating "
+            "       ( chanid, starttime, system, rating) "
+            "VALUES (:CHANID, :START,    :SYS,  :RATING)");
+        query.bindValue(":CHANID", chanid);
+        query.bindValue(":START",  starttime);
+        query.bindValue(":SYS",    (*j).system);
+        query.bindValue(":RATING", (*j).rating);
+
+        if (!query.exec())
+            MythDB::DBError("programrating insert", query);
+    }
 
     return 1;
 }
