Index: libsi/si.c
===================================================================
--- libsi/si.c	(revision 6183)
+++ libsi/si.c	(working copy)
@@ -16,6 +16,7 @@
 #include <malloc.h>
 #include <string.h>
 #include "descriptor.h"
+#include "freesat.h"
 
 namespace SI {
 
@@ -395,6 +396,8 @@
   return false;
 }
 
+#include <stdio.h>
+
 // originally from libdtv, Copyright Rolf Hakenes <hakenes@hippomi.de>
 void String::decodeText(char *buffer, int size) {
    const unsigned char *from=data.getData(0);
@@ -405,6 +408,19 @@
       return;
       }
    bool singleByte;
+
+
+   if ( from[0] == 0x1f ) {
+       char *temp = freesat_huffman_decode(from, len);
+       if (temp ) {
+           strncpy(buffer, temp, strlen(temp));
+           buffer[strlen(temp)] = 0;
+           free(temp);
+           return;
+       }
+   }
+
+
    const char *cs = getCharacterTable(from, len, &singleByte);
    // FIXME Need to make this UTF-8 aware (different control codes).
    // However, there's yet to be found a broadcaster that actually
@@ -434,6 +450,7 @@
 
 void String::decodeText(char *buffer, char *shortVersion, int sizeBuffer, int sizeShortVersion) {
    const unsigned char *from=data.getData(0);
+   unsigned char *temp = NULL;
    char *to=buffer;
    char *toShort=shortVersion;
    int IsShortName=0;
@@ -443,6 +460,14 @@
       *toShort = '\0';
       return;
       }
+
+
+   if ( from[0] == 0x1f ) {
+       temp = ( unsigned char *)freesat_huffman_decode(from, len);
+       from = temp;
+   }
+
+
    bool singleByte;
    const char *cs = getCharacterTable(from, len, &singleByte);
    // FIXME Need to make this UTF-8 aware (different control codes).
@@ -480,6 +505,7 @@
       if (convertCharacterTable(shortVersion, strlen(shortVersion), convShortVersion, sizeof(convShortVersion), cs))
          strncpy(shortVersion, convShortVersion, strlen(convShortVersion) + 1);
    }
+   if (temp) free(temp);
 }
 
 Descriptor *Descriptor::getDescriptor(CharArray da, DescriptorTagDomain domain, bool returnUnimplemetedDescriptor) {
Index: libsi/Makefile
===================================================================
--- libsi/Makefile	(revision 6183)
+++ libsi/Makefile	(working copy)
@@ -23,7 +23,7 @@
 
 ### The object files (add further files here):
 
-OBJS = util.o si.o section.o descriptor.o
+OBJS = util.o si.o section.o descriptor.o freesat.o
 
 ### Implicit rules:
 
Index: eit.c
===================================================================
--- eit.c	(revision 6183)
+++ eit.c	(working copy)
@@ -343,6 +343,12 @@
   Set(0x12, 0x50, 0xF0);  // event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
   Set(0x12, 0x60, 0xF0);  // event info, other  TS, schedule(0x60)/schedule for future days(0x6X)
   Set(0x14, 0x70);        // TDT
+
+ // Freesat
+  Set(3842, 0x4E, 0xFE);  // event info, actual(0x4E)/other(0x4F) TS, present/following
+  Set(3842, 0x50, 0xF0);  // event info, actual TS, schedule(0x50)/schedule for future days(0x5X)
+  Set(3842, 0x60, 0xF0);  // event info, other  TS, schedule(0x60)/schedule for future days(0x6X)
+
 #ifdef RBLITE
   Set(8191, 0xff);        // Premiere Radio EPG
 #endif
@@ -351,6 +357,7 @@
 void cEitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length)
 {
   switch (Pid) {
+  case 3842:
     case 0x12: {
          cSchedulesLock SchedulesLock(true, 10);
          cSchedules *Schedules = (cSchedules *)cSchedules::Schedules(SchedulesLock);
Index: Makefile
===================================================================
--- Makefile	(revision 6183)
+++ Makefile	(working copy)
@@ -51,7 +51,7 @@
        receiver.o recorder.o recording.o reelcamlink.o reelboxbase.o remote.o remux.o  \
        ringbuffer.o sdt.o sections.o skinclassic.o skins.o skinsttng.o sources.o spu.o status.o \
        svdrp.o themes.o thread.o \
-       timers.o tools.o transfer.o vdr.o videodir.o submenu.o help.o sysconfig_vdr.o
+       timers.o tools.o transfer.o vdr.o videodir.o submenu.o help.o sysconfig_vdr.o 
 
 
 # SUBMENU + TinyXML +HELP
