diff --git a/packages/addons/service/multimedia/hts-tvheadend/addon b/packages/addons/service/multimedia/hts-tvheadend/addon
index 3e0ab9a67c..ad2c079534 100755
--- a/packages/addons/service/multimedia/hts-tvheadend/addon
+++ b/packages/addons/service/multimedia/hts-tvheadend/addon
@@ -22,5 +22,9 @@
. config/options $1
+mkdir -p $ADDON_BUILD/$PKG_ADDON_ID
+ cp -PR $PKG_DIR/config/settings.xml* $ADDON_BUILD/$PKG_ADDON_ID/settings-default.xml
+ cp -PR $PKG_DIR/config/xmltv-config* $ADDON_BUILD/$PKG_ADDON_ID/xmltv-config
+
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin
cp -P $PKG_BUILD/build.Linux/tvheadend $ADDON_BUILD/$PKG_ADDON_ID/bin
diff --git a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt
index 5022c0489f..59409030eb 100644
--- a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt
+++ b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt
@@ -1,3 +1,9 @@
+1.0.1
+- add XMLTV tv_file_grab support
+- add XMLTV configuration support
+- add teletext support patch
+- add fix memory leak patch
+
1.0.0
- prepare for OpenELEC-1.0 release
diff --git a/packages/addons/service/multimedia/hts-tvheadend/config/settings.xml b/packages/addons/service/multimedia/hts-tvheadend/config/settings.xml
new file mode 100644
index 0000000000..6be91dac2a
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/config/settings.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config b/packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config
new file mode 100644
index 0000000000..7439a5de59
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/config/xmltv-config
@@ -0,0 +1,14 @@
+{
+ "grabbers": [
+ {
+ "path": "/storage/.xbmc/addons/service.multimedia.hts-tvheadend/bin/tv_grab_file",
+ "description": "tv_grag_file is a simple grabber that just read the ~/.xmltv/tv_grab_file.xmltv file",
+ "version": "0.1\n",
+ "mtime": 1318774706,
+ "capabilities": 1
+ }
+ ],
+ "grab-interval": 12,
+ "grab-enabled": 1,
+ "current-grabber": "/storage/.xbmc/addons/service.multimedia.hts-tvheadend/bin/tv_grab_file"
+}
diff --git a/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch
new file mode 100644
index 0000000000..614e54df3a
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-deliver_raw_teletext_to_clients.patch
@@ -0,0 +1,112 @@
+From 3b407aa2053b1db3316873acd05c64319676eb34 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?=
+Date: Fri, 30 Sep 2011 12:56:01 +0200
+Subject: [PATCH] Deliver raw teletext to clients that are able to display it (e.g. XBMC)
+
+---
+ src/parsers.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/tsdemux.c | 7 +++----
+ 2 files changed, 58 insertions(+), 4 deletions(-)
+
+diff --git a/src/parsers.c b/src/parsers.c
+index 9b7337d..68c7996 100644
+--- a/src/parsers.c
++++ b/src/parsers.c
+@@ -102,6 +102,9 @@ static void parse_aac(service_t *t, elementary_stream_t *st, const uint8_t *data
+ static void parse_subtitles(service_t *t, elementary_stream_t *st,
+ const uint8_t *data, int len, int start);
+
++static void parse_teletext(service_t *t, elementary_stream_t *st,
++ const uint8_t *data, int len, int start);
++
+ static int parse_mpa(service_t *t, elementary_stream_t *st, size_t len,
+ uint32_t next_startcode, int sc_offset);
+
+@@ -158,6 +161,10 @@ parse_mpeg_ts(service_t *t, elementary_stream_t *st, const uint8_t *data,
+ parse_aac(t, st, data, len, start);
+ break;
+
++ case SCT_TELETEXT:
++ parse_teletext(t, st, data, len, start);
++ break;
++
+ default:
+ break;
+ }
+@@ -1232,6 +1239,54 @@ parse_subtitles(service_t *t, elementary_stream_t *st, const uint8_t *data,
+ }
+ }
+
++/**
++ * Teletext parser
++ */
++static void
++parse_teletext(service_t *t, elementary_stream_t *st, const uint8_t *data,
++ int len, int start)
++{
++ th_pkt_t *pkt;
++ int psize, hlen;
++ const uint8_t *buf;
++ const uint8_t *d;
++ if(start) {
++ st->es_parser_state = 1;
++ st->es_buf.sb_err = 0;
++ st->es_parser_ptr = 0;
++ sbuf_reset(&st->es_buf);
++ }
++
++ if(st->es_parser_state == 0)
++ return;
++
++ sbuf_append(&st->es_buf, data, len);
++
++ if(st->es_buf.sb_ptr < 6)
++ return;
++ d = st->es_buf.sb_data;
++
++ psize = d[4] << 8 | d[5];
++
++ if(st->es_buf.sb_ptr != psize + 6)
++ return;
++
++ st->es_parser_state = 0;
++
++ hlen = parse_pes_header(t, st, d + 6, st->es_buf.sb_ptr - 6);
++ if(hlen < 0)
++ return;
++
++ psize -= hlen;
++ buf = d + 6 + hlen;
++
++ if(psize >= 46) {
++
++ pkt = pkt_alloc(buf, psize, st->es_curpts, st->es_curdts);
++ pkt->pkt_commercial = t->s_tt_commercial_advice;
++ parser_deliver(t, st, pkt);
++ }
++}
+
+ /**
+ *
+diff --git a/src/tsdemux.c b/src/tsdemux.c
+index 897fe1d..5fdaf8b 100644
+--- a/src/tsdemux.c
++++ b/src/tsdemux.c
+@@ -110,11 +110,10 @@ ts_recv_packet0(service_t *t, elementary_stream_t *st, const uint8_t *tsb)
+ got_section, st);
+ break;
+
+- case SCT_TELETEXT:
+- teletext_input(t, st, tsb);
+- break;
+-
+ default:
++ if(st->es_type == SCT_TELETEXT)
++ teletext_input(t, st, tsb);
++
+ if(off > 188)
+ break;
+
+--
+1.7.3.1
+
diff --git a/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch
new file mode 100644
index 0000000000..79632e6c4c
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/patches/hts-tvheadend-c88a646-fix_memory_leak_queue_protection.patch
@@ -0,0 +1,26 @@
+From 60e5a1014c52e926fb7dbb12392f60a473e44d2c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jernej=20Fija=C4=8Dko?=
+Date: Fri, 30 Sep 2011 13:23:46 +0200
+Subject: [PATCH] Fix memory leak in queue size protection
+
+---
+ src/htsp.c | 3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/src/htsp.c b/src/htsp.c
+index 8bb803b..f786a88 100644
+--- a/src/htsp.c
++++ b/src/htsp.c
+@@ -1508,6 +1508,9 @@ htsp_stream_deliver(htsp_subscription_t *hs, th_pkt_t *pkt)
+
+ hs->hs_dropstats[pkt->pkt_frametype]++;
+
++ // destroy the already created htsmsg to avoid memory leaks
++ htsmsg_destroy(m);
++
+ /* Queue size protection */
+ pkt_ref_dec(pkt);
+ return;
+--
+1.7.3.1
+
diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file
new file mode 100755
index 0000000000..76b9e64eb6
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tv_grab_file
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend"
+ADDON_SETTINGS="$ADDON_HOME/settings.xml"
+XMLTV_TYPE=`grep XMLTV_TYPE $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"`
+XMLTV_LOCATION=`grep XMLTV_LOCATION $ADDON_SETTINGS | awk '{print $3 }' | sed -e "s,value=,," -e "s,\",,g"`
+
+dflag=
+vflag=
+cflag=
+
+if [[ $# -lt 1 ]]; then
+ if [ "$XMLTV_TYPE" = "FILE" ]; then
+ cat "$XMLTV_LOCATION"
+ exit 0
+ elif [ "$XMLTV_TYPE" = "WEB" ]; then
+ wget -qO - "$XMLTV_LOCATION"
+ exit 0
+ fi
+fi
+
+for arg; do
+ delim=""
+ case "$arg" in
+ #translate --gnu-long-options to -g (short options)
+ --description) args="${args}-d ";;
+ --version) args="${args}-v ";;
+ --capabilities) args="${args}-c ";;
+ #pass through anything else
+ *) [[ "${arg:0:1}" == "-" ]] || delim="\""
+ args="${args}${delim}${arg}${delim} ";;
+ esac
+done
+
+#Reset the positional parameters to the short options
+eval set -- $args
+
+while getopts "dvc" option; do
+ case $option in
+ d) dflag=1;;
+ v) vflag=1;;
+ c) cflag=1;;
+ \?) printf "unknown option: -%s\n" $OPTARG
+ printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
+ exit 2
+ ;;
+ esac >&2
+done
+
+if [ "$dflag" ]; then
+ printf "tv_grab_file is a simple grabber that just read the local or web XMLTV formated file\n"
+fi
+if [ "$vflag" ]; then
+ printf "0.1\n"
+fi
+if [ "$cflag" ]; then
+ printf "baseline\n"
+fi
diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service
index d365232e51..c680b8d0dd 100755
--- a/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service
+++ b/packages/addons/service/multimedia/hts-tvheadend/source/bin/tvheadend.service
@@ -23,10 +23,27 @@
ADDON_DIR="$HOME/.xbmc/addons/service.multimedia.hts-tvheadend"
ADDON_HOME="$HOME/.xbmc/userdata/addon_data/service.multimedia.hts-tvheadend"
LOG_FILE="$ADDON_HOME/service.log"
+ADDON_SETTINGS="$ADDON_HOME/settings.xml"
+XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file"
+XMLTV_SETTINGS_DIR="$ADDON_HOME/xmltv"
+XMLTV_SETTINGS_FILE="$XMLTV_SETTINGS_DIR/config"
+
+if [ ! -f "$ADDON_SETTINGS" ]; then
+ cp $ADDON_DIR/settings-default.xml $ADDON_SETTINGS
+fi
+
+if [ ! -f "$XMLTV_SETTINGS_FILE" ]; then
+ mkdir -p $XMLTV_SETTINGS_DIR
+ cp $ADDON_DIR/xmltv-config $XMLTV_SETTINGS_FILE
+fi
+
+if [ ! -f "$XMLTV_FILE" ]; then
+ chmod +x $XMLTV_FILE
+fi
TVHEADEND_ARG="-f -C -s -u root -g root -c $ADDON_HOME"
mkdir -p $ADDON_HOME
if [ ! $(pidof tvheadend) ];then
tvheadend $TVHEADEND_ARG &>$LOG_FILE
- fi
\ No newline at end of file
+ fi
diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml b/packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml
new file mode 100644
index 0000000000..6eeb22a953
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/source/resources/language/English/strings.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ XMLTV
+ XMLTV configuration
+ XMLTV source type
+ XMLTV location
+
+
diff --git a/packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml b/packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml
new file mode 100644
index 0000000000..c8771ebbd6
--- /dev/null
+++ b/packages/addons/service/multimedia/hts-tvheadend/source/resources/settings.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch
new file mode 100644
index 0000000000..06304e56ae
--- /dev/null
+++ b/packages/mediacenter/xbmc/patches/xbmc-10.1-Dharma-457-fix_connection_check-0.1.patch
@@ -0,0 +1,15 @@
+diff -Naur xbmc-10.1-Dharma/xbmc/FileSystem/FileCurl.cpp xbmc-10.1-Dharma.patch/xbmc/FileSystem/FileCurl.cpp
+--- xbmc-10.1-Dharma/xbmc/FileSystem/FileCurl.cpp 2011-03-08 02:49:14.000000000 +0100
++++ xbmc-10.1-Dharma.patch/xbmc/FileSystem/FileCurl.cpp 2011-10-17 19:21:04.180783870 +0200
+@@ -803,9 +803,9 @@
+ // Detect whether we are "online" or not! Very simple and dirty!
+ bool CFileCurl::IsInternet(bool checkDNS /* = true */)
+ {
+- CStdString strURL = "http://www.google.com";
++ CStdString strURL = "http://www.openelec.tv";
+ if (!checkDNS)
+- strURL = "http://74.125.19.103"; // www.google.com ip
++ strURL = "http://212.101.13.10"; // www.openelec.tv ip
+
+ bool found = Exists(strURL);
+ Close();