From 125f3aeb07110daf61a3e091cc49bef5de9709d8 Mon Sep 17 00:00:00 2001
From: Michael Hanson <hansonorders@verison.net>
Date: Mon, 2 Aug 2010 20:28:24 +0000
Subject: mythtv-contrib: update stb-command to v1.2

---
 abs/extra-testing/mythtv-contrib/PKGBUILD | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/abs/extra-testing/mythtv-contrib/PKGBUILD b/abs/extra-testing/mythtv-contrib/PKGBUILD
index 916a38f..7f73f9d 100644
--- a/abs/extra-testing/mythtv-contrib/PKGBUILD
+++ b/abs/extra-testing/mythtv-contrib/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Michael Hanson <hansonorders@verizon.net>
 pkgname=mythtv-contrib
 pkgver=0.23
-pkgrel=6
+pkgrel=7
 pkgdesc="User contributed scripts and utilities for mythtv."
 arch=('i686' 'x86_64')
 url="http://mythtv.org"
@@ -12,7 +12,7 @@ depends=('perl' 'mythtv')
 makedepends=('gcc' 'subversion' 'libavc1394' 'libraw1394' 'libiec61883')
 install='mythtv-contrib.install'
 source=('http://www.pdp8.net/directv/directv.pl' \
-        'http://stb-command.googlecode.com/files/stb-command1.0.tar.gz' \
+        'http://stb-command.googlecode.com/files/stb-command1.2.tar.gz' \
         'http://mythtv.mlaronson.com/myth-xbmc-connect/downloads/xbmc_mythlink.tgz' \
         'mythchanger.10f.beta.tar' '6200ch.tar.gz' 'dct-channel_make.patch' \
         'mythchanger_make.patch')
@@ -142,7 +142,7 @@ build() {
         install -D -m755 xbmc_mythlink.py $startdir/pkg/usr/bin || return 1
 }
 md5sums=('89cfc17883a41e365e85e0a4ac20994f'
-         '2e43e4166398885bcf5fe4c16a7048c4'
+         '8067175170add2c4d8aa333e43c9387c'
          '2ee7eafc3804f0bd48ede0ad05e718f1'
          '34d148795f832f12973a08d59e9a0ef3'
          '9029957cad36d5867a070da373d2bc2a'
-- 
cgit v0.12


From d8d1d02b769e2f2d748d0348cbfa5de525b67f1a Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sat, 14 Aug 2010 23:25:04 -0500
Subject: mythtv:latest -fixes and AC3 fix

---
 abs/core-testing/mythtv/stable-0.23/mp_all.sh       | 2 +-
 abs/core-testing/mythtv/stable-0.23/mythtv/PKGBUILD | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/abs/core-testing/mythtv/stable-0.23/mp_all.sh b/abs/core-testing/mythtv/stable-0.23/mp_all.sh
index 192e620..38a5995 100755
--- a/abs/core-testing/mythtv/stable-0.23/mp_all.sh
+++ b/abs/core-testing/mythtv/stable-0.23/mp_all.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 pkgver=0.23
-pkgrel=29
+pkgrel=31
 
 # NOTE: Make sure to build and install mythtv first BEFORE building anything else
 buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
diff --git a/abs/core-testing/mythtv/stable-0.23/mythtv/PKGBUILD b/abs/core-testing/mythtv/stable-0.23/mythtv/PKGBUILD
index c36e423..a3420b5 100755
--- a/abs/core-testing/mythtv/stable-0.23/mythtv/PKGBUILD
+++ b/abs/core-testing/mythtv/stable-0.23/mythtv/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=mythtv
 pkgver=0.23
-pkgrel=30
+pkgrel=31
 pkgdesc="A personal video recorder for Linux"
 url="http://www.mythtv.org"
 license="GPL"
@@ -37,6 +37,9 @@ build() {
 	done
 	echo "--------------------------done applying patches-----------------------------------------------"
 
+        # Fix to allow AC3 5.1 to return http://svn.mythtv.org/trac/ticket/8659
+        sed -i 's/#define\ AUDIOMAXFRAMES\ \ \ \ \ \ \ 30/#define\ AUDIOMAXFRAMES\ \ \ \ \ \ \ 0/' libs/libmythtv/avformatdecoder.h 
+
 	sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgver/" version.pro
 
 	[ "$CARCH" = "i686"   ] && ARCH="i686"
-- 
cgit v0.12


From b4c75bb1eeb337baa3809db0c8ce6b138c82ec2d Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sun, 15 Aug 2010 00:24:42 -0500
Subject: mythstream: recompile against current libmyth. closes #713

---
 abs/core-testing/mythstream/PKGBUILD | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/abs/core-testing/mythstream/PKGBUILD b/abs/core-testing/mythstream/PKGBUILD
index 7d1fa44..5137b99 100644
--- a/abs/core-testing/mythstream/PKGBUILD
+++ b/abs/core-testing/mythstream/PKGBUILD
@@ -4,7 +4,7 @@
 
 pkgname=mythstream
 pkgver=0.18_3
-pkgrel=9
+pkgrel=10
 pkgdesc="Unofficial MythTV plugin for Internet audio and video streams."
 arch=('i686' 'x86_64')
 url="http://home.kabelfoon.nl/~moongies/streamtuned.html"
-- 
cgit v0.12


From c15a5824669c3cd87f150ba04fa9e21d6db75318 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sun, 15 Aug 2010 01:08:45 -0500
Subject: perl-xml-xpath: initial import. refs#712

---
 .../perl_modules/perl-xml-xpath/PKGBUILD           | 23 ++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 abs/core-testing/perl_modules/perl-xml-xpath/PKGBUILD

diff --git a/abs/core-testing/perl_modules/perl-xml-xpath/PKGBUILD b/abs/core-testing/perl_modules/perl-xml-xpath/PKGBUILD
new file mode 100644
index 0000000..fddb97d
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-xml-xpath/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-xpath
+pkgver=1.13
+pkgrel=4
+pkgdesc="A set of modules for parsing and evaluating"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/XML-XPath"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perlxml>=2.23')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MS/MSERGEANT/XML-XPath-$pkgver.tar.gz) 
+md5sums=('b5919d9220d83982feb6e2321850c5d7')
+
+build() {
+  cd  $startdir/src/XML-XPath-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1 
+  make || return 1
+  make install DESTDIR=$startdir/pkg || return 1
+  find $startdir/pkg -name '.packlist' -delete
+  find $startdir/pkg -name '*.pod' -delete
+}
-- 
cgit v0.12


From f88720aea343f25dee859998224c7e341fe703b7 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sun, 15 Aug 2010 01:53:50 -0500
Subject: perl-modules: add more perl modules. refs#712

---
 .../perl_modules/perl-class-factory-util/PKGBUILD  | 27 +++++++++++++++++++++
 .../perl-datetime-format-builder/PKGBUILD          | 28 ++++++++++++++++++++++
 .../perl-datetime-format-iso8601/PKGBUILD          | 26 ++++++++++++++++++++
 3 files changed, 81 insertions(+)
 create mode 100644 abs/core-testing/perl_modules/perl-class-factory-util/PKGBUILD
 create mode 100644 abs/core-testing/perl_modules/perl-datetime-format-builder/PKGBUILD
 create mode 100644 abs/core-testing/perl_modules/perl-datetime-format-iso8601/PKGBUILD

diff --git a/abs/core-testing/perl_modules/perl-class-factory-util/PKGBUILD b/abs/core-testing/perl_modules/perl-class-factory-util/PKGBUILD
new file mode 100644
index 0000000..dadcff8
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-class-factory-util/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id:$
+pkgname=perl-class-factory-util
+_realname=Class-Factory-Util
+pkgver=1.7
+pkgrel=1
+pkgdesc="Provide utility methods for factory classes"
+arch=(i686 x86_64)
+license=('GPL' 'Artistic')
+url="http://search.cpan.org/~drolsky/Class-Factory-Util"
+options=(!emptydirs)
+depends=('perl')
+provides=('class-factory-util=1.7' 'Class::Factory::Util=1.7' 'perl-class-factory-util=1.7')
+source=(http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Class-Factory-Util-1.7.tar.gz)
+md5sums=('aebd79da361b676a7ecd3245fc3d1b3f')
+
+build() {
+  cd ${srcdir}/${_realname}-${pkgver}
+  # install module in vendor directories.
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+  make  || return 1
+  make install DESTDIR=${pkgdir} || return 1
+
+  # remove perllocal.pod and .packlist
+  find ${pkgdir} -name perllocal.pod -delete
+  find ${pkgdir} -name .packlist -delete
+}
+
diff --git a/abs/core-testing/perl_modules/perl-datetime-format-builder/PKGBUILD b/abs/core-testing/perl_modules/perl-datetime-format-builder/PKGBUILD
new file mode 100644
index 0000000..10df715
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-datetime-format-builder/PKGBUILD
@@ -0,0 +1,28 @@
+# CPAN Name  : DateTime-Format-Builder
+# Contributor: Caleb Cushing <xenoterracide@gmail.com>
+# Generator  : CPANPLUS::Dist::Arch 0.18
+pkgname=perl-datetime-format-builder
+pkgver=0.8000
+pkgrel=3
+pkgdesc="Create DateTime parser classes and objects"
+arch=('i686' 'x86_64')
+license=('PerlArtistic' 'GPL')
+options=('!emptydirs')
+provides=('perl-datetime-format-builder=0.80')
+depends=('perl' 'perl-class-factory-util>=1.6' 'perl-datetime>=0.12' 'perl-datetime-format-strptime>=1.04' 'perl-params-validate>=0.72')
+url='http://search.cpan.org/dist/DateTime-Format-Builder'
+source=('http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.80.tar.gz')
+md5sums=('f6c5d5a17b5b7478ff555a2d3cce5136')
+
+build() {
+  DIST_DIR="${srcdir}/DateTime-Format-Builder-0.80"
+  export PERL_MM_USE_DEFAULT=1
+  { cd "$DIST_DIR" &&
+    perl Makefile.PL INSTALLDIRS=vendor &&
+    make &&
+    make test &&
+    make DESTDIR="$pkgdir" install;
+  } || return 1;
+
+  find "$pkgdir" -name .packlist -o -name perllocal.pod -delete
+}
diff --git a/abs/core-testing/perl_modules/perl-datetime-format-iso8601/PKGBUILD b/abs/core-testing/perl_modules/perl-datetime-format-iso8601/PKGBUILD
new file mode 100644
index 0000000..360b88a
--- /dev/null
+++ b/abs/core-testing/perl_modules/perl-datetime-format-iso8601/PKGBUILD
@@ -0,0 +1,26 @@
+# Contributor: Lukas Fleischer <archlinux at cryptocrack dot de>
+
+pkgname=perl-datetime-format-iso8601
+pkgver=0.07
+pkgrel=1
+pkgdesc="Parses ISO8601 formats."
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/DateTime-Format-ISO8601/"
+license=('PerlArtistic')
+depends=('perl-datetime-format-builder>=0.770.0' 'perl-datetime>=0.18')
+#makedepends=('perl-module-build>=0.350.0')
+optdepends=('perl-file-find-rule'
+            'perl-test-distribution'
+            'perl-test-pod')
+options=(!emptydirs)
+source=("http://search.cpan.org/CPAN/authors/id/J/JH/JHOBLITT/DateTime-Format-ISO8601-$pkgver.tar.gz")
+md5sums=('debb51180d0318ae09cad01c544a1d7d')
+
+build() {
+  cd $srcdir/DateTime-Format-ISO8601-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+  make  || return 1
+  make install DESTDIR="${pkgdir}" || return 1
+  find ${pkgdir} -name perllocal.pod -delete
+  find ${pkgdir} -name .packlist -delete
+}
-- 
cgit v0.12


From 0556c75080c92324f5ceae70a81b8f4a26102290 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sun, 15 Aug 2010 02:13:55 -0500
Subject: mythweather: add perl dependancies. closes #712

---
 abs/core-testing/mythtv/stable-0.23/mythweather/PKGBUILD | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/abs/core-testing/mythtv/stable-0.23/mythweather/PKGBUILD b/abs/core-testing/mythtv/stable-0.23/mythweather/PKGBUILD
index 5fe0dda..bb92f2d 100644
--- a/abs/core-testing/mythtv/stable-0.23/mythweather/PKGBUILD
+++ b/abs/core-testing/mythtv/stable-0.23/mythweather/PKGBUILD
@@ -1,12 +1,12 @@
 pkgname=mythweather
 pkgver=0.23
-pkgrel=29
+pkgrel=30
 pkgdesc="Weather checking plugin for MythTV"
 url="http://www.mythtv.org"
 license="GPL"
 arch=('i686' 'x86_64')
 
-depends=('mythtv>=0.23' 'wget')
+depends=('mythtv>=0.23' 'wget' 'perl-date-manip' 'perl-xml-simple' 'perl-xml-xpath' 'perl-image-size' 'perl-datetime-format-iso8601' 'perl-soap-lite')
 groups=('mythtv-extras')
 
 patches=()
-- 
cgit v0.12


From 0e7b327a1ae444233f1308a95420f70540ad74a3 Mon Sep 17 00:00:00 2001
From: Michael Hanson <hansonorders@verison.net>
Date: Wed, 18 Aug 2010 14:05:33 +0000
Subject: transmission-cli: Update to v 2.04

---
 abs/extra-testing/community/transmission-cli/PKGBUILD | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/abs/extra-testing/community/transmission-cli/PKGBUILD b/abs/extra-testing/community/transmission-cli/PKGBUILD
index dbc7708..40af42a 100644
--- a/abs/extra-testing/community/transmission-cli/PKGBUILD
+++ b/abs/extra-testing/community/transmission-cli/PKGBUILD
@@ -3,8 +3,8 @@
 # Contributor: Alessio 'mOLOk' Bolognino <themolok@gmail.com>
 
 pkgname=transmission-cli
-pkgver=2.03
-pkgrel=2
+pkgver=2.04
+pkgrel=1
 pkgdesc="Fast, easy, and free BitTorrent client (CLI tools, daemon and web client)"
 arch=('i686' 'x86_64')
 url="http://www.transmissionbt.com/"
@@ -23,7 +23,7 @@ source=(http://mirrors.m0k.org/transmission/files/transmission-$pkgver.tar.bz2
 build() {
   cd "$srcdir/transmission-$pkgver"
 
-  ./configure --prefix=/usr --disable-gtk --disable-wx || return 1
+  ./configure --prefix=/usr --disable-gtk || return 1
   make || return 1
   make DESTDIR="$pkgdir" install || return 1
 
@@ -34,7 +34,7 @@ build() {
   install -D -m644 "$srcdir/transmission.include" "$pkgdir/etc/transmission/transmission.include" || return 1
   install -D -m644 COPYING "$pkgdir/usr/share/licenses/transmission-cli/COPYING" || return 1
 }
-md5sums=('7296c85673ed767a35de3883cb27b545'
+md5sums=('84fe15eb7e000fdc369def513299358b'
          'b91534aaf2e403331c611c615ab2c03d'
          'ff22c13dbd52565f9e88b1de22514eb9'
          'b5a49ea375333cd0fee40f70dbac4c2e'
-- 
cgit v0.12


From 7a9be023215377956af9751971dfa1eee0d13bae Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sat, 28 Aug 2010 12:40:31 -0500
Subject: mre: updates from goofee

---
 abs/extra-testing/community/mre/PKGBUILD       |  18 +-
 abs/extra-testing/community/mre/livescores.tgz | Bin 39586 -> 0 bytes
 abs/extra-testing/community/mre/mre.install    |   2 +-
 abs/extra-testing/community/mre/patch.diff     | 225 ++++++++++++++-----------
 abs/extra-testing/community/mre/run            |   2 +
 5 files changed, 132 insertions(+), 115 deletions(-)
 delete mode 100644 abs/extra-testing/community/mre/livescores.tgz

diff --git a/abs/extra-testing/community/mre/PKGBUILD b/abs/extra-testing/community/mre/PKGBUILD
index 72d3bc3..c950d0c 100644
--- a/abs/extra-testing/community/mre/PKGBUILD
+++ b/abs/extra-testing/community/mre/PKGBUILD
@@ -1,14 +1,14 @@
 arch=('i686')
 pkgname=mre
 pkgver=1.1.2
-pkgrel=2
+pkgrel=4
 _kernver=2.6.28-LinHES
 pkgdesc="Myth Recording Extender"
 url="http://sourceforge.net/projects/mythtv-tools/"
 license=('GPL-2')
 depends=('PearDB' 'PearLog')
 makedepends=()
-source=('mre-1.1.2.tar.gz' 'patch.diff' 'livescores.tgz' 'run' 'mre.lr')
+source=('mre-1.1.2.tar.gz' 'patch.diff' 'run' 'mre.lr')
 install=('mre.install')
 
 build() {
@@ -18,24 +18,20 @@ build() {
 	make INST_ROOT=$startdir/pkg install
 	cp $startdir/src/mre-1.1.2/conf/mre.conf $startdir/pkg/etc/mre.conf
 	cp $startdir/src/mre-1.1.2/test/test_title_subtitle.php\
-       		$startdir/pkg/usr/local/bin/
+     		$startdir/pkg/usr/local/bin/
 	chmod a+x $startdir/pkg/usr/local/bin/test_title_subtitle.php
 	rm -r $startdir/pkg/etc/init.d
-	mkdir -p  $startdir/pkg/var/log/mre
+	mkdir -p $startdir/pkg/var/log/mre
+	chown root:log "$startdir/pkg/var/log/mre"
 	touch $startdir/pkg/var/log/mre/mre.log
 	chown mythtv:mythtv "$startdir/pkg/var/log/mre/mre.log"
 	mkdir -p $startdir/pkg/etc/sv/mre
 	cp $startdir/src/run $startdir/pkg/etc/sv/mre/run
 	mkdir -p $startdir/pkg/etc/logrotate.d
 	cp $startdir/src/mre.lr $startdir/pkg/etc/logrotate.d/mre.lr
-	mkdir -p $startdir/pkg/data/srv/http/htdocs/
-	cp -r $startdir/src/scores /$startdir/pkg/data/srv/http/htdocs/
-	chown -R http:users "$startdir/pkg/data/srv/http/htdocs/scores"
 }
 
-
 md5sums=('8ab312e7597ae9413a57bd5e9a068096'
-         'd2591989da512c0faa567408721b6e95'
-         'fcc02a234b22ba5c2714a6b8dbaf3bef'
-         'dea22d4e0f2c1dd8a2debd2f50756dda'
+         '0d0b676367fc4fe459c4f8985872eda6'
+         '10e01d572b45ad718e49ff9ef5c230c5'
          '6d71ab57afd974c5130c994b94e8746f')
diff --git a/abs/extra-testing/community/mre/livescores.tgz b/abs/extra-testing/community/mre/livescores.tgz
deleted file mode 100644
index d97175b..0000000
Binary files a/abs/extra-testing/community/mre/livescores.tgz and /dev/null differ
diff --git a/abs/extra-testing/community/mre/mre.install b/abs/extra-testing/community/mre/mre.install
index 4e3fb0d..bb08427 100755
--- a/abs/extra-testing/community/mre/mre.install
+++ b/abs/extra-testing/community/mre/mre.install
@@ -5,7 +5,7 @@ post_install() {
 }
 
 post_upgrade() {
-
+	/bin/true
 }
 
 
diff --git a/abs/extra-testing/community/mre/patch.diff b/abs/extra-testing/community/mre/patch.diff
index 66390d9..32a7919 100644
--- a/abs/extra-testing/community/mre/patch.diff
+++ b/abs/extra-testing/community/mre/patch.diff
@@ -9,65 +9,6 @@
              return $matches[1];
        return '0';
     }
---- ../mre-1.1.2/class/NHLEvent.php.original	2006-11-05 17:06:57.000000000 -0600
-+++ ../mre-1.1.2/class/NHLEvent.php	2010-05-21 00:44:49.000000000 -0500
-@@ -27,7 +27,7 @@
-    /**
-     * URL to grab game info from
-     */
--   const url = 'http://scores.espn.go.com/nhl/scoreboard';
-+   const url = 'http://localhost/scores/nhl.php';
- 
-    /**
-     * Class constructor.
-@@ -39,32 +39,27 @@
-       parent::__construct();
- 
-       $criteria = $this->generateSearchTerms($gameInfo);
-+      
-       if(!sizeof($criteria))
-          trigger_error("Unable to generate valid search terms! [$gameInfo]", E_USER_WARNING);
-       else
-       {
-          $data = file(self::url);
--         if($data !== FALSE)
--            foreach($criteria as $term)
--            {
--               $status = '';
--               foreach($data as $line)
--                  if(preg_match('/' . preg_quote($term) . '/', $line))
--                  {
--                     $status = $line;
--                     break;
--                  }
--               if(preg_match('/id.*st"\>(.*)\<\/td/U', $status, $match))
--               {
--                  $this->setStatus($match[1]);
--                  if(preg_match('/^Final/', $match[1]))
--                     $this->setEventOver(TRUE);
--                  else
--                     $this->setEventOver(FALSE);
--                  $this->setValid(TRUE);
--                  break;
--               }
-+         if($data)
-+         {
-+            foreach($data as $line)
-+	    {
-+               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
-+	       {
-+		  if(strpos($line,'FINAL')) 
-+		     $this->setEventOver(TRUE);
-+		  else
-+		     $this->setEventOver(FALSE);
-+		  $this->setValid(TRUE);
-+		  break;
-+	       }
-             }
-+         }
-       }
-       if(!$this->isValid())
-          trigger_error("Unable to find NHL info for '$gameInfo'!  The NHL parser may need to be updated.", E_USER_WARNING);
 --- ../mre-1.1.2/conf/mre.conf.in.original	2006-08-13 16:48:57.000000000 -0500
 +++ ../mre-1.1.2/conf/mre.conf.in	2010-05-04 00:25:26.000000000 -0500
 @@ -28,9 +28,9 @@
@@ -82,18 +23,29 @@
  ; Number of minutes to sleep between runs
  sleep = 5
  ; Logging level (0 = normal, 1 = +error, 2 = +warning, 3 = +debug)
+--- ../mre-1.1.2/class/EventFactory.php.original	2006-09-22 10:18:07.000000000 -0500
++++ ../mre-1.1.2/class/EventFactory.php	2010-08-28 00:02:37.000000000 -0500
+@@ -50,7 +50,7 @@
+                $obj = new NHLEvent($data['subtitle']); break;
+             case 'MLB Baseball':
+                $obj = new MLBEvent($data['subtitle']); break;
+-            case 'NFL Football':
++            case ($data['title']=='NFL Football' || $data['title']=='NFL Preseason Football'):
+                $obj = new NFLEvent($data['subtitle']); break;
+             case 'College Football':
+                $obj = new NCAAFEvent($data['subtitle']); break;
 --- ../mre-1.1.2/class/MLBEvent.php.original	2006-11-05 17:06:57.000000000 -0600
-+++ ../mre-1.1.2/class/MLBEvent.php	2010-05-21 20:08:30.000000000 -0500
++++ ../mre-1.1.2/class/MLBEvent.php	2010-08-28 00:02:37.000000000 -0500
 @@ -27,7 +27,7 @@
     /**
      * URL to grab game info from
      */
 -   const url = 'http://scores.espn.go.com/mlb/scoreboard';
-+   const url = 'http://localhost/scores/mlb.php';
++   const url = 'http://sports.espn.go.com/mlb/bottomline/scores';
  
     /**
      * Class constructor.
-@@ -43,41 +43,22 @@
+@@ -43,41 +43,24 @@
           trigger_error("Unable to generate valid search terms! [$gameInfo]", E_USER_WARNING);
        else
        {
@@ -133,8 +85,10 @@
 +	 $data = file(self::url);
 +         if($data)
 +	 {
-+	    foreach($data as $line)
-+      	    {
++	    $data_array=explode("&", $data[0]);
++	    foreach($data_array as $line)
++	    {
++	       $line=str_replace("%20", " ", $line);
 +               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +   	       {
 +     		  if((strpos($line,'FINAL'))or(strpos($line,'Postponed'))) 
@@ -150,18 +104,80 @@
        }
        if(!$this->isValid())
           trigger_error("Unable to find MLB info for '$gameInfo'!  The MLB parser may need to be updated.", E_USER_WARNING);
+--- ../mre-1.1.2/class/NFLEvent.php.original	2006-11-05 17:06:57.000000000 -0600
++++ ../mre-1.1.2/class/NFLEvent.php	2010-08-28 00:06:56.000000000 -0500
+@@ -27,7 +27,7 @@
+    /**
+     * URL to grab game info from
+     */
+-   const url = 'http://scores.espn.go.com/nfl/scoreboard';
++   const url = 'http://sports.espn.go.com/nfl/bottomline/scores';
+ 
+    /**
+     * Class constructor.
+@@ -44,33 +44,23 @@
+       else
+       {
+          $data = file(self::url);
+-         $games = array();
+-         if($data !== FALSE)
+-         {
+-            // Split the huge string into individual game data
+-            foreach($data as $line)
+-               if(preg_match('/\<td class="teamTop.*".*\>.*/', $line))
+-                  $games[] = $line;
+-            if(!sizeof($games))
+-               trigger_error("Unable to find valid game data within source!", E_USER_WARNING);
+-            foreach($criteria as $term)
+-            {
+-               foreach($games as $game)
+-               {
+-                  if(preg_match('/' . preg_quote($term) . '/', $game))
+-                     if(preg_match('/teamTop.*\>(.*)\<\/td\>/U', $game, $matches))
+-                     {
+-                        $this->setStatus($matches[1]);
+-                        if(preg_match('/^(Final|Postponed)/', $matches[1]))
+-                           $this->setEventOver(TRUE);
+-                        else
+-                           $this->setEventOver(FALSE);
+-                        $this->setValid(TRUE);
+-                        break 2;
+-                     }
+-               }
+-            }
+-         }
++	 if($data)
++	 {
++	    $data_array=explode("&", $data[0]);	 
++	    foreach($data_array as $line)
++	    {
++	       $line=str_replace("%20", " ", $line);
++               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++	       {
++		  if(strpos($line,'FINAL'))
++		     $this->setEventOver(TRUE);
++		  else
++		     $this->setEventOver(FALSE);
++		  $this->setValid(TRUE);
++		  break;
++	       }
++	    }
++	 }
+       }
+       if(!$this->isValid())
+          trigger_error("Unable to find NFL info for '$gameInfo'!  The NFL parser may need to be updated.", E_USER_WARNING);
 --- ../mre-1.1.2/class/NBAEvent.php.original	2006-11-05 17:06:57.000000000 -0600
-+++ ../mre-1.1.2/class/NBAEvent.php	2010-05-21 21:15:42.000000000 -0500
++++ ../mre-1.1.2/class/NBAEvent.php	2010-08-28 00:09:50.000000000 -0500
 @@ -27,7 +27,7 @@
     /**
      * URL to grab game info from
      */
 -   const url = 'http://scores.espn.go.com/nba/scoreboard';
-+   const url = 'http://localhost/scores/nba.php';
++   const url = 'http://sports.espn.go.com/nba/bottomline/scores';
  
     /**
      * Class constructor.
-@@ -44,35 +44,21 @@
+@@ -44,35 +44,23 @@
        else
        {
           $data = file(self::url);
@@ -194,9 +210,11 @@
 -                  break;
 -               }
 +         if($data)
-+         {
-+            foreach($data as $line)
-+      	    {
++	 {
++	    $data_array=explode("&", $data[0]);
++            foreach($data_array as $line)
++	    {
++	       $line=str_replace("%20", " ", $line);
 +               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +  	       {
 +       		  if(strpos($line,'FINAL')) 
@@ -211,63 +229,64 @@
        }
        if(!$this->isValid())
           trigger_error("Unable to find NBA info for '$gameInfo'!  The NBA parser may need to be updated.", E_USER_WARNING);
---- ../mre-1.1.2/class/NFLEvent.php.original	2006-11-05 17:06:57.000000000 -0600
-+++ ../mre-1.1.2/class/NFLEvent.php	2010-05-21 19:09:36.000000000 -0500
+--- ../mre-1.1.2/class/NHLEvent.php.original	2006-11-05 17:06:57.000000000 -0600
++++ ../mre-1.1.2/class/NHLEvent.php	2010-08-28 00:09:04.000000000 -0500
 @@ -27,7 +27,7 @@
     /**
      * URL to grab game info from
      */
--   const url = 'http://scores.espn.go.com/nfl/scoreboard';
-+   const url = 'http://localhost/scores/nfl.php';
+-   const url = 'http://scores.espn.go.com/nhl/scoreboard';
++   const url = 'http://sports.espn.go.com/nhl/bottomline/scores';
  
     /**
      * Class constructor.
-@@ -44,33 +44,21 @@
+@@ -39,32 +39,29 @@
+       parent::__construct();
+ 
+       $criteria = $this->generateSearchTerms($gameInfo);
++      
+       if(!sizeof($criteria))
+          trigger_error("Unable to generate valid search terms! [$gameInfo]", E_USER_WARNING);
        else
        {
           $data = file(self::url);
--         $games = array();
 -         if($data !== FALSE)
--         {
--            // Split the huge string into individual game data
--            foreach($data as $line)
--               if(preg_match('/\<td class="teamTop.*".*\>.*/', $line))
--                  $games[] = $line;
--            if(!sizeof($games))
--               trigger_error("Unable to find valid game data within source!", E_USER_WARNING);
 -            foreach($criteria as $term)
 -            {
--               foreach($games as $game)
+-               $status = '';
+-               foreach($data as $line)
+-                  if(preg_match('/' . preg_quote($term) . '/', $line))
+-                  {
+-                     $status = $line;
+-                     break;
+-                  }
+-               if(preg_match('/id.*st"\>(.*)\<\/td/U', $status, $match))
 -               {
--                  if(preg_match('/' . preg_quote($term) . '/', $game))
--                     if(preg_match('/teamTop.*\>(.*)\<\/td\>/U', $game, $matches))
--                     {
--                        $this->setStatus($matches[1]);
--                        if(preg_match('/^(Final|Postponed)/', $matches[1]))
--                           $this->setEventOver(TRUE);
--                        else
--                           $this->setEventOver(FALSE);
--                        $this->setValid(TRUE);
--                        break 2;
--                     }
+-                  $this->setStatus($match[1]);
+-                  if(preg_match('/^Final/', $match[1]))
+-                     $this->setEventOver(TRUE);
+-                  else
+-                     $this->setEventOver(FALSE);
+-                  $this->setValid(TRUE);
+-                  break;
 -               }
--            }
--         }
-+	 if($data)
++         if($data)
 +	 {
-+	    foreach($data as $line)
++	    $data_array=explode("&", $data[0]);
++            foreach($data_array as $line)
 +	    {
++	       $line=str_replace("%20", " ", $line);
 +               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +	       {
-+		  if(strpos($line,'FINAL'))
++		  if(strpos($line,'FINAL')) 
 +		     $this->setEventOver(TRUE);
 +		  else
 +		     $this->setEventOver(FALSE);
 +		  $this->setValid(TRUE);
 +		  break;
 +	       }
-+	    }
-+	 }
+             }
++         }
        }
        if(!$this->isValid())
-          trigger_error("Unable to find NFL info for '$gameInfo'!  The NFL parser may need to be updated.", E_USER_WARNING);
+          trigger_error("Unable to find NHL info for '$gameInfo'!  The NHL parser may need to be updated.", E_USER_WARNING);
diff --git a/abs/extra-testing/community/mre/run b/abs/extra-testing/community/mre/run
index 84d08e5..94381b3 100755
--- a/abs/extra-testing/community/mre/run
+++ b/abs/extra-testing/community/mre/run
@@ -4,6 +4,8 @@ export TERM=linux
 . /etc/rc.d/functions
 stat_runit "Starting mythrecordingextender"
 
+export HOME=/home/mythtv
+
 sv start mythbackend || exit 1
 sleep 5
 
-- 
cgit v0.12


From 892d65138d7773d2c5595ff03bae0947f6b00fec Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sat, 28 Aug 2010 22:32:59 -0500
Subject: mre: Update MLBEvent from goofee

---
 abs/extra-testing/community/mre/PKGBUILD   |  4 ++--
 abs/extra-testing/community/mre/patch.diff | 13 +++++++------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/abs/extra-testing/community/mre/PKGBUILD b/abs/extra-testing/community/mre/PKGBUILD
index c950d0c..0987904 100644
--- a/abs/extra-testing/community/mre/PKGBUILD
+++ b/abs/extra-testing/community/mre/PKGBUILD
@@ -1,7 +1,7 @@
 arch=('i686')
 pkgname=mre
 pkgver=1.1.2
-pkgrel=4
+pkgrel=5
 _kernver=2.6.28-LinHES
 pkgdesc="Myth Recording Extender"
 url="http://sourceforge.net/projects/mythtv-tools/"
@@ -32,6 +32,6 @@ build() {
 }
 
 md5sums=('8ab312e7597ae9413a57bd5e9a068096'
-         '0d0b676367fc4fe459c4f8985872eda6'
+         'ed6cb9012c88d589e26132796132bf25'
          '10e01d572b45ad718e49ff9ef5c230c5'
          '6d71ab57afd974c5130c994b94e8746f')
diff --git a/abs/extra-testing/community/mre/patch.diff b/abs/extra-testing/community/mre/patch.diff
index 32a7919..38a501a 100644
--- a/abs/extra-testing/community/mre/patch.diff
+++ b/abs/extra-testing/community/mre/patch.diff
@@ -45,7 +45,7 @@
  
     /**
      * Class constructor.
-@@ -43,41 +43,24 @@
+@@ -43,41 +43,25 @@
           trigger_error("Unable to generate valid search terms! [$gameInfo]", E_USER_WARNING);
        else
        {
@@ -89,7 +89,8 @@
 +	    foreach($data_array as $line)
 +	    {
 +	       $line=str_replace("%20", " ", $line);
-+               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++	       $line=str_replace("Chicago Sox", "Chicago White Sox", $line); #Program guide gives Chicago White Sox, website gives Chicago Sox 
++              if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +   	       {
 +     		  if((strpos($line,'FINAL'))or(strpos($line,'Postponed'))) 
 + 		     $this->setEventOver(TRUE);
@@ -152,7 +153,7 @@
 +	    foreach($data_array as $line)
 +	    {
 +	       $line=str_replace("%20", " ", $line);
-+               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++              if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +	       {
 +		  if(strpos($line,'FINAL'))
 +		     $this->setEventOver(TRUE);
@@ -215,7 +216,7 @@
 +            foreach($data_array as $line)
 +	    {
 +	       $line=str_replace("%20", " ", $line);
-+               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++              if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +  	       {
 +       		  if(strpos($line,'FINAL')) 
 + 		     $this->setEventOver(TRUE);
@@ -276,7 +277,7 @@
 +            foreach($data_array as $line)
 +	    {
 +	       $line=str_replace("%20", " ", $line);
-+               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++              if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
 +	       {
 +		  if(strpos($line,'FINAL')) 
 +		     $this->setEventOver(TRUE);
@@ -289,4 +290,4 @@
 +         }
        }
        if(!$this->isValid())
-          trigger_error("Unable to find NHL info for '$gameInfo'!  The NHL parser may need to be updated.", E_USER_WARNING);
+          trigger_error("Unable to find NHL info for '$gameInfo'!  The NHL parser may need to be updated.", E_USER_WARNING);
\ No newline at end of file
-- 
cgit v0.12


From c4bd4457b5d640e1c8f5afbca7cd54c53691e5fc Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Mon, 30 Aug 2010 22:24:02 +0000
Subject: RSYNC CORE: resync core-testing -> core

Signed-off-by: James Meyer <james.meyer@operamail.com>
---
 abs/core/LinHES-config/LinHES-release              |    2 +-
 abs/core/LinHES-config/LinHES.install              |    1 +
 abs/core/LinHES-config/PKGBUILD                    |  142 +-
 abs/core/LinHES-config/README                      |    4 +-
 abs/core/LinHES-config/mv_advanced.py              |   12 +-
 abs/core/LinHES-config/mv_common.py                |   31 +
 abs/core/LinHES-config/mv_ddns.py                  |   29 +
 abs/core/LinHES-config/mv_hostype.py               |    5 +-
 abs/core/LinHES-config/mv_ir.py                    |   21 +-
 abs/core/LinHES-config/mv_network.py               |   11 +-
 abs/core/LinHES-config/mv_screensaver.py           |    3 +
 abs/core/LinHES-config/mv_smolt.py                 |    3 +
 abs/core/LinHES-config/mv_software.py              |   14 +-
 abs/core/LinHES-config/mv_webuser.py               |    4 +
 abs/core/LinHES-config/mythvantage.cfg             |   21 +
 abs/core/LinHES-config/restore_default_settings.sh |  160 +-
 abs/core/LinHES-config/systemconfig.py             |   48 +-
 abs/core/LinHES-system/LinHES-run                  |   44 +-
 abs/core/LinHES-system/LinHES.install              |   10 +-
 abs/core/LinHES-system/PKGBUILD                    |   62 +-
 abs/core/LinHES-system/bin/mythbackup              |   42 +
 abs/core/LinHES-system/bin/mythrestore             |   45 +
 abs/core/LinHES-system/firstboot.sh                |   33 +-
 abs/core/LinHES-system/mythfrontend-start          |   22 +
 abs/core/LinHES-system/smolt.cron                  |   11 +
 abs/core/LinHES-system/tvterm.sh                   |   25 +
 abs/core/LinHES-system/unclutter-toggle.sh         |    5 +-
 abs/core/atl1e/PKGBUILD                            |   27 +
 abs/core/atl1e/atl1e.install                       |   23 +
 abs/core/autoconf/PKGBUILD                         |    4 +-
 abs/core/automake/PKGBUILD                         |    6 +-
 abs/core/catalyst/PKGBUILD                         |  153 +
 abs/core/catalyst/amdcccle.desktop                 |   11 +
 abs/core/catalyst/atieventsd.sh                    |   41 +
 abs/core/catalyst/catalyst.install                 |   34 +
 abs/core/catalyst/catalyst.sh                      |   11 +
 abs/core/catalyst/fglrx-2.6.33.patch               |  228 ++
 abs/core/curl/ChangeLog                            |   45 +
 abs/core/curl/PKGBUILD                             |   32 +-
 abs/core/diskless-legacy/PKGBUILD                  |    4 +-
 .../diskless-legacy/config_diskless_frontend.bash  |  110 +-
 abs/core/dvb-firmware/PKGBUILD                     |   12 +-
 abs/core/dvb-firmware/dvb-usb-af9015.fw            |  Bin 0 -> 15913 bytes
 abs/core/filesystem/PKGBUILD                       |   43 +-
 abs/core/filesystem/__changelog                    |    2 +
 abs/core/filesystem/nsswitch.conf                  |    1 +
 abs/core/fluxbox/PKGBUILD                          |   10 +-
 abs/core/fluxbox/fluxbox_fullscreen_focus.patch    |   12 +
 abs/core/fluxbox/keys                              |    6 +-
 abs/core/hauppauge-hvr-firmware/PKGBUILD           |   10 +-
 abs/core/hdhomerun/PKGBUILD                        |    6 +-
 abs/core/hdparm/PKGBUILD                           |    6 +-
 abs/core/kernel26/PKGBUILD                         |   10 +-
 abs/core/kernel26/coretemp.patch                   |   86 +
 abs/core/libarchive/PKGBUILD                       |   14 +-
 abs/core/libfetch/Makefile                         |   88 +
 abs/core/libfetch/PKGBUILD                         |   38 +
 abs/core/libiec61883/PKGBUILD                      |   10 +-
 .../libiec61883/libiec61883-1.2.0-Makefile.patch   |   25 +
 abs/core/libjpeg6/PKGBUILD                         |   28 +
 abs/core/libjpeg6/libjpeg6.install                 |   25 +
 abs/core/libvdpau/PKGBUILD                         |   27 +
 abs/core/lighttpd/PKGBUILD                         |   17 +-
 abs/core/lighttpd/__changelog                      |    8 +
 abs/core/lighttpd/lighttpd.conf                    |    4 +-
 abs/core/lighttpd/lighttpd.install                 |    2 +-
 abs/core/linhes-scripts/770-wrapper.sh             |    2 +-
 abs/core/linhes-scripts/PKGBUILD                   |   48 +-
 abs/core/linhes-scripts/dct700-cc.sh               |   27 +
 abs/core/linhes-scripts/install_hulu.sh            |   70 +
 abs/core/linhes-scripts/limit-mythcommflag.sh      |   95 +-
 abs/core/linhes-scripts/linhes-scripts.install     |    7 +
 abs/core/linhes-scripts/linhes_update.sh           |   19 +-
 abs/core/linhes-scripts/linhes_update2.sh          |   15 +-
 abs/core/linhes-scripts/linhes_update3.sh          |    7 +
 abs/core/linhes-scripts/myth2fuze                  |  318 ++
 abs/core/linhes-scripts/mythwelcome-config.py      |   27 +
 abs/core/linhes-scripts/mythwelcome-set-alarm.sh   |    2 +-
 abs/core/linhes-scripts/qip7100-cc.sh              |   25 +
 abs/core/linhes-scripts/remove_php_mythvideo.sh    |   13 +
 abs/core/linhes-scripts/removecommercials.sh       |  213 +
 abs/core/linhes-scripts/screenshooter.sh           |    4 +-
 abs/core/linhes-scripts/shootscreens-mythtv.sh     |   14 +-
 abs/core/linhes-scripts/shootscreens.sh            |   23 +-
 abs/core/linhes-scripts/system-cleanup.sh          |   47 +
 .../linhes-scripts/update_schema_021_to_022.sh     |   21 +
 abs/core/linhes-scripts/upgrade_linhes.sh          |  136 +
 abs/core/linhes-scripts/upgrade_to_0.22.sh         |   94 +
 abs/core/linhes-theme/PKGBUILD                     |   19 +
 abs/core/lirc-utils/lirc.logrotate                 |    3 +
 abs/core/lirc/lirc_mod_mce.patch                   |   98 +-
 abs/core/local-website/htdocs/404.html             |   25 +
 abs/core/local-website/htdocs/index.html           |  227 +-
 .../local-website/htdocs/linhes/default/header.css |  123 +
 .../local-website/htdocs/linhes/default/menus.css  |  221 +
 .../htdocs/linhes/default/programming.css          |  150 +
 .../local-website/htdocs/linhes/default/style.css  |  237 ++
 .../htdocs/linhes/default/welcome.css              |   62 +
 .../local-website/htdocs/linhes/js/AC_OETags.js    |  269 ++
 .../htdocs/linhes/js/flowplayer-3.1.1.min.js       |   24 +
 .../local-website/htdocs/linhes/js/pngbehavior.htc |   97 +
 .../htdocs/linhes/js/prototip/classic_toolbar.gif  |  Bin 0 -> 2850 bytes
 .../htdocs/linhes/js/prototip/close.gif            |  Bin 0 -> 367 bytes
 .../htdocs/linhes/js/prototip/close_hover.gif      |  Bin 0 -> 366 bytes
 .../htdocs/linhes/js/prototip/close_hover_red.gif  |  Bin 0 -> 371 bytes
 .../htdocs/linhes/js/prototip/prototip.css         |   65 +
 .../htdocs/linhes/js/prototip/prototip.js          |  506 +++
 .../local-website/htdocs/linhes/js/prototype.js    | 4320 ++++++++++++++++++++
 .../htdocs/linhes/js/scriptaculous/builder.js      |  136 +
 .../htdocs/linhes/js/scriptaculous/controls.js     |  965 +++++
 .../htdocs/linhes/js/scriptaculous/dragdrop.js     |  975 +++++
 .../htdocs/linhes/js/scriptaculous/effects.js      | 1130 +++++
 .../htdocs/linhes/js/scriptaculous/jw_effects.js   |  750 ++++
 .../linhes/js/scriptaculous/scriptaculous.js       |   60 +
 .../htdocs/linhes/js/scriptaculous/slider.js       |  275 ++
 .../htdocs/linhes/js/scriptaculous/sound.js        |   55 +
 .../htdocs/linhes/js/scriptaculous/unittest.js     |  568 +++
 .../local-website/htdocs/linhes/js/table_sort.js   |  569 +++
 abs/core/local-website/htdocs/linhes/js/utils.js   |  173 +
 abs/core/local-website/htdocs/rrd/index.html       |    4 +-
 abs/core/local-website/htdocs/wap.html             |  118 +
 abs/core/lzo2/PKGBUILD                             |    6 +-
 abs/core/mdadm/PKGBUILD                            |   16 +-
 abs/core/media_dirs/PKGBUILD                       |   10 +-
 abs/core/mjpegtools/PKGBUILD                       |    8 +-
 abs/core/mjpegtools/__changelog                    |    2 +
 abs/core/mplayer-wrapper/PKGBUILD                  |    6 +-
 abs/core/mplayer-wrapper/mplayer-wrapper.pl        |   95 +-
 abs/core/mysql/PKGBUILD                            |    8 +-
 abs/core/mysql/__changelog                         |    5 +
 abs/core/mysql/my.cnf                              |   11 +-
 abs/core/mythdb-initial/PKGBUILD                   |   23 +
 abs/core/mythdb-initial/__changelog                |   25 +
 abs/core/mythdb-initial/custom.sql                 |    3 +
 abs/core/mythdb-initial/dvd_transcode_r6.sql       |  105 +
 abs/core/mythdb-initial/mc.sql                     | 2909 +++++++++++++
 abs/core/mythdb-initial/mythdb.install             |   35 +
 abs/core/mythdb-initial/permissions.sql            |   11 +
 abs/core/mythstream/PKGBUILD                       |   37 +
 abs/core/mythstream/mythstream.install             |   23 +
 abs/core/mythstream/mythstream.patch               |   12 +
 abs/core/mythstream/streams.res                    |  281 ++
 .../mythtv/old/stable-0.21/glass-wide/PKGBUILD     |   15 +
 .../mythtv/old/stable-0.21/morethemes/PKGBUILD     |   32 +
 .../mythtv/old/stable-0.21/mytharchive/PKGBUILD    |   35 +
 .../mythtv/old/stable-0.21/mythbrowser/PKGBUILD    |   33 +
 .../mythtv/old/stable-0.21/mythcontrols/PKGBUILD   |   32 +
 .../mythtv/old/stable-0.21/mythdb-initial/PKGBUILD |   21 +
 .../old/stable-0.21/mythdb-initial/__changelog     |   25 +
 .../mythtv/old/stable-0.21/mythdb-initial/mc.sql   | 2835 +++++++++++++
 .../old/stable-0.21/mythdb-initial/mythdb.install  |   31 +
 .../old/stable-0.21/mythdb-initial/permissions.sql |   11 +
 abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD  |   41 +
 .../mythtv/old/stable-0.21/mythgallery/PKGBUILD    |   33 +
 abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD  |   32 +
 .../mythtv/old/stable-0.21/mythmovies/PKGBUILD     |   33 +
 abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD |   35 +
 .../old/stable-0.21/mythmusic/music_flac.patch     |  293 ++
 .../old/stable-0.21/mythmusic/mythmusic-0.21.patch |   22 +
 abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD  |   32 +
 abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD |   32 +
 abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD |   26 +
 .../mythtv/old/stable-0.21/mythstream/PKGBUILD     |   35 +
 .../old/stable-0.21/mythstream/mythstream.diff     |   79 +
 .../old/stable-0.21/mythstream/mythstream.install  |   23 +
 .../mythtv/old/stable-0.21/myththemes/PKGBUILD     |   33 +
 .../stable-0.21/mythtv/2.6.28_dvb_api_version.diff |   22 +
 abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD    |   98 +
 .../old/stable-0.21/mythtv/QUICKSTART.archlinux    |   69 +
 .../old/stable-0.21/mythtv/gnome_screensaver.patch |   18 +
 .../stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml  |   94 +
 .../mythtv/old/stable-0.21/mythtv/menu-xml/is.xml  |    3 +
 .../stable-0.21/mythtv/menu-xml/library.xml.patch  |   15 +
 .../old/stable-0.21/mythtv/menu-xml/linhes.xml     |   60 +
 .../stable-0.21/mythtv/menu-xml/mainmenu.xml.patch |   39 +
 .../old/stable-0.21/mythtv/menu-xml/mythbackup.xml |   20 +
 .../stable-0.21/mythtv/menu-xml/mythrestore.xml    |   20 +
 .../mythtv/menu-xml/optical_menu.xml.patch         |   15 +
 .../mythtv/menu-xml/original/create_patch.sh       |    5 +
 .../old/stable-0.21/mythtv/menu-xml/setup.xml      |  111 +
 .../old/stable-0.21/mythtv/menu-xml/siriusmenu.xml |  419 ++
 .../old/stable-0.21/mythtv/menu-xml/update.xml     |   20 +
 .../old/stable-0.21/mythtv/menu-xml/update2.xml    |   26 +
 .../mythtv/menu-xml/util_menu.xml.patch            |   17 +
 .../old/stable-0.21/mythtv/menu-xml/xmmenu.xml     |  574 +++
 abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch |   66 +
 abs/core/mythtv/old/stable-0.21/mythtv/mythbackend |   38 +
 .../mythtv/old/stable-0.21/mythtv/mythbackend.lr   |    9 +
 .../mythtv/old/stable-0.21/mythtv/mythfrontend.lr  |    9 +
 .../stable-0.21/mythtv/myththemedmenu.cpp.patch    |  125 +
 .../old/stable-0.21/mythtv/myththemedmenu.h.patch  |   25 +
 .../mythtv/old/stable-0.21/mythtv/mythtv.install   |   55 +
 abs/core/mythtv/old/stable-0.21/mythtv/pretty      |    2 +
 .../mythtv/old/stable-0.21/mythtv/smolt_jump.patch |    9 +
 abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD |   41 +
 abs/core/mythtv/old/stable-0.21/mythvideo/mtd      |   36 +
 .../mythvideo-6338-use_tmdb_in_fixes.patch         |  151 +
 .../old/stable-0.21/mythvideo/mythvideo.install    |   20 +
 .../mythtv/old/stable-0.21/mythweather/PKGBUILD    |   32 +
 abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD   |   39 +
 .../mythtv/old/stable-0.21/mythweb/mythweb.install |   13 +
 .../2923-mythweb-gallery-English_GB_lang.diff      |  102 +
 .../old/stable-0.21/mythweb/patch/icons.tar.gz     |  Bin 0 -> 14759 bytes
 .../old/stable-0.21/mythweb/patch/mythweb.pl.diff  |   23 +
 .../mythweb/patch/mythweb_gallery_updated1.diff    | 1657 ++++++++
 .../old/stable-0.21/mythweb/transcoders.patch      |   23 +
 .../mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2  |  Bin 0 -> 23648 bytes
 .../mythtv/old/stable-0.21/mythzoneminder/PKGBUILD |   32 +
 abs/core/mythtv/old/stable-0.22/clean_all.sh       |   22 +
 .../mythtv/old/stable-0.22/morethemes/PKGBUILD     |   51 +
 abs/core/mythtv/old/stable-0.22/mp_all.sh          |   33 +
 .../mythtv/old/stable-0.22/mytharchive/PKGBUILD    |   52 +
 .../mythtv/old/stable-0.22/mythbrowser/PKGBUILD    |   52 +
 abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD  |   52 +
 .../mythtv/old/stable-0.22/mythgallery/PKGBUILD    |   52 +
 abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD  |   52 +
 .../mythtv/old/stable-0.22/mythmovies/PKGBUILD     |   52 +
 abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD |   55 +
 abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD  |   52 +
 abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD |   21 +
 .../old/stable-0.22/mythsmolt/smolt_init_login.sh  |   39 +
 .../mythtv/old/stable-0.22/myththemes/PKGBUILD     |   54 +
 abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD    |  111 +
 .../old/stable-0.22/mythtv/changeset_r23616.patch  |   38 +
 .../stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml  |  100 +
 .../mythtv/old/stable-0.22/mythtv/menu-xml/is.xml  |    3 +
 .../stable-0.22/mythtv/menu-xml/library.xml.patch  |   12 +
 .../old/stable-0.22/mythtv/menu-xml/linhes.xml     |   59 +
 .../stable-0.22/mythtv/menu-xml/mainmenu.tv.patch  |   68 +
 .../stable-0.22/mythtv/menu-xml/mainmenu.xml.patch |   39 +
 .../old/stable-0.22/mythtv/menu-xml/mythbackup.xml |   20 +
 .../stable-0.22/mythtv/menu-xml/mythrestore.xml    |   20 +
 .../mythtv/menu-xml/optical_menu.xml.patch         |   16 +
 .../mythtv/menu-xml/original/create_patch.sh       |    5 +
 .../old/stable-0.22/mythtv/menu-xml/setup.xml      |  111 +
 .../old/stable-0.22/mythtv/menu-xml/siriusmenu.xml |  419 ++
 .../stable-0.22/mythtv/menu-xml/themeinfo.xml-tv   |   48 +
 .../old/stable-0.22/mythtv/menu-xml/update.xml     |   20 +
 .../old/stable-0.22/mythtv/menu-xml/update2.xml    |   26 +
 .../mythtv/menu-xml/util_menu.xml.patch            |   16 +
 .../old/stable-0.22/mythtv/menu-xml/xmmenu.xml     |  574 +++
 .../stable-0.22/mythtv/menutheme_fallback.patch    |   18 +
 abs/core/mythtv/old/stable-0.22/mythtv/myth.sh     |    4 +
 abs/core/mythtv/old/stable-0.22/mythtv/mythbackend |   38 +
 .../mythtv/old/stable-0.22/mythtv/mythbackend.lr   |    9 +
 .../mythtv/old/stable-0.22/mythtv/mythbackend.sh   |  117 +
 .../mythtv/old/stable-0.22/mythtv/mythfrontend.lr  |    9 +
 .../mythtv/old/stable-0.22/mythtv/mythtv.install   |   35 +
 abs/core/mythtv/old/stable-0.22/mythtv/pretty      |   10 +
 .../mythtv/old/stable-0.22/mythtv/smolt_jump.patch |   30 +
 abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD |   52 +
 .../mythtv/old/stable-0.22/mythweather/PKGBUILD    |   52 +
 abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD   |   50 +
 .../mythtv/old/stable-0.22/mythweb/mythweb.install |   10 +
 .../mythtv/old/stable-0.22/mythzoneminder/PKGBUILD |   52 +
 abs/core/mythtv/stable-0.23/clean_all.sh           |   22 +
 abs/core/mythtv/stable-0.23/morethemes/PKGBUILD    |   46 +
 .../retro-wide_video-ui.xml-filetypes.patch        |   22 +
 abs/core/mythtv/stable-0.23/mp_all.sh              |   30 +
 abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD   |   47 +
 abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD   |   47 +
 abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD   |   45 +
 abs/core/mythtv/stable-0.23/mythgame/PKGBUILD      |   47 +
 abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD    |   48 +
 abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD     |   51 +
 abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD |   47 +
 abs/core/mythtv/stable-0.23/mythnews/PKGBUILD      |   47 +
 abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD     |   23 +
 .../mythtv/stable-0.23/mythsmolt/mythsmolt.patch   |    8 +
 .../stable-0.23/mythsmolt/smolt_init_login.sh      |   39 +
 abs/core/mythtv/stable-0.23/myththemes/PKGBUILD    |   47 +
 abs/core/mythtv/stable-0.23/mythtv/PKGBUILD        |   96 +
 .../stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml  |   94 +
 abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml |    3 +
 .../stable-0.23/mythtv/menu-xml/library.xml.patch  |   12 +
 .../mythtv/stable-0.23/mythtv/menu-xml/linhes.xml  |   59 +
 .../stable-0.23/mythtv/menu-xml/mainmenu.xml.patch |   95 +
 .../stable-0.23/mythtv/menu-xml/mythbackup.xml     |   20 +
 .../stable-0.23/mythtv/menu-xml/mythrestore.xml    |   20 +
 .../mythtv/menu-xml/optical_menu.xml.patch         |   16 +
 .../mythtv/menu-xml/original/create_patch.sh       |    5 +
 .../mythtv/stable-0.23/mythtv/menu-xml/setup.xml   |  111 +
 .../stable-0.23/mythtv/menu-xml/siriusmenu.xml     |  419 ++
 .../mythtv/stable-0.23/mythtv/menu-xml/update.xml  |   20 +
 .../mythtv/stable-0.23/mythtv/menu-xml/update2.xml |   26 +
 .../mythtv/menu-xml/util_menu.xml.patch            |   16 +
 .../mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml  |  574 +++
 abs/core/mythtv/stable-0.23/mythtv/myth.sh         |    4 +
 abs/core/mythtv/stable-0.23/mythtv/mythbackend     |   38 +
 abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr  |    9 +
 abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh  |  117 +
 abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr |    9 +
 abs/core/mythtv/stable-0.23/mythtv/mythtv.install  |   47 +
 abs/core/mythtv/stable-0.23/mythtv/pretty          |    9 +
 .../mythtv/stable-0.23/mythtv/smolt_jump.patch     |   30 +
 abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD     |   47 +
 abs/core/mythtv/stable-0.23/mythweather/PKGBUILD   |   47 +
 abs/core/mythtv/stable-0.23/mythweb/PKGBUILD       |   46 +
 .../mythtv/stable-0.23/mythweb/mythweb.install     |   10 +
 .../mythtv/stable-0.23/mythzoneminder/PKGBUILD     |   47 +
 abs/core/mythtv/trunk/clean_all.sh                 |    2 +-
 abs/core/mythtv/trunk/morethemes/PKGBUILD          |   15 +-
 abs/core/mythtv/trunk/mp_all.sh                    |    6 +-
 abs/core/mythtv/trunk/mytharchive/PKGBUILD         |    3 +-
 abs/core/mythtv/trunk/mythbrowser/PKGBUILD         |    3 +-
 abs/core/mythtv/trunk/mythgallery/PKGBUILD         |    3 +-
 abs/core/mythtv/trunk/mythgame/PKGBUILD            |    3 +-
 abs/core/mythtv/trunk/mythmovies/PKGBUILD          |    3 +-
 abs/core/mythtv/trunk/mythmusic/PKGBUILD           |    3 +-
 abs/core/mythtv/trunk/mythnetvision/PKGBUILD       |   51 +
 abs/core/mythtv/trunk/mythnews/PKGBUILD            |    3 +-
 abs/core/mythtv/trunk/myththemes/PKGBUILD          |    3 +-
 abs/core/mythtv/trunk/mythtv/PKGBUILD              |   18 +-
 .../mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml |  115 +-
 .../mythtv/trunk/mythtv/menu-xml/library.xml.patch |   10 +-
 abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml   |   71 +-
 .../trunk/mythtv/menu-xml/mainmenu.xml.patch       |   13 +-
 .../mythtv/trunk/mythtv/menu-xml/mythbackup.xml    |    2 +-
 .../mythtv/trunk/mythtv/menu-xml/mythrestore.xml   |    2 +-
 abs/core/mythtv/trunk/mythtv/menu-xml/update.xml   |   20 +
 abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml  |   26 +
 abs/core/mythtv/trunk/mythtv/pretty                |    9 +-
 abs/core/mythtv/trunk/mythvideo/PKGBUILD           |    3 +-
 abs/core/mythtv/trunk/mythweather/PKGBUILD         |    3 +-
 abs/core/mythtv/trunk/mythweb/PKGBUILD             |    8 +-
 abs/core/mythtv/trunk/mythzoneminder/PKGBUILD      |    3 +-
 abs/core/nano/PKGBUILD                             |    8 +-
 abs/core/ntp/PKGBUILD                              |   12 +-
 abs/core/nvidia-173xx-utils/PKGBUILD               |   62 +
 abs/core/nvidia-173xx-utils/nvidia.install         |    6 +
 abs/core/nvidia-173xx-utils/supported-cards.txt    |  236 ++
 abs/core/nvidia-173xx/PKGBUILD                     |   34 +
 abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch |  103 +
 abs/core/nvidia-173xx/nvidia.install               |   14 +
 abs/core/nvidia-71xx-utils/PKGBUILD                |    8 +-
 abs/core/nvidia-71xx/PKGBUILD                      |   11 +-
 abs/core/nvidia-96xx-utils/PKGBUILD                |  104 +-
 abs/core/nvidia-96xx-utils/nvidia.install          |    6 +
 abs/core/nvidia-96xx/PKGBUILD                      |   53 +-
 abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch  |  103 +
 abs/core/nvidia-96xx/nvidia.install                |   14 +
 abs/core/nvidia-utils/20-nvidia.conf               |    6 +
 abs/core/nvidia-utils/PKGBUILD                     |  163 +-
 abs/core/nvidia/PKGBUILD                           |   54 +-
 abs/core/openssh/PKGBUILD                          |   12 +-
 abs/core/openssh/sshd.patch                        |   15 +-
 abs/core/pacman/PKGBUILD                           |   42 +-
 abs/core/pacman/makepkg.conf                       |  107 +
 abs/core/pacman/pacman.conf                        |   13 +-
 abs/core/pacman/pacman.install                     |   15 +-
 abs/core/pciutils/PKGBUILD                         |    6 +-
 abs/core/perl_modules/libxml-perl/PKGBUILD         |   23 +
 .../perl_modules/perl-class-factory-util/PKGBUILD  |   27 +
 .../perl-datetime-format-builder/PKGBUILD          |   28 +
 .../perl-datetime-format-iso8601/PKGBUILD          |   26 +
 abs/core/perl_modules/perl-fcgi/PKGBUILD           |    8 +-
 abs/core/perl_modules/perl-math-round/PKGBUILD     |   22 +
 abs/core/perl_modules/perl-parse-yapp/PKGBUILD     |   25 +
 abs/core/perl_modules/perl-xml-dom/PKGBUILD        |   23 +
 abs/core/perl_modules/perl-xml-parser/PKGBUILD     |    3 +-
 abs/core/perl_modules/perl-xml-xpath/PKGBUILD      |   23 +
 abs/core/perl_modules/perl-xml-xql/PKGBUILD        |   34 +
 abs/core/perl_modules/perlxml/PKGBUILD             |   29 +
 abs/core/php/PKGBUILD                              |   14 +-
 abs/core/php/__changelog                           |    2 +
 abs/core/php/php.ini                               |    2 +-
 abs/core/pil/PKGBUILD                              |    7 +-
 abs/core/pil/__changelog                           |    2 +
 abs/core/plextor-convertX-driver/PKGBUILD          |    5 +-
 abs/core/plextor-convertX-driver/convertX.install  |    3 +
 abs/core/python-pycurl/PKGBUILD                    |   20 +
 abs/core/python-simplejson/PKGBUILD                |   24 +
 abs/core/qt/PKGBUILD                               |   25 +-
 abs/core/qt/QtWebKit_Flash.patch                   |   48 +
 abs/core/qt/__changelog                            |    1 +
 abs/core/rsync/PKGBUILD                            |   14 +-
 abs/core/rsync/__changelog                         |    1 +
 abs/core/runit-scripts/PKGBUILD                    |    2 +-
 .../runitscripts/services/ddclient/run             |    8 +
 .../runitscripts/services/frontend/finish          |   37 +-
 .../runit-scripts/runitscripts/services/lircd/run  |   88 +-
 .../runit-scripts/runitscripts/services/mdadm/run  |   29 +-
 .../runit-scripts/runitscripts/services/nmbd/run   |    2 +-
 .../runitscripts/services/postfix/run              |    8 +
 .../runit-scripts/runitscripts/services/smbd/run   |    2 +-
 abs/core/runit/PKGBUILD                            |    9 +-
 abs/core/runit/shutdown.script                     |    5 +-
 abs/core/samba/PKGBUILD                            |  129 +-
 abs/core/sdparm/PKGBUILD                           |    9 +-
 abs/core/setuptools/PKGBUILD                       |    8 +-
 abs/core/sudo/PKGBUILD                             |    6 +-
 abs/core/syslog-ng/PKGBUILD                        |   15 +-
 abs/core/syslog-ng/syslog-ng.logrotate             |    2 +-
 .../hauppauge-grey-alt/lircd-haupgrey-alt.conf     |  199 +
 .../remotes/hauppauge-grey-alt/lircrc-haupgrey-alt |  533 +++
 .../remotes/hauppauge-grey-alt/preview.jpg         |  Bin 0 -> 3069 bytes
 .../system-templates/templates/remotes/imon/lircrc |  240 ++
 .../remotes/streamzap/lircd.conf.streamzap         |    3 +
 .../templates/samba/smb.conf.template              |    3 +-
 .../templates/settings/default_1/jumppoints.txt    |   44 +
 .../templates/settings/default_2/jumppoints.txt    |   44 +
 .../templates/settings/default_2/settings.txt      |   10 +-
 .../templates/transmit/motorola_dct700/lircd.conf  |  432 +-
 .../templates/transmit/motorola_qip7100/lircd.conf |   81 +
 .../system-templates/templates/xorg/modeline.ATSC  |    4 +-
 .../system-templates/templates/xorg/xorg.conf.ati  |    2 +-
 .../templates/xorg/xorg.conf.intel                 |    2 +-
 .../templates/xorg/xorg.conf.nvidia                |    2 +-
 .../system-templates/templates/xorg/xorg.conf.vesa |    2 +-
 .../system-templates/templates/xorg/xorg.conf.via  |    2 +-
 .../templates/xorg/xorg.conf.vmware                |    2 +-
 abs/core/talloc/PKGBUILD                           |   26 +
 abs/core/tar/PKGBUILD                              |    8 +-
 abs/core/tdb/PKGBUILD                              |   34 +-
 abs/core/test-pattern/PKGBUILD                     |   16 +
 abs/core/test-pattern/test_pattern.bash            |  326 ++
 abs/core/tweaker/PKGBUILD                          |    4 +-
 abs/core/tweaker/bin/twk_general.pl                |    2 +-
 abs/core/unclutter/PKGBUILD                        |   12 +-
 abs/core/unclutter/unclutter.cfg                   |    2 +
 abs/core/unzip/PKGBUILD                            |   29 +-
 abs/core/v4l-dvb/PKGBUILD                          |    8 +-
 abs/core/v4l-dvb/hdpvr.diff                        |   22 +
 abs/core/vdpauinfo-legacy/PKGBUILD                 |   26 +
 abs/core/vdpauinfo-legacy/vdpauinfo                |    2 +
 abs/core/vdpauinfo/PKGBUILD                        |   24 +
 abs/core/vdpauinfo/__changelog                     |    2 +
 abs/core/xdotool/PKGBUILD                          |   13 +-
 abs/core/xosd/PKGBUILD                             |   11 +-
 abs/core/xosd/__changelog                          |    7 +
 abs/core/xosd/osd_cat.cfg                          |    6 +
 abs/core/xz-utils/PKGBUILD                         |   30 +
 432 files changed, 35974 insertions(+), 1221 deletions(-)
 create mode 100755 abs/core/LinHES-config/mv_ddns.py
 create mode 100644 abs/core/LinHES-config/mythvantage.cfg
 mode change 100644 => 100755 abs/core/LinHES-system/LinHES-run
 mode change 100644 => 100755 abs/core/LinHES-system/PKGBUILD
 create mode 100755 abs/core/LinHES-system/mythfrontend-start
 create mode 100644 abs/core/LinHES-system/smolt.cron
 create mode 100755 abs/core/LinHES-system/tvterm.sh
 create mode 100644 abs/core/atl1e/PKGBUILD
 create mode 100644 abs/core/atl1e/atl1e.install
 create mode 100644 abs/core/catalyst/PKGBUILD
 create mode 100644 abs/core/catalyst/amdcccle.desktop
 create mode 100644 abs/core/catalyst/atieventsd.sh
 create mode 100644 abs/core/catalyst/catalyst.install
 create mode 100644 abs/core/catalyst/catalyst.sh
 create mode 100644 abs/core/catalyst/fglrx-2.6.33.patch
 create mode 100644 abs/core/dvb-firmware/dvb-usb-af9015.fw
 create mode 100644 abs/core/filesystem/__changelog
 create mode 100644 abs/core/fluxbox/fluxbox_fullscreen_focus.patch
 create mode 100644 abs/core/kernel26/coretemp.patch
 create mode 100644 abs/core/libfetch/Makefile
 create mode 100644 abs/core/libfetch/PKGBUILD
 create mode 100644 abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch
 create mode 100644 abs/core/libjpeg6/PKGBUILD
 create mode 100644 abs/core/libjpeg6/libjpeg6.install
 create mode 100644 abs/core/libvdpau/PKGBUILD
 create mode 100644 abs/core/linhes-scripts/dct700-cc.sh
 create mode 100644 abs/core/linhes-scripts/install_hulu.sh
 create mode 100644 abs/core/linhes-scripts/linhes-scripts.install
 create mode 100755 abs/core/linhes-scripts/myth2fuze
 create mode 100755 abs/core/linhes-scripts/mythwelcome-config.py
 create mode 100755 abs/core/linhes-scripts/qip7100-cc.sh
 create mode 100644 abs/core/linhes-scripts/remove_php_mythvideo.sh
 create mode 100755 abs/core/linhes-scripts/removecommercials.sh
 create mode 100755 abs/core/linhes-scripts/system-cleanup.sh
 create mode 100644 abs/core/linhes-scripts/update_schema_021_to_022.sh
 create mode 100755 abs/core/linhes-scripts/upgrade_linhes.sh
 create mode 100644 abs/core/linhes-scripts/upgrade_to_0.22.sh
 create mode 100644 abs/core/linhes-theme/PKGBUILD
 create mode 100755 abs/core/local-website/htdocs/404.html
 mode change 100644 => 100755 abs/core/local-website/htdocs/index.html
 create mode 100644 abs/core/local-website/htdocs/linhes/default/header.css
 create mode 100644 abs/core/local-website/htdocs/linhes/default/menus.css
 create mode 100644 abs/core/local-website/htdocs/linhes/default/programming.css
 create mode 100644 abs/core/local-website/htdocs/linhes/default/style.css
 create mode 100644 abs/core/local-website/htdocs/linhes/default/welcome.css
 create mode 100644 abs/core/local-website/htdocs/linhes/js/AC_OETags.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/pngbehavior.htc
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototip/close.gif
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototip/prototip.css
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototip/prototip.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/prototype.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/table_sort.js
 create mode 100644 abs/core/local-website/htdocs/linhes/js/utils.js
 create mode 100755 abs/core/local-website/htdocs/wap.html
 create mode 100644 abs/core/mjpegtools/__changelog
 mode change 100755 => 100644 abs/core/mplayer-wrapper/mplayer-wrapper.pl
 create mode 100755 abs/core/mythdb-initial/PKGBUILD
 create mode 100644 abs/core/mythdb-initial/__changelog
 create mode 100644 abs/core/mythdb-initial/custom.sql
 create mode 100644 abs/core/mythdb-initial/dvd_transcode_r6.sql
 create mode 100644 abs/core/mythdb-initial/mc.sql
 create mode 100755 abs/core/mythdb-initial/mythdb.install
 create mode 100755 abs/core/mythdb-initial/permissions.sql
 create mode 100644 abs/core/mythstream/PKGBUILD
 create mode 100644 abs/core/mythstream/mythstream.install
 create mode 100644 abs/core/mythstream/mythstream.patch
 create mode 100644 abs/core/mythstream/streams.res
 create mode 100644 abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD
 create mode 100755 abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql
 create mode 100755 abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install
 create mode 100755 abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install
 create mode 100644 abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch
 create mode 100755 abs/core/mythtv/old/stable-0.21/mythtv/mythbackend
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/pretty
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythvideo/mtd
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2
 create mode 100644 abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD
 create mode 100755 abs/core/mythtv/old/stable-0.22/clean_all.sh
 create mode 100644 abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD
 create mode 100755 abs/core/mythtv/old/stable-0.22/mp_all.sh
 create mode 100644 abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh
 create mode 100755 abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/myth.sh
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/mythbackend
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install
 create mode 100755 abs/core/mythtv/old/stable-0.22/mythtv/pretty
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install
 create mode 100644 abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD
 create mode 100755 abs/core/mythtv/stable-0.23/clean_all.sh
 create mode 100755 abs/core/mythtv/stable-0.23/morethemes/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch
 create mode 100755 abs/core/mythtv/stable-0.23/mp_all.sh
 create mode 100644 abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythgame/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythnews/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch
 create mode 100644 abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh
 create mode 100755 abs/core/mythtv/stable-0.23/myththemes/PKGBUILD
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/myth.sh
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/mythbackend
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/mythtv.install
 create mode 100755 abs/core/mythtv/stable-0.23/mythtv/pretty
 create mode 100644 abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch
 create mode 100644 abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythweather/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythweb/PKGBUILD
 create mode 100644 abs/core/mythtv/stable-0.23/mythweb/mythweb.install
 create mode 100644 abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD
 create mode 100644 abs/core/mythtv/trunk/mythnetvision/PKGBUILD
 create mode 100644 abs/core/mythtv/trunk/mythtv/menu-xml/update.xml
 create mode 100644 abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml
 create mode 100644 abs/core/nvidia-173xx-utils/PKGBUILD
 create mode 100644 abs/core/nvidia-173xx-utils/nvidia.install
 create mode 100644 abs/core/nvidia-173xx-utils/supported-cards.txt
 create mode 100644 abs/core/nvidia-173xx/PKGBUILD
 create mode 100644 abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch
 create mode 100644 abs/core/nvidia-173xx/nvidia.install
 create mode 100644 abs/core/nvidia-96xx-utils/nvidia.install
 create mode 100644 abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch
 create mode 100644 abs/core/nvidia-96xx/nvidia.install
 create mode 100644 abs/core/nvidia-utils/20-nvidia.conf
 create mode 100644 abs/core/pacman/makepkg.conf
 create mode 100644 abs/core/perl_modules/libxml-perl/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-class-factory-util/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-math-round/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-parse-yapp/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-xml-dom/PKGBUILD
 create mode 100644 abs/core/perl_modules/perl-xml-xpath/PKGBUILD
 create mode 100755 abs/core/perl_modules/perl-xml-xql/PKGBUILD
 create mode 100644 abs/core/perl_modules/perlxml/PKGBUILD
 create mode 100644 abs/core/pil/__changelog
 create mode 100644 abs/core/python-pycurl/PKGBUILD
 create mode 100644 abs/core/python-simplejson/PKGBUILD
 mode change 100644 => 100755 abs/core/qt/PKGBUILD
 create mode 100644 abs/core/qt/QtWebKit_Flash.patch
 create mode 100644 abs/core/rsync/__changelog
 create mode 100755 abs/core/runit-scripts/runitscripts/services/ddclient/run
 create mode 100755 abs/core/runit-scripts/runitscripts/services/postfix/run
 create mode 100644 abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf
 create mode 100644 abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt
 create mode 100644 abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg
 create mode 100644 abs/core/system-templates/templates/remotes/imon/lircrc
 create mode 100644 abs/core/system-templates/templates/settings/default_1/jumppoints.txt
 create mode 100644 abs/core/system-templates/templates/settings/default_2/jumppoints.txt
 mode change 100755 => 100644 abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
 create mode 100644 abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf
 create mode 100644 abs/core/talloc/PKGBUILD
 create mode 100644 abs/core/test-pattern/PKGBUILD
 create mode 100755 abs/core/test-pattern/test_pattern.bash
 create mode 100644 abs/core/unclutter/unclutter.cfg
 create mode 100644 abs/core/v4l-dvb/hdpvr.diff
 create mode 100644 abs/core/vdpauinfo-legacy/PKGBUILD
 create mode 100755 abs/core/vdpauinfo-legacy/vdpauinfo
 create mode 100644 abs/core/vdpauinfo/PKGBUILD
 create mode 100644 abs/core/vdpauinfo/__changelog
 create mode 100644 abs/core/xosd/__changelog
 create mode 100644 abs/core/xosd/osd_cat.cfg
 create mode 100644 abs/core/xz-utils/PKGBUILD

diff --git a/abs/core/LinHES-config/LinHES-release b/abs/core/LinHES-config/LinHES-release
index 6a885f4..6fc5aed 100644
--- a/abs/core/LinHES-config/LinHES-release
+++ b/abs/core/LinHES-config/LinHES-release
@@ -1 +1 @@
-LinHES R6.01.00 (Chugu)
+LinHES R6.03.00 (M)
diff --git a/abs/core/LinHES-config/LinHES.install b/abs/core/LinHES-config/LinHES.install
index a0a9d31..2b2d53c 100644
--- a/abs/core/LinHES-config/LinHES.install
+++ b/abs/core/LinHES-config/LinHES.install
@@ -61,6 +61,7 @@ post_upgrade() {
             echo "List of packages to ignore" > /etc/blacklist.package
             echo  "one package per line" >> /etc/blacklist.package
         fi
+	cat /etc/LinHES-release > /etc/os_myth_release
 }
 
 # arg 1:  the old package version
diff --git a/abs/core/LinHES-config/PKGBUILD b/abs/core/LinHES-config/PKGBUILD
index 1e61fdf..655d5c0 100644
--- a/abs/core/LinHES-config/PKGBUILD
+++ b/abs/core/LinHES-config/PKGBUILD
@@ -1,49 +1,51 @@
 pkgname=LinHES-config
 pkgver=2.1
-pkgrel=1
-conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev )
+pkgrel=40
+conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev LinHes-config )
 pkgdesc="Install and configure your system"
-depends=(bc libstatgrab  mysql-python expect curl dnsutils parted 
-	 sg3_utils nmbscan system-templates rsync python-parted 
-	 ddcxinfo python-pexpect python-netifaces LinHES-timezone 
-	 python-iplib mythinstall)
+depends=('bc' 'libstatgrab'  'mysql-python' 'expect' 'curl' 'dnsutils' 'parted'
+	 'sg3_utils' 'nmbscan' 'system-templates' 'rsync' 'python-parted'
+	 'ddcxinfo' 'python-pexpect' 'python-netifaces' 'LinHES-timezone'
+	 'python-iplib' 'mythinstall>=2-10')
 arch=('i686')
 
-source=(mv_install.py 
-	mv_config.py 
-	myth_user_call 
-	file_time_offset.py 
-	install-ui.xml 
-	install_proxy.sh 
-	install_functions.sh 
-	systemconfig.sh 
-	install_db_chroot.sh 
-	restore_default_settings.sh 
-	xconfig.sh 
-	timezip.py 
-	soundconfig.sh 
-	LinHES-release 
-	issue 
-	MythVantage.sh 
-	create_master.sh 
-	build_diskless.sh 
-	networkconfig.sh 
-	autocard.py 
-	restore_km_db_chroot.sh 
-	README 
-	mv_advanced.py 
-	mv_common.py 
-	mv_ir.py 
-	mv_misc.py 
-	mv_network.py 
-	mv_screensaver.py 
-	mv_smolt.py 
-	mv_software.py 
-	mv_webuser.py 
-	mv_hostype.py 
-	systemconfig.py 
-	myth_user_call.py)
+source=(mv_install.py
+	mv_config.py
+	myth_user_call
+	file_time_offset.py
+	install_proxy.sh
+	install_functions.sh
+	systemconfig.sh
+	install_db_chroot.sh
+	restore_default_settings.sh
+	xconfig.sh
+	timezip.py
+	soundconfig.sh
+	LinHES-release
+	issue
+	MythVantage.sh
+	create_master.sh
+	build_diskless.sh
+	networkconfig.sh
+	autocard.py
+	restore_km_db_chroot.sh
+	README
+	mv_advanced.py
+	mv_common.py
+	mv_ddns.py
+	mv_ir.py
+	mv_misc.py
+	mv_network.py
+	mv_screensaver.py
+	mv_smolt.py
+	mv_software.py
+	mv_webuser.py
+	mv_hostype.py
+	systemconfig.py
+	myth_user_call.py
+	mythvantage.cfg)
 
+backup=(etc/mythvantage.cfg)
 install=LinHES.install
 
 build() {
@@ -75,16 +77,18 @@ build() {
     install -m 0755 mv_config.py $MVDIR/bin/mv_config.py
     install -m 0755 mv_install.py $MVDIR/bin/mv_install.py
     install -m 0755 mv_advanced.py  $MVDIR/bin/
-    install -m 0755 mv_common.py $MVDIR/bin/ 
-    install -m 0755 mv_ir.py  $MVDIR/bin/ 
-    install -m 0755 mv_misc.py  $MVDIR/bin/ 
-    install -m 0755 mv_network.py  $MVDIR/bin/ 
-    install -m 0755 mv_screensaver.py  $MVDIR/bin/ 
-    install -m 0755 mv_smolt.py  $MVDIR/bin/ 
-    install -m 0755 mv_software.py  $MVDIR/bin/ 
-    install -m 0755 mv_webuser.py $MVDIR/bin/ 
-    install -m 0755 mv_hostype.py $MVDIR/bin/ 
-    install -m 0755 systemconfig.py $MVDIR/bin/ 
+    install -m 0755 mv_common.py $MVDIR/bin/
+    install -m 0755 mv_ddns.py  $MVDIR/bin/
+    install -m 0755 mv_ir.py  $MVDIR/bin/
+    install -m 0755 mv_misc.py  $MVDIR/bin/
+    install -m 0755 mv_network.py  $MVDIR/bin/
+    install -m 0755 mv_screensaver.py  $MVDIR/bin/
+    install -m 0755 mv_smolt.py  $MVDIR/bin/
+    install -m 0755 mv_software.py  $MVDIR/bin/
+    install -m 0755 mv_webuser.py $MVDIR/bin/
+    install -m 0755 mv_hostype.py $MVDIR/bin/
+    install -m 0755 systemconfig.py $MVDIR/bin/
+    install -m 0755 mythvantage.cfg $startdir/pkg/etc/
 
     #README file displayed on install
     install -m 0755 README $MVDIR/README
@@ -96,6 +100,40 @@ build() {
     install -m 0755 LinHES-release $startdir/pkg/etc/LinHES-release
     install -m 0755 issue $startdir/pkg/etc/issue
 
-    # copy over the ui files
-    install -m 0755 install-ui.xml $startdir/pkg/usr/share/mythtv/themes/default/
 }
+
+md5sums=('297441b8d85820698c19e7c0ad5a3dfe'
+         '1a4694fcd694b362c339bda781ed0f3e'
+         'e36da536dd651ef182e7642337889e77'
+         '3baa23764e1b6bcb2d66d7d859096940'
+         'd7a8cd4a0060399ae22e69f74e04eb07'
+         '7a45287a07145fde5aa664583d4f6fba'
+         'f88d2fb88339a4bf8ec9217a3fbcdef7'
+         '8ac1cfd2eca0f641737da0d0aca416a7'
+         '9ae8d79f620c6d19973c55c32a921874'
+         '4620f6f498ef4523398635cb0bd59425'
+         '06188493e5ed79cb501d3c5694dee8ca'
+         'e459ed069317bccb20351f037a9df3d2'
+         'e519c47ae24fb65799ec57a4a2050653'
+         '6aff504ed5e860adc1b7317cd0780900'
+         '55fccb1da0417a896b724f7cfc32dd5a'
+         'ab2aa42c2947148c2b1cac0ade6d1d55'
+         'd429b59d3cfb37b0624c6a4a71a7c2c0'
+         'a225143e3df6f56d451c2875e54ddbae'
+         '687555968d4ca688d8f95c8f13e1d8d4'
+         '3d1e4a119f38cff0498bf8a67e94e4b3'
+         '5b41cfc6f4ad5cdbcd28cf980110f135'
+         'ee7c8e1f025ce1527ecfffabafb26806'
+         '41b03fb1e0a9d9ae7588e3b813212772'
+         'a9ffe72c3ede99d505fdc97572a7c256'
+         'df43bce1712320508d4eef8449c5d223'
+         '65d93f15ac85adf8299552581789a731'
+         '4badc3c664c55f87396a473e6c14d4bc'
+         'e2aa772fe0bf366e26eaaf663f9257bd'
+         'fe5e31b833cc6707209e9d656b6eb53c'
+         'd328d63eaa4252f3d4888476c79bbff6'
+         '23d0e12b7ca1cc6ea6b993c1d7ff20b9'
+         '857a831e8627727306208f0e776b1b98'
+         'cf35353141b70145f3ee8b0bd852c9f1'
+         'cf60e7ba4cf3467bb5539d5c51da61b6'
+         'a63ff9ef5250965aeabc74bfa8e43981')
diff --git a/abs/core/LinHES-config/README b/abs/core/LinHES-config/README
index 447678a..e045f2c 100644
--- a/abs/core/LinHES-config/README
+++ b/abs/core/LinHES-config/README
@@ -1,9 +1,9 @@
 Thanks for choosing LinHES!  At the moment, LinHES is compiled for i686. 
-If you have an i586 class system, LinHES won't work for you.  I've not seen a great request for i586.  If you want it, you have to drum up support for it.  The PVR-350 TV out isn't supported at this time.  I have to determine if it works with MythTV 0.22 first.
+If you have an i586 class system, LinHES won't work for you.  I've not seen a great request for i586.  If you want it, you have to drum up support for it. 
 
 Support for LinHES can be obtained at:
 http://linhes.org
 irc.freenode.net #linhes
  
 Bugs can be reported at:
-http://linhes.org/flyspray
+http://linhes.org/bugs
diff --git a/abs/core/LinHES-config/mv_advanced.py b/abs/core/LinHES-config/mv_advanced.py
index 4790fcf..bc0d19e 100755
--- a/abs/core/LinHES-config/mv_advanced.py
+++ b/abs/core/LinHES-config/mv_advanced.py
@@ -224,12 +224,12 @@ def setup_samba(systemconfig,data_config):
         else:
             Samba_media = systemconfig["Samba_media"]
             Samba_home = systemconfig["Samba_home"]
-            if systemconfig["Samba_mediareadonly"] == "1":
+            if systemconfig["Samba_mediareadonly"] == "0":
                 smreadonly = "yes"
             else:
                 smreadonly = "no"
 
-            if systemconfig["Samba_homereadonly"] == "1":
+            if systemconfig["Samba_homereadonly"] == "0":
                 shreadonly = "yes"
             else:
                 shreadonly = "no"
@@ -310,8 +310,11 @@ create mask = 0755 ''' %(data_config.MYTHHOME,shreadonly)
             logging.debug("     %s",homelines)
 
 
-        mv_common.add_service("nmbd")
+	mv_common.add_service("nmbd")
         mv_common.add_service("smbd")
+	mv_common.restart_service("nmbd")
+	mv_common.restart_service("smbd")
+
     else:
         logging.info("  Removing windows file sharing")
         mv_common.remove_service("smbd")
@@ -346,6 +349,9 @@ def setup_dyndns(DDnsEnable):
 
 
 def setup_advanced(systemconfig,data_config):
+    if  mv_common.read_config(mv_common.module_config,"advanced")  == False  :
+        logging.info("____Skipping of Advanced, config disabled____")
+        return
     logging.info("____Start of advanced configuration____")
     create_link = False
     if systemconfig["SystemType"] == "Master_backend":
diff --git a/abs/core/LinHES-config/mv_common.py b/abs/core/LinHES-config/mv_common.py
index a492597..0272809 100755
--- a/abs/core/LinHES-config/mv_common.py
+++ b/abs/core/LinHES-config/mv_common.py
@@ -1,9 +1,34 @@
 # -*- coding: utf-8 -*-
 import logging, os, time
 import commands
+import ConfigParser
 config_file = "mv_config"
 data_config = __import__(config_file, globals(), locals(), [])
 
+module_config = ConfigParser.RawConfigParser()
+try:
+    module_config.read('/etc/mythvantage.cfg')
+except:
+    logging.info("couldn't read mythvantage.cfg")
+
+
+def read_config(module_config,data):
+    rvalue = True
+    section = "mythvantage"
+    try:
+        rvalue = module_config.get(section, data)
+        if rvalue == "False":
+            rvalue = False
+        if rvalue == "no":
+            rvalue = False
+
+
+    except:
+        logging.debug("Couldn't read mythvantage.cfg")
+        rvalue = True
+
+    return rvalue
+
 def runcmd(cmd):
     if data_config.NOOPDEBUG=="FALSE":
         pass
@@ -107,6 +132,8 @@ def pacinstall(pkg):
         add_service("webmin")
     elif pkg == "fuppes":
         pacinstall("fuppes-svn")
+    elif pkg == "mupen64":
+        pacinstall("mupen64plus-svn")
 
     if  not pkg_blacklist_check(pkg):
         if pkg_installed_check(pkg):
@@ -126,6 +153,10 @@ def pacremove(pkg):
         pacremove("libdvdcss")
     elif pkg == "webmin":
         remove_service("webmin")
+    elif pkg == "fuppes":
+        pacremove("fuppes-svn")
+    elif pkg == "mupen64":
+        pacremove("mupen64plus-svn")
 
     if  not pkg_blacklist_check(pkg):
         if not pkg_installed_check(pkg):
diff --git a/abs/core/LinHES-config/mv_ddns.py b/abs/core/LinHES-config/mv_ddns.py
new file mode 100755
index 0000000..9695f76
--- /dev/null
+++ b/abs/core/LinHES-config/mv_ddns.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+import logging, mv_common
+import os, re
+
+config_file = "mv_config"
+
+def setup_ddns(systemconfig):
+    if  mv_common.read_config(mv_common.module_config,"ddns")  == False  :
+        logging.info("____Skipping of DDNS, config disabled____")
+        return
+    logging.info("____Start of setup_ddns____")
+
+    if systemconfig["DDnsEnable"] == "1":
+        logging.debug("    Enabling DDNS")
+	mv_common.pacinstall("ddclient")
+	mv_common.cp_and_log("/etc/ddclient/ddclient.conf.dynamic.dyndns.sample",
+	  		     "/etc/ddclient/ddclient.conf")
+	cmd = ''' sed -i -e "s/your-dynamic-dyndns-login/%s/g" /etc/ddclient/ddclient.conf''' %(systemconfig["DDnslogin"])
+	mv_common.runcmd(cmd)
+	cmd = ''' sed -i -e "s/your-dynamic-dyndns-password/%s/g" /etc/ddclient/ddclient.conf''' %(systemconfig["DDnspassword"])
+	mv_common.runcmd(cmd)
+	cmd = ''' sed -i -e "s/your-dynamic-dyndns-host/%s/g" /etc/ddclient/ddclient.conf''' %(systemconfig["DDnshostname"])
+	mv_common.runcmd(cmd)
+	mv_common.add_service("ddclient")
+    else:
+        logging.debug("    Disabling DDNS")
+	mv_common.remove_service("ddclient")
+
+    logging.info("__End of ddns\n")
diff --git a/abs/core/LinHES-config/mv_hostype.py b/abs/core/LinHES-config/mv_hostype.py
index d6ec0ed..4eade73 100755
--- a/abs/core/LinHES-config/mv_hostype.py
+++ b/abs/core/LinHES-config/mv_hostype.py
@@ -124,6 +124,9 @@ def setup_syslog(dbhost):
     return
 
 def hostypeprint(systemconfig):
+    if  mv_common.read_config(mv_common.module_config,"hostype")  == False  :
+        logging.info("____Skipping of hostype, config disabled____")
+        return
     logging.info("______Start of hostype config_____")
     mv_common.services(systemconfig)
     install_list=''
@@ -212,7 +215,7 @@ def hostypeprint(systemconfig):
     else:
         logging.debug("   Will NOT run the frontend")
         mv_common.remove_service("frontend")
-        mv_common.remove_service("hal")
+        mv_common.add_service("hal")
         if data_config.SYSTEMTYPE == "MythVantage":
             mv_common.remove_service("ghosd")
 
diff --git a/abs/core/LinHES-config/mv_ir.py b/abs/core/LinHES-config/mv_ir.py
index bc1ae37..a5e3f3b 100755
--- a/abs/core/LinHES-config/mv_ir.py
+++ b/abs/core/LinHES-config/mv_ir.py
@@ -113,7 +113,7 @@ def setup_ir_remote(Remotetype,templates):
         mv_common.add_service("lircd")
 
 
-def setup_ir_receiver(ReceiverType,TEMPLATES):
+def setup_ir_receiver(ReceiverType,TEMPLATES,HDHRlirc_device,myip):
     logging.info("    Configuring receiver %s", ReceiverType)
     if ReceiverType == "Serial":
         scrub_modules("/etc/modules.mythvantage","lirc")
@@ -153,6 +153,7 @@ def setup_ir_receiver(ReceiverType,TEMPLATES):
         mv_common.runcmd(cmd)
         mv_common.remove_service("igdaemon")
         mv_common.remove_service("tatir")
+
     elif ReceiverType == "iguanaIR-usb":
         scrub_modules("/etc/modules.mythvantage","lirc")
         mv_common.add_service("igdaemon")
@@ -162,6 +163,12 @@ def setup_ir_receiver(ReceiverType,TEMPLATES):
         scrub_modules("/etc/modules.mythvantage","lirc")
         mv_common.add_service("tatir")
         mv_common.remove_service("igdaemon")
+    elif ReceiverType == "SiliconDust_HDHR":
+        mv_common.remove_service("igdaemon")
+        mv_common.remove_service("tatir")
+        cmd = '''hdhomerun_config %s set /ir/target %s:5000 store''' %(HDHRlirc_device,myip)
+        print cmd
+        mv_common.runcmd(cmd)
 
     else:
         logging.debug("    didn't match receiver, using genric case")
@@ -281,7 +288,11 @@ def setup_lcd(LCDtype, TEMPLATES, Remotetype):
     logging.debug("__End of setup_lcd")
 
 def setup_ir(systemconfig, data_config):
-    rc = False
+    rc = [ False , False ]
+    if  mv_common.read_config(mv_common.module_config,"ir")  == False  :
+        logging.info("____Skipping of IR, config disabled____")
+        return rc
+
     logging.info("____Start of IR____")
     if systemconfig["Remotetype"] == "tinker":
         logging.info("    Tinker mode detected")
@@ -304,9 +315,11 @@ def setup_ir(systemconfig, data_config):
 
         if systemconfig["ReceiverType"]:
             setup_ir_receiver(systemconfig["ReceiverType"],
-                              systemconfig["TEMPLATES"])
+                              systemconfig["TEMPLATES"],
+                              systemconfig["HDHRlirc_device"],
+                              systemconfig["mythip"])
         else:
-            setup_ir_receiver("unknown", systemconfig["TEMPLATES"])
+            setup_ir_receiver("unknown", systemconfig["TEMPLATES"],'','127.0.0.1')
         unload_all_lirc()
         setup_blaster_proto(HostBlasterType,
                             Hostnumblaster,
diff --git a/abs/core/LinHES-config/mv_network.py b/abs/core/LinHES-config/mv_network.py
index b80e4cc..f256785 100755
--- a/abs/core/LinHES-config/mv_network.py
+++ b/abs/core/LinHES-config/mv_network.py
@@ -50,7 +50,7 @@ def get_ip(ifname):
     )[20:24])
 
 def get_default_route(iface):
-    rcroute = "127.0.0.1" 
+    rcroute = "127.0.0.1"
     f = open ('/proc/net/route', 'r')
     for line in f:
         words = string.split (line)
@@ -107,7 +107,7 @@ def setup_MTYH_DNS():
       for line in f:
           if line.startswith("nameserver"):
               print line
-              returndns = line.split()[1]  
+              returndns = line.split()[1]
               break
     except:
       logging.debug("   Couldn't open /etc/resolv.conf for myth_dns")
@@ -158,7 +158,7 @@ def setup_hostname(systemconfig):
     except:
         logging.critical("    *Hostname could not be set")
         logging.info("    Using default value of me")
-        hostname = "me"
+        hostname = "diamonds"
     logging.info("    Setting the hostname to %s", hostname)
     cmd = ''' echo %s > /etc/hostname ''' %hostname
     mv_common.runcmd(cmd)
@@ -168,7 +168,7 @@ def setup_hostname(systemconfig):
         logging.debug("    not using dhcp")
         cmd = ''' echo 127.0.0.1 localhost  > /etc/hosts '''
         mv_common.runcmd(cmd)
-        cmd = ''' echo %s %s  > /etc/hosts ''' %(systemconfig["mythip"], systemconfig["hostname"])
+        cmd = ''' echo %s %s  >> /etc/hosts ''' %(systemconfig["mythip"], systemconfig["hostname"])
         mv_common.runcmd(cmd)
     else:
         cmd = ''' echo 127.0.0.1 %s localhost  > /etc/hosts ''' %systemconfig["hostname"]
@@ -482,6 +482,9 @@ def hostname_change_check(systemconfig):
 
 
 def setup_network (systemconfig,this_is_install):
+    if  mv_common.read_config(mv_common.module_config,"network")  == False  :
+        logging.info("____Skipping of network, config disabled____")
+        return False
     logging.info("____Start of network____")
     logging.info("    Setting up the network")
     restartfe = hostname_change_check(systemconfig)
diff --git a/abs/core/LinHES-config/mv_screensaver.py b/abs/core/LinHES-config/mv_screensaver.py
index 2da970c..4068832 100755
--- a/abs/core/LinHES-config/mv_screensaver.py
+++ b/abs/core/LinHES-config/mv_screensaver.py
@@ -163,6 +163,9 @@ def setup_gnome_screensaver(theme,idletime):
 
 
 def setup_screensaver (systemconfig,data_config):
+    if  mv_common.read_config(mv_common.module_config,"screensaver")  == False  :
+        logging.info("____Skipping of Screensaver, config disabled____")
+        return
     logging.info("____Start of screensaver configuration____")
     screensavertype = systemconfig["Screensavertype"]
     theme = systemconfig["Screensavertheme"]
diff --git a/abs/core/LinHES-config/mv_smolt.py b/abs/core/LinHES-config/mv_smolt.py
index 5fd3722..cfc697e 100755
--- a/abs/core/LinHES-config/mv_smolt.py
+++ b/abs/core/LinHES-config/mv_smolt.py
@@ -20,6 +20,9 @@ def read_release(stype):
 
 
 def setup_smolt_type(SystemType,Remotetype,RunFrontend,mythhome,stype):
+    if  mv_common.read_config(mv_common.module_config,"smolt")  == False  :
+        logging.info("____Skipping of smolt, config disabled____")
+        return
     logging.debug("____Start of setup_smolt_type____")
     releasename = read_release(stype)
 
diff --git a/abs/core/LinHES-config/mv_software.py b/abs/core/LinHES-config/mv_software.py
index aabcf89..c0f5a5b 100755
--- a/abs/core/LinHES-config/mv_software.py
+++ b/abs/core/LinHES-config/mv_software.py
@@ -3,6 +3,10 @@ import logging, mv_common
 import os, re
 
 def setup_software(systemconfig, data_config):
+    if  mv_common.read_config(mv_common.module_config,"software")  == False  :
+        logging.info("____Skipping of software, config disabled____")
+        return
+
     logging.info("____Start of Software install____")
     postfix=''
     if data_config.SYSTEMTYPE == "MythVantage":
@@ -13,23 +17,23 @@ def setup_software(systemconfig, data_config):
         postfix = "-release-fixes"
       else:
         postfix = "-svn"
-
+#This section is for MythVantage OS, not LINHES
       default_disabled = ("mythphone", "mytharchive", "mythbrowser", "mythnews",
                           "mythgame", "mythflix", "mythweather",
-			  "mythzoneminder" )
+			  "mythzoneminder","mythnetvision" )
 
       default_installed=("mythcontrols", "mythgallery", "mythmovies",
                           "mythmusic", "mythsmolt", "mythvideo")
-      other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome", "mythappletrailers", "mythstream", "mythvodka")
+      other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome", "mythappletrailers", "mythstream", "mupen64")
     else:
       default_disabled = ("mythphone", "mytharchive", "mythbrowser", "mythnews",
                           "mythgame", "mythflix", "mythweather",
                           "mythappletrailers", "mythstream", "mythvodka",
-			  "mythzoneminder" )
+			  "mythzoneminder","mythnetvision" )
 
       default_installed=("mythcontrols", "mythgallery", "mythmovies",
                           "mythmusic", "mythsmolt", "mythvideo")
-      other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome")
+      other_pkg=("miro", "mednafen", "romdb", "xine", "dvdcss", "webmin" , "fuppes", "foldingathome","mupen64")
 
     for pkg in default_disabled:
         pkgname=pkg+postfix
diff --git a/abs/core/LinHES-config/mv_webuser.py b/abs/core/LinHES-config/mv_webuser.py
index a8517a8..3e383f2 100755
--- a/abs/core/LinHES-config/mv_webuser.py
+++ b/abs/core/LinHES-config/mv_webuser.py
@@ -3,6 +3,10 @@ import logging, mv_common
 #import os
 
 def setup_web_auth(UseMythWEB_auth):
+    if  mv_common.read_config(mv_common.module_config,"webuser")  == False  :
+        logging.info("____Skipping of webuser, config disabled____")
+        return
+
     logging.info("____Start of setup_web_auth____")
     if UseMythWEB_auth == str(1):
         #enable auth
diff --git a/abs/core/LinHES-config/mythvantage.cfg b/abs/core/LinHES-config/mythvantage.cfg
new file mode 100644
index 0000000..eaa4865
--- /dev/null
+++ b/abs/core/LinHES-config/mythvantage.cfg
@@ -0,0 +1,21 @@
+[mythvantage]
+#change any of the following to False or True
+# True will allow systemconfig to run that module
+# False will skip the module
+misc = True
+sleep = True
+hostype = True
+advanced = True
+audio = True
+network = True
+xorg = True
+webuser = True
+restartfe = True
+reloadfe = True
+ddns = True
+screensaver = True
+ir = True
+user = True
+software = True
+smolt = True
+
diff --git a/abs/core/LinHES-config/restore_default_settings.sh b/abs/core/LinHES-config/restore_default_settings.sh
index dcf5e23..ffd4b0d 100755
--- a/abs/core/LinHES-config/restore_default_settings.sh
+++ b/abs/core/LinHES-config/restore_default_settings.sh
@@ -5,7 +5,7 @@ shopt -s -o nounset
 echo $@ >>  /tmp/restore.out
 #TEMPLATES="/usr/share/templates/settings"
 TEMPLATES="$TEMPLATES/settings"
-TABLES="settings keybindings"
+TABLES="settings keybindings jumppoints"
 MYTHDBUSER=mythtv
 MYTHTVPASSWD=mythtv
 declare -r OPTSTRING="c:e:t:d:h:s:a:z:Ho"
@@ -15,12 +15,12 @@ declare -i EVERYTHING=0
 
 
 function CMD_DEFINE () {
-     #add override check
+    #add override check
     if  [ x$Thistemplate = xsyssettings  -a  $OVERRIDE  -eq 1   ]
     then
-         MYSQLCMD="mysql  --local-infile  -s -u$MYTHDBUSER  -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
-         MYSQLCMD_C="mysql -u$MYTHDBUSER  -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
-         MYSQLCMD_UPDATE_HOST="UPDATE settings set data='$oldhostname' where value='HostMyhostname' and hostname=\"$hostname\";"
+        MYSQLCMD="mysql  --local-infile  -s -u$MYTHDBUSER  -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
+        MYSQLCMD_C="mysql -u$MYTHDBUSER  -p$MYTHTVPASSWD -h$ovdbhost mythconverg -B --exec"
+        MYSQLCMD_UPDATE_HOST="UPDATE settings set data='$oldhostname' where value='HostMyhostname' and hostname=\"$hostname\";"
     else
         MYSQLCMD="mysql  --local-infile  -s -u$MYTHDBUSER  -p$MYTHTVPASSWD -h$dbhost mythconverg -B --exec"
         MYSQLCMD_C="mysql -u$MYTHDBUSER  -p$MYTHTVPASSWD -h$dbhost mythconverg -B --exec"
@@ -32,21 +32,21 @@ function SQL_DEFINE () {
     thostname=`echo ${hostname}|tr -C [:alpha:] _`
     echo "Using $thostname for temp table postfix"
 
-	#$1 is the table name
-	if [ $1 = "settings" ]
-	then
-		ALTERSQL="Alter table  temp_${1}_${thostname} add unique ( value )"
-	else
-		ALTERSQL=";"
-	fi
+    #$1 is the table name
+    if [ $1 = "settings" ]
+    then
+        ALTERSQL="Alter table  temp_${1}_${thostname} add unique ( value )"
+    else
+        ALTERSQL=";"
+    fi
 
     CREATESQL="create table  temp_${1}_${thostname} like $1;"
-	COPY_TMP_SQL="replace  into  temp_${1}_${thostname}  (select * from $1 where hostname=\"$hostname\");"
-	INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${thostname}  FIELDS TERMINATED BY '\t';"
+    COPY_TMP_SQL="replace  into  temp_${1}_${thostname}  (select * from $1 where hostname=\"$hostname\");"
+    INSERTSQL="LOAD DATA local INFILE '/tmp/$1.txt' REPLACE INTO TABLE temp_${1}_${thostname}  FIELDS TERMINATED BY '\t';"
     #INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$Thistemplate/$1.txt' REPLACE INTO TABLE temp_${1}_${hostname}  FIELDS TERMINATED BY '\t';"
-	DROPSQL="delete  from $1 where hostname=\"$hostname\";"
-	COPY_BCK_SQL="replace  into $1   (select * from  temp_${1}_${thostname}  where hostname=\"$hostname\");"
-	DROP_TABLE="Drop table temp_${1}_${thostname}"
+    DROPSQL="delete  from $1 where hostname=\"$hostname\";"
+    COPY_BCK_SQL="replace  into $1   (select * from  temp_${1}_${thostname}  where hostname=\"$hostname\");"
+    DROP_TABLE="Drop table temp_${1}_${thostname}"
 }
 
 function ARG_ERR()  {
@@ -101,8 +101,8 @@ do
                     ARG_ERR
                     Thistemplate=$OPTARG
 
-                     if  [  x$Thistemplate = x"syssettings"  ]
-                     then
+                    if  [  x$Thistemplate = x"syssettings"  ]
+                    then
                             echo "template is syssettings"
                             loadhost=false
                     elif [  x$Thistemplate = x"hostsettings"  ]
@@ -128,13 +128,13 @@ do
                     ARG_ERR
                     if [ $OVERRIDE =  1 ]
                     then
-                       oldhostname=$hostname
+                    oldhostname=$hostname
                         hostname=$OPTARG
                     else
                         hostname=$OPTARG
-                   fi
+                fi
 
-                                  ;;
+                                ;;
             s) echo "$SWITCH"  "$OPTARG"
                     ARG_ERR
                     SYSTEMTYPE=$OPTARG
@@ -144,11 +144,11 @@ do
                     IP_ADDRESS=$OPTARG
                     ;;
             z) echo "$SWITCH"  "$OPTARG"
-                   ARG_ERR
-                   ZIPCODE=$OPTARG
+                ARG_ERR
+                ZIPCODE=$OPTARG
                     ;;
-           o)  OVERRIDE=1
-                 ;;
+        o)  OVERRIDE=1
+                ;;
 
             esac
 done
@@ -175,10 +175,10 @@ fi
 
 case $OPERATION in
 
-	restore)
-		#used to restore settings from syssettings
-		if  [ -d $TEMPLATES/$Thistemplate ]
-		then
+    restore)
+        #used to restore settings from syssettings
+        if  [ -d $TEMPLATES/$Thistemplate ]
+        then
             cd $TEMPLATES/$Thistemplate
             if [ $loadhost = false ]
                 then
@@ -213,38 +213,42 @@ case $OPERATION in
                 $MYSQLCMD "$COPY_BCK_SQL"
                 $MYSQLCMD "$DROP_TABLE "
             fi
-		else
-		 echo "couldn't find $TEMPLATES/$Thistemplate"
-		fi
-	;;
+        else
+        echo "couldn't find $TEMPLATES/$Thistemplate"
+        fi
+    ;;
 
-	save)
+    save)
+        if [ ! -d $TEMPLATES/$Thistemplate ]
+        then
+            mkdir -p $TEMPLATES/$Thistemplate
+        fi
 
-                if [ ! -d $TEMPLATES/$Thistemplate ]
-                then
-                    mkdir -p $TEMPLATES/$Thistemplate
-                fi
+        cd $TEMPLATES/$Thistemplate
+        for i in $TABLES
+        do
+            EXTRACLAUSE=""
+            case $i in
+            settings)
+                EXTRACLAUSE="and  not (value like \"BackendServerIP\") and not (value like \"locale\")  order by value"
+                SQL="select value,data,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE"  ;"
+            #    SQL="select * from $i where hostname=\"$hostname\" "$EXTRACLAUSE"  ;"
+                $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
+                ;;
+            keybindings)
+                SQL="select context,action,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\"  "$EXTRACLAUSE"  ;"
+                $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
+                ;;
+            jumppoints)
+                SQL="select destination,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\"  "$EXTRACLAUSE"  ;"
+                $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
 
-                cd $TEMPLATES/$Thistemplate
-        		for i in $TABLES
-		        do
-                     EXTRACLAUSE=""
-                    case $i in
-                    settings)
-                        EXTRACLAUSE="and  not (value like \"BackendServerIP\") and not (value like \"locale\")  order by value"
-                       	SQL="select value,data,'REPLACEME' as hostname from $i where hostname=\"$hostname\" "$EXTRACLAUSE"  ;"
-                    #    SQL="select * from $i where hostname=\"$hostname\" "$EXTRACLAUSE"  ;"
-             	        $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
-                           ;;
-                      keybindings)
-                                SQL="select context,action,description,keylist,'REPLACEME' as hostname from $i where hostname=\"$hostname\"  "$EXTRACLAUSE"  ;"
-                                $MYSQLCMD_C "$SQL" > $TEMPLATES/$Thistemplate/$i.txt
-                            ;;
-                    esac
-	                  #  sed -e "s/$hostname/REPLACEME/g"  $i  > $i.txt && rm $i
+                    ;;
+            esac
+            #  sed -e "s/$hostname/REPLACEME/g"  $i  > $i.txt && rm $i
 
-                done
-		;;
+        done
+        ;;
 
     load)
 
@@ -253,22 +257,22 @@ case $OPERATION in
                 do
                     if [ -f $TEMPLATES/$i/settings.txt   ]
                     then
-                           echo $i
-                          for tablename in $TABLES
+                        echo $i
+                        for tablename in $TABLES
                             do
-                         #create table
+                        #create table
                             CREATESQL="create table IF NOT EXISTS ${tablename}_${i} like $tablename;"
                             $MYSQLCMD_C "$CREATESQL"
-                         #truncate table
+                        #truncate table
                             TRUNCATESQL="truncate ${tablename}_${i}  "
                             $MYSQLCMD_C "$TRUNCATESQL"
-                         #load table
-                              INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$i/$tablename.txt' REPLACE INTO TABLE ${tablename}_${i}   FIELDS TERMINATED BY '\t';"
+                        #load table
+                            INSERTSQL="LOAD DATA local INFILE '$TEMPLATES/$i/$tablename.txt' REPLACE INTO TABLE ${tablename}_${i}   FIELDS TERMINATED BY '\t';"
                                 $MYSQLCMD_C "$INSERTSQL"
-                         #update_hostname
-                              UPDATEHOSTNAMESQL="update  ${tablename}_${i}  set hostname='$i'  ; "
+                        #update_hostname
+                            UPDATEHOSTNAMESQL="update  ${tablename}_${i}  set hostname='$i'  ; "
                                 $MYSQLCMD_C "$UPDATEHOSTNAMESQL"
-                           done
+                        done
                     else
 
                         echo "couldn't find $TEMPLATES/$i/settings.txt  template to load"
@@ -286,6 +290,14 @@ case $OPERATION in
                     $MYSQLCMD_C "$CREATESQL"
                     CREATESQL="create table IF NOT EXISTS keybindings_user3  like keybindings;"
                     $MYSQLCMD_C "$CREATESQL"
+
+                    CREATESQL="create table IF NOT EXISTS jumppoints_user1  like jumppoints;"
+                    $MYSQLCMD_C "$CREATESQL"
+                    CREATESQL="create table IF NOT EXISTS jumppoints_user2  like jumppoints;"
+                    $MYSQLCMD_C "$CREATESQL"
+                    CREATESQL="create table IF NOT EXISTS jumppoints_user3  like jumppoints;"
+                    $MYSQLCMD_C "$CREATESQL"
+
                 done
 ;;
 
@@ -302,14 +314,14 @@ case $OPERATION in
                 if [ $SYSTEMTYPE = "slave" ]
                 then
                         $MYSQLCMD_C "delete  from   settings    where value='BackendServerIP'  and  hostname=\"$hostname\";"
-	    		        $MYSQLCMD_C "REPLACE INTO settings  set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";"
+                        $MYSQLCMD_C "REPLACE INTO settings  set data='${IP_ADDRESS}' , value='BackendServerIP' , hostname=\"$hostname\";"
                 fi
                 ;;
         ZIP)
-               $MYSQLCMD_C "delete from settings where  value='locale' and  hostname=\"$hostname\";"
-               $MYSQLCMD_C "REPLACE INTO  settings set data='$ZIPCODE'  ,  value='locale' , hostname=\"$hostname\";"
-               $MYSQLCMD_C "delete from settings where  value='MythMovies.ZipCode' and  hostname=\"$hostname\";"
-               $MYSQLCMD_C "REPLACE INTO  settings set data='$ZIPCODE',  value='MythMovies.ZipCode' , hostname=\"$hostname\";"
+            $MYSQLCMD_C "delete from settings where  value='locale' and  hostname=\"$hostname\";"
+            $MYSQLCMD_C "REPLACE INTO  settings set data='$ZIPCODE'  ,  value='locale' , hostname=\"$hostname\";"
+            $MYSQLCMD_C "delete from settings where  value='MythMovies.ZipCode' and  hostname=\"$hostname\";"
+            $MYSQLCMD_C "REPLACE INTO  settings set data='$ZIPCODE',  value='MythMovies.ZipCode' , hostname=\"$hostname\";"
                 ;;
         MUSICFRONT)
                 ALSADEVICE
@@ -325,7 +337,7 @@ case $OPERATION in
             $MYSQLCMD_C "delete from settings where value='MusicAudioDevice' and hostname=\"$hostname\";"
             $MYSQLCMD_C "REPLACE INTO  settings set data='$SoundDevice',  value='MusicAudioDevice' , hostname=\"$hostname\";"
                 ;;
-         uhostname)
+        uhostname)
                     #used when the hostname is changed.
                     TABLES="settings capturecard keybindings storagegroup recorded"
                     for i in $TABLES
@@ -353,7 +365,7 @@ case $OPERATION in
                 SQL="update settings set data='0' where value='Hostaccessuser' and hostname=\"$hostname\"  ;"
                 $MYSQLCMD_C "$SQL"
                 ;;
-	esac
+    esac
 
 #SELECT * INTO OUTFILE 'data.txt'
 # FIELDS TERMINATED BY ','
diff --git a/abs/core/LinHES-config/systemconfig.py b/abs/core/LinHES-config/systemconfig.py
index c559e09..2e07b2f 100755
--- a/abs/core/LinHES-config/systemconfig.py
+++ b/abs/core/LinHES-config/systemconfig.py
@@ -36,8 +36,11 @@ def usage():
     logging.info("tell people how to use this")
 
 def setup_x(systemconfig):
-    cmd = "%s/bin/xconfig.sh" %systemconfig["MVROOT"]
-    mv_common.runcmd(cmd)
+    if  mv_common.read_config(mv_common.module_config,"xorg")  == False  :
+        logging.info("____Skipping of Xorg, config disabled____")
+    else:
+        cmd = "%s/bin/xconfig.sh" %systemconfig["MVROOT"]
+        mv_common.runcmd(cmd)
 
 def main(argv):
     try:
@@ -124,30 +127,40 @@ def main(argv):
 
 
     if cmdmodule["audio"] == True:
-        logging.debug("______Start of Audio Configuration______")
-        if not systemconfig["Audiotype"] == "tinker":
-            cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,systemconfig["Audiotype"],systemconfig["SoundDevice"])
-            mv_common.runcmd(cmd)
+        if  mv_common.read_config(mv_common.module_config,"audio")  == False  :
+            logging.info("____Skipping of Audio, config disabled____")
         else:
-            logging.debug("    Tinker mode(audio), not changing configuration")
-        logging.debug("__End of audio")
+            logging.debug("______Start of Audio Configuration______")
+            if not systemconfig["Audiotype"] == "tinker":
+                cmd="%s/bin/soundconfig.sh -t real -i %s -d %s" %(MVROOT,systemconfig["Audiotype"],systemconfig["SoundDevice"])
+                mv_common.runcmd(cmd)
+            else:
+                logging.debug("    Tinker mode(audio), not changing configuration")
+            logging.debug("__End of audio")
 
     if cmdmodule["misc"]:
-        import mv_misc
-        mv_misc.setup_zip(MVROOT,systemconfig["zipcode"])
-        mv_misc.setup_tz(systemconfig["timezone"],systemconfig["TEMPLATES"])
-        mv_misc.setup_nfs(systemconfig)
+        if  mv_common.read_config(mv_common.module_config,"misc")  == False  :
+            logging.info("____Skipping of misc, config disabled____")
+        else:
+            import mv_misc
+            mv_misc.setup_zip(MVROOT,systemconfig["zipcode"])
+            mv_misc.setup_tz(systemconfig["timezone"],systemconfig["TEMPLATES"])
+            mv_misc.setup_nfs(systemconfig)
 
     if cmdmodule["sleep"]:
-        import mv_misc
-        mv_misc.setup_sleep(systemconfig)
+        if  mv_common.read_config(mv_common.module_config,"sleep")  == False  :
+            logging.info("____Skipping of sleep, config disabled____")
+        else:
+            import mv_misc
+            mv_misc.setup_sleep(systemconfig)
 
     if cmdmodule["webuser"]:
         import mv_webuser
         mv_webuser.setup_web_auth(systemconfig["UseMythWEB_auth"])
 
     if cmdmodule["ddns"]:
-        print " LOOK FOR DDNS"
+        import mv_ddns
+        mv_ddns.setup_ddns(systemconfig)
 
     if cmdmodule["screensaver"]:
         import mv_screensaver
@@ -162,7 +175,10 @@ def main(argv):
         mv_software.setup_software(systemconfig, data_config)
 
     if cmdmodule["advancedX"]:
-        setup_x(systemconfig)
+        if  mv_common.read_config(mv_common.module_config,"xorg")  == False  :
+            logging.info("____Skipping of advancedX, config disabled____")
+        else:
+            setup_x(systemconfig)
 
     if cmdmodule["restartfe"]:
         mv_common.restartfe(restartlcd)
diff --git a/abs/core/LinHES-system/LinHES-run b/abs/core/LinHES-system/LinHES-run
old mode 100644
new mode 100755
index 1b91def..d5a3a15
--- a/abs/core/LinHES-system/LinHES-run
+++ b/abs/core/LinHES-system/LinHES-run
@@ -1,13 +1,28 @@
 #!/bin/sh
+function msg(){
+    echo -e "$1"  | osd_cat --pos=middle --align=center --offset=200 --delay=5 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+}
+
 . /etc/profile
 . /etc/systemconfig
-
+. /etc/unclutter.cfg || {
+	idle=1
+	jitter=200
+}
+. /etc/osd_cat.cfg || {
+	color=yellow
+	outline=2
+	outlinecolour=black
+	shadow=0
+	shadowcolour=black
+	font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
 #keylaunch &
 #/usr/bin/tilda &
 
 #move mouse to corner
-xdotool mousemove -10 -10
-/usr/X11R6/bin/unclutter -root -idle 1 -jitter 200 -noevents  &
+xdotool mousemove 0 0 
+/usr/X11R6/bin/unclutter -root -idle $idle -jitter $jitter -noevents  &
 if [ x"$Screensavertype" = "xgscreensaver" ]
 then
     gnome-screensaver &
@@ -23,7 +38,7 @@ mtd &
 
 if [ x$ShowTips = "x1" ]
 then
-    echo "Alt+h for help"  | osd_cat --font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*" --shadow=3 --pos=middle --align=centre --offset=200 --color=yellow --delay=5 &
+    msg "Alt+h for help" &
 fi
 
 # Run any scripting that applies to special hardware.  These brand-specific commands that run
@@ -46,6 +61,13 @@ SpecialHardwareCommands() {
     esac
 }
 
+#update apple trailers
+if [[ x$RunFrontend = x1 && -f ~/.configure ]]
+then
+    /usr/bin/php -q /usr/bin/myth_trailers_grabber > /home/mythtv/appletrailer.xml && /usr/bin/fix_aple_url.sh 2>/dev/null &
+fi
+
+
 if [ !  $SystemType = "Frontend_only" ]
 then
     if [  -f ~/.configure ]
@@ -60,12 +82,16 @@ then
         else
 	    rm -f ~/.no_meth
 	fi
-        sudo sv stop mythbackend
-        xterm -fn *18* -e sudo taskset -c 0 /usr/bin/mythtv-setup
-        sudo sv start mythbackend
+	sudo pacman -R myth2ipod myt2xvid3
+	sudo pacman -S --noconfirm myth2ipod myt2xvid3
+    sudo sv stop mythbackend
+	cat /data/database/dvd_transcode_r6.sql | mysql -u root mythconverg
+    xterm -fn *18* -e sudo taskset -c 0 /usr/bin/mythtv-setup
+    sudo sv start mythbackend
 	sudo chown -R mythtv.mythtv /home/mythtv
-        nice -n 19 mythfilldatabase --quiet &
-        rm ~/.configure
+    nice -n 19 mythfilldatabase --quiet &
+    msg "Guide data is being loaded. \n Until this completes\n some shows will appear as unknown \n in the program guide."
+    rm ~/.configure
     fi
 fi
 
diff --git a/abs/core/LinHES-system/LinHES.install b/abs/core/LinHES-system/LinHES.install
index 2d2bdf2..0f6689e 100644
--- a/abs/core/LinHES-system/LinHES.install
+++ b/abs/core/LinHES-system/LinHES.install
@@ -12,7 +12,10 @@ MVDIR=/usr/LH/bin
 #	ln -s  $MVDIR/backup_job /etc/cron.daily/backup_cron
 #	ln -s  $MVDIR/update_system  /etc/cron.daily/xupdate_system_cron
 #	ln -s  $MVDIR/repo_sync.sh  /etc/cron.daily/zrepo_sync.sh
-	ln -s  $MVDIR/myth_mtc.sh  /etc/cron.daily/myth_mtc.sh
+	if [ ! -e /etc/cron.daily/myth_mtc.sh ]
+	then
+		ln -s  $MVDIR/myth_mtc.sh  /etc/cron.daily/myth_mtc.sh
+	fi
 
 #LINE="mythtv    ALL = NOPASSWD: /sbin/sv stop mythbackend"
 LINE="mythtv 	ALL=(ALL)       NOPASSWD: ALL"
@@ -45,7 +48,12 @@ grep -q "pam_limits.so" /etc/pam.d/su
 
 	fi
 
+# Update mythtv's fluxbox keys files to use the tvterm.sh script to get 
+# an xterm. Then signal fluxbox to re-read the keys file.
 
+sed -i.orig 's/^Mod1 x :.*xterm.*$/Mod1 x :ExecCommand tvterm.sh/g' \
+  ~mythtv/.fluxbox/keys
+pkill -HUP fluxbox
 
 }
 
diff --git a/abs/core/LinHES-system/PKGBUILD b/abs/core/LinHES-system/PKGBUILD
old mode 100644
new mode 100755
index 2a10fe0..0e699f4
--- a/abs/core/LinHES-system/PKGBUILD
+++ b/abs/core/LinHES-system/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=LinHES-system
-pkgver=1.0
-pkgrel=69
+pkgver=1.1
+pkgrel=32
 arch=('i686')
 MVDIR=$startdir/pkg/usr/LH
 BINDIR=$startdir/pkg/usr/bin
@@ -8,35 +8,49 @@ install=LinHES.install
 pkgdesc="scripts and things related to having a automated system"
 depends=(linhes-sounds xdotool)
 backup=(etc/modprobe.d/alsa-base)
-binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh LinHES-run firstboot.sh load-modules-mythvantage.sh unclutter-toggle.sh myth_mtc.lr"
+binfiles="LinHES-start optimize_mythdb.py myth_mtc.py myth_mtc.sh LinHES-run firstboot.sh load-modules-mythvantage.sh unclutter-toggle.sh tvterm.sh myth_mtc.lr smolt.cron mythfrontend-start"
 
 source=(LinHES-session LinHES-profile.sh $binfiles alsa-base)
 
 build() {
         cd $startdir/src
         install -m755 -D LinHES-session $startdir/pkg/etc/X11/Sessions/LinHES
-	install -m755 -D LinHES-profile.sh $startdir/pkg/etc/profile.d/LinHES-profile.sh
-####### install to /usr/LH/bin
-#mkdir -p $BINDIR
+    	install -m755 -D LinHES-profile.sh $startdir/pkg/etc/profile.d/LinHES-profile.sh
+        ####### install to /usr/LH/bin
+        for i in $binfiles
+        do
+        	item=$i
+        	install -m755 -D $item $MVDIR/bin/$item
+        	echo $item
+        done
 
-for i in $binfiles
-do
-	item=$i
-	install -m755 -D $item $MVDIR/bin/$item
-	echo $item
+        cd $startdir/bin
+        for i in *
+        do
+        	item=$i
+        	install -m755 -D $item $MVDIR/bin/$item
+        	echo $item
+        done	
 
-done
-
-cd $startdir/bin
-for i in *
-do
-	item=$i
-	install -m755 -D $item $MVDIR/bin/$item
-	echo $item
-
-done	
-install -m755 -D $startdir/src/alsa-base $startdir/pkg/etc/modprobe.d/alsa-base
-mkdir $startdir/pkg/etc/logrotate.d
-cp $startdir/myth_mtc.lr $startdir/pkg/etc/logrotate.d
+        install -m755 -D $startdir/src/alsa-base $startdir/pkg/etc/modprobe.d/alsa-base
+        install -m755 -D $startdir/src/smolt.cron $startdir/pkg/etc/cron.weekly/smolt.cron
+        mkdir $startdir/pkg/etc/logrotate.d
+        cp $startdir/myth_mtc.lr $startdir/pkg/etc/logrotate.d
 }
 
+
+md5sums=('19934a456d0e112298b8aac3279f9a16'
+         '5881bdb43d578ec3a79d1f77ea58a3db'
+         'a875ee97f86e46f34a741c2bc455f894'
+         'cdcbc530224215f8fcf7ebcd93d7eb0b'
+         'c60b6c66f498809a6e5ca18a8c97d336'
+         'ccae1296ef248fa52ec3a7cb820a476e'
+         'b58b59c05faeefd4acbbb7876215c875'
+         '18a884a73344ff6eb74f63b49745e0f5'
+         'dc3eef2a624754e16805d72bbe488b67'
+         'dc0be354ce77ba2b89868fc29b942c43'
+         '542e670e78d117657f93141e9689f54d'
+         'f1870a9522c79e6b248fcbf81dec3280'
+         'abe887472a170bd1a8e6da6a7b7e93e4'
+         '752488eb8bfb672ce0e4c924f7faf3d1'
+         'eb879fee9603a05d5420d4ce8ed9e450')
diff --git a/abs/core/LinHES-system/bin/mythbackup b/abs/core/LinHES-system/bin/mythbackup
index d0d028d..3b4edd4 100755
--- a/abs/core/LinHES-system/bin/mythbackup
+++ b/abs/core/LinHES-system/bin/mythbackup
@@ -5,8 +5,32 @@
     echo 1>&2 "Can not load common settings!"
     exit 1
 }
+
+. /etc/osd_cat.cfg || {
+	color=yellow
+	outline=2
+	outlinecolour=black
+	shadow=0
+	shadowcolour=black
+	font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
 #----------------------------------------------------------------------------
 
+# Function to display status onscreen
+osd()
+# Arg_1 = display text Arg_2 = delay time Arg_3 = line num
+{
+    TEXT=$1
+    killall -9 osd_cat
+    if [ $3 -gt 1 ]; then
+        for ((i=2; i <= $3 ; i++))
+        do
+            TEXT="\n"$TEXT
+        done
+    fi
+    printf "$TEXT" | osd_cat --lines=6 --pos=middle --align=center --delay=$2 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+}
+
 # Prevent mythshutdown from shutting down the system in the middle...
 lock_myth
 
@@ -14,12 +38,15 @@ lock_myth
 play_sound init.wav
 
 # Keep a chain of recent backups,
+export DISPLAY=:0.0
+osd "Rolling over old backups..." 0 1
 echo "Starting rollover of old backups, this may take a while..."
 [ -f "$BACKUP_SQL" ] && shrink $BACKUP_SQL
 [ -f "$BACKUP_TAR" ] && shrink $BACKUP_TAR
 backup_roller .19 .18 .17 .16 .15 .14 .13 .12 .11 .10 .9 .8 .7 .6 .5 .4 .3 .2 .1 ''
 echo "Rollover completed."
 
+osd "Checking the database..." 0 2
 # Start with the database backup, first we make sure it's healthy, and
 # then we can dump it.
 # Doing this while the backend is active would be BAD.
@@ -31,10 +58,12 @@ cd $DATABASE_DIR
 $MYISAMCHK -f *.MYI
 start_mysqld
 
+osd "Backing up database..." 0 3
 # Dumps the $DATABASE database
 $MYSQLDUMP -v -c -u root $DATABASE > $BACKUP_SQL
 shrink $BACKUP_SQL
 
+osd "Backing up files..." 0 4
 # Now to backup the other files, no fooling around, grab everything in the
 # list because you never know what you'll want, and we can always get clever
 # about what to restore later...
@@ -49,19 +78,32 @@ shrink $BACKUP_TAR
 $CHOWN root:root $BACKUP_TAR* $BACKUP_SQL*
 $CHMOD go-rwx $BACKUP_TAR* $BACKUP_SQL*
 
+osd "Testing backup..." 0 5
 echo "Sanity checking your backup..."
 play_sound testing.wav
 # Play a sound to let you know the outcome.
 if check_files_and_tables $BACKUP_LIST ; then
+    osd "Backup completed successfully." 5 6
     echo "Backup passes all checks."
+    COMPLETE_MSG="Last backup completed on `date '+%D @ %-I:%M %p'`"
     play_sound complete.wav
     STATUS=0
 else
+    osd "Backup FAILED." 5 6
     echo "The backup is bad or already out of date!"
+    COMPLETE_MSG="Last backup FAILED on `date '+%D @ %-I:%M %p'`"
     play_sound fail.wav
     STATUS=1
 fi
 
+# Add Last backup status to menu item
+if grep "<description>" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml >/dev/null 2>&1
+then
+    sed -i "s_\<description\>.*\<description\>_description\>$COMPLETE_MSG\<\/description_" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml
+else
+    sed -i.orig " /NONE/ i\     \<description\>$COMPLETE_MSG\<\/description\>" /usr/share/mythtv/themes/defaultmenu/mythbackup.xml
+fi
+
 # Now we can restart the backend.
 start_mythbackend
 
diff --git a/abs/core/LinHES-system/bin/mythrestore b/abs/core/LinHES-system/bin/mythrestore
index 7fce371..447b0b8 100755
--- a/abs/core/LinHES-system/bin/mythrestore
+++ b/abs/core/LinHES-system/bin/mythrestore
@@ -5,8 +5,32 @@
     echo 1>&2 "Can not load common settings!"
     exit 1
 }
+
+. /etc/osd_cat.cfg || {
+	color=yellow
+	outline=2
+	outlinecolour=black
+	shadow=0
+	shadowcolour=black
+	font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
 #----------------------------------------------------------------------------
 
+# Function to display status onscreen
+osd()
+# Arg_1 = display text Arg_2 = delay time Arg_3 = line num
+{
+    TEXT=$1
+    killall -9 osd_cat
+    if [ $3 -gt 1 ]; then
+        for ((i=2; i <= $3 ; i++))
+        do
+            TEXT="\n"$TEXT
+        done
+    fi
+    printf "$TEXT" | osd_cat --lines=6 --pos=middle --align=center --delay=$2 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+}
+
 do_file_updates() {  # A function because we need to do this in two places
     echo "Doing any needed file updates..."
     [ -n "$UPDATE_FILES" -a -f "$UPDATE_FILES" -a -x "$UPDATE_FILES" ] &&
@@ -39,6 +63,7 @@ lock_myth
 
 # Play a sound to let you know I'm starting.
 play_sound restore.wav
+export DISPLAY=:0.0
 
 # Doing this while the backend is active could be BAD.
 stop_mythbackend
@@ -46,6 +71,7 @@ stop_mythbackend
 # If the standard backup file exists we try to restore the files based
 # on our restore list.
 if compression=$(compression_type "$BACKUP_TAR") ; then
+    osd "Restoring files..." 0 1
     echo "Starting the restore of files..."
     cd /
     expand -c $BACKUP_TAR$compression |
@@ -59,8 +85,11 @@ if compression=$(compression_type "$BACKUP_SQL") ; then
     echo "Starting the DB restore, this can take a while..."
     echo "Clearing out the existing skeleton..."
     #mysql_stdin < $DROP_SQL
+    osd "Recreating database..." 0 2
     echo "Recreating the db..."
+    sleep 1
     $MYSQLADMIN -u root create $DATABASE
+    osd "Restoring database..." 0 3
     echo "Restoring the data (long)..."
     expand -c $BACKUP_SQL$compression | mysql_stdin
     echo "Doing any needed db updates..."
@@ -69,23 +98,39 @@ if compression=$(compression_type "$BACKUP_SQL") ; then
     echo "Completed the DB restore."
 fi
 
+osd "Testing restore..." 0 4
 echo "Sanity checking your restore..."
 play_sound vr.wav
 # Play a sound to let you know the outcome.
 if check_files_and_tables $RESTORE_LIST ; then
+    osd "Restore completed successfully." 5 5
     echo "Restore passes all checks."
+    COMPLETE_MSG="Last restore completed on `date '+%D @ %-I:%M %p'`"
     play_sound restored.wav
     STATUS=0
 else
+    osd "Restore FAILED." 5 5
     echo "The restore failed or was already modified!"
+    COMPLETE_MSG="Last restore FAILED on `date '+%D @ %-I:%M %p'`"
     play_sound rf.wav
     STATUS=1
 fi
 
+# Add Last restore status to menu item
+if grep "<description>" /usr/share/mythtv/themes/defaultmenu/mythrestore.xml >/dev/null 2>&1
+then
+    sed -i "s_\<description\>.*\<description\>_description\>$COMPLETE_MSG\<\/description_" /usr/share/mythtv/themes/defaultmenu/mythrestore.xml
+else
+    sed -i.orig " /NONE/ i\     \<description\>$COMPLETE_MSG\<\/description\>" /usr/share/mythtv/themes/defaultmenu/mythrestore.xml
+fi
+
 # Make any updates _after_ we verify the backup...
 do_db_updates
 do_file_updates
 
+#post restore fixup for sshd
+/usr/MythVantage/bin/systemconfig.py -m user
+
 # Now it's more or less safe to restart the backend.
 start_mythbackend
 
diff --git a/abs/core/LinHES-system/firstboot.sh b/abs/core/LinHES-system/firstboot.sh
index 47aa0f9..7e2f603 100755
--- a/abs/core/LinHES-system/firstboot.sh
+++ b/abs/core/LinHES-system/firstboot.sh
@@ -1,22 +1,29 @@
 #!/bin/bash
 . ~/.configured
 ATTEMPT=0
+
 function try_smolt {
-	((ATTEMPT=ATTEMPT+1))
-	status=$(echo "jump mythsmolt" | telnet localhost 6546 2>&1)
-	echo $status|grep -q refused
- 	status=$?
-	if [ $status  != 0  ]
-	then
-		fb_status=0
-		echo "FB=NO" > ~/.configured
-	fi
-	if [ $ATTEMPT = 200 ]
-	then
-		fb_status=0
-	fi
+        ((ATTEMPT=ATTEMPT+1))
+        WID=`xdotool search "mythfrontend" | head -1`
+        xdotool windowfocus $WID
+        status=$?
+        if [ $status = 0 ]
+        then
+                sleep 2
+                xdotool key "ctrl+alt+p"
+                xdotool key "ctrl+alt+p"
+                fb_status=0
+                echo "FB=NO" > ~/.configured
+        fi
+
+        if [ $ATTEMPT = 200 ]
+        then
+                fb_status=0
+        fi
+
 }
 
+
 if [ ! -e /tmp/debug ]
 then
 	if [ ! -e /tmp/nomfe ]
diff --git a/abs/core/LinHES-system/mythfrontend-start b/abs/core/LinHES-system/mythfrontend-start
new file mode 100755
index 0000000..c92d024
--- /dev/null
+++ b/abs/core/LinHES-system/mythfrontend-start
@@ -0,0 +1,22 @@
+#!/bin/bash
+PIDS=$(pidof mythfrontend)
+P_array=( $PIDS )
+let "instances = ${#P_array[*]}"  # Count elements.
+
+if [ $instances -gt 0 ];
+then
+    if [ $instances -eq 1 ]; then
+        diagtext="is already a MythFrontend"
+    else
+        diagtext="are already $instances MythFrontends"
+    fi
+
+    question="There $diagtext running. Do you really want to start another one?"  
+    mythvantage -q "${question}"
+    if [ $?  = 16 ] 
+    then
+        mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+    fi
+else
+    mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+fi
diff --git a/abs/core/LinHES-system/smolt.cron b/abs/core/LinHES-system/smolt.cron
new file mode 100644
index 0000000..f418df1
--- /dev/null
+++ b/abs/core/LinHES-system/smolt.cron
@@ -0,0 +1,11 @@
+#!/bin/bash
+. /etc/profile
+if  [ -f  /home/mythtv/.mythtv/MythSmolt/hw-uuid ] 
+then
+	cd /usr/share/mythtv/mythsmolt/scripts
+	touch /var/log/smolt.update
+	chown mythtv /var/log/smolt.update
+	random=$((RANDOM%2000))
+	sleep $random
+	su mythtv -c "./sendProfile.py -a" > /var/log/smolt.update
+fi
diff --git a/abs/core/LinHES-system/tvterm.sh b/abs/core/LinHES-system/tvterm.sh
new file mode 100755
index 0000000..dfd116b
--- /dev/null
+++ b/abs/core/LinHES-system/tvterm.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#
+# Create a terminal with a font that mostly fills the width of the screen.
+
+width=$(echo $(xdpyinfo | grep dimensions:) | cut -d' ' -f2 | cut -dx -f1)
+
+if [ -z "$width" ] ; then
+  width=1024
+fi
+
+if [ $width -ge 1920 ] ; then
+  fontsize=24
+elif [ $width -ge 1440 ] ; then
+  fontsize=21
+elif [ $width -ge 1280 ] ; then
+  fontsize=18
+elif [ $width -ge 1024 ] ; then
+  fontsize=14
+elif [ $width -ge 800 ] ; then
+  fontsize=11
+elif [ $width -ge 640 ] ; then
+  fontsize=8
+fi
+
+xterm -fa 'DejaVu Sans Mono' -fs $fontsize
diff --git a/abs/core/LinHES-system/unclutter-toggle.sh b/abs/core/LinHES-system/unclutter-toggle.sh
index 0ead751..aadce50 100644
--- a/abs/core/LinHES-system/unclutter-toggle.sh
+++ b/abs/core/LinHES-system/unclutter-toggle.sh
@@ -1,8 +1,11 @@
 #!/bin/bash
 PIDUNC=`pidof unclutter`
+jitter=200
+idle=1
+. /etc/unclutter.cfg
 if [ -n "${PIDUNC}" ];
 then
     killall -9 unclutter
 else
-    /usr/X11R6/bin/unclutter -root -idle 1 -jitter 200 -noevents &
+    /usr/X11R6/bin/unclutter -root -idle $idle -jitter $jitter -noevents &
 fi
diff --git a/abs/core/atl1e/PKGBUILD b/abs/core/atl1e/PKGBUILD
new file mode 100644
index 0000000..64acdfe
--- /dev/null
+++ b/abs/core/atl1e/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: Cecil Watson<knoppmyth@gmail.com>
+
+pkgname=atl1e
+_kernver=2.6.28-LinHES
+pkgver=1
+pkgrel=1
+pkgdesc="AR81 Family Linux wireless drivers"
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://partner.atheros.com/Drivers.aspx"
+depends=('kernel26')
+makedepends=(kernel-headers)
+install=atl1e.install
+source=('ftp://ftp.knoppmyth.net/R6/sources/AR81Family-Linux-v1.0.1.9.tar.gz')
+
+build() {
+  cd $startdir/src/src/
+  mkdir -p $pkgdir/lib/modules/$(uname -r)/kernel/drivers/net/atl1e
+  mkdir -p $pkgdir/usr/man/man/man7
+  make KERNDIR=/lib/modules/$_kernver/build \
+  INSTDIR=$startdir/pkg KERNELRELEASE=$_kernver || return 1
+  make KERNDIR=/lib/modules/$_kernver/build \
+  INSTDIR=$startdir/pkg/lib/modules/$(uname -r)/kernel/drivers/net/atl1e KERNELRELEASE=$_kernver install || return 1
+  install -D -m 644 atl1e.7.gz $pkgdir/usr/man/man/man7/atl1e.7.gz
+}
+md5sums=('0d07d98e8941da5232768a154de183fa')
diff --git a/abs/core/atl1e/atl1e.install b/abs/core/atl1e/atl1e.install
new file mode 100644
index 0000000..7ae7ed0
--- /dev/null
+++ b/abs/core/atl1e/atl1e.install
@@ -0,0 +1,23 @@
+# arg 1:  the new package version
+post_install() {
+  KERNEL_VERSION='2.6.28-LinHES'
+  depmod -ae -v $KERNEL_VERSION  > /dev/null 2>&1                
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_upgrade() {
+  KERNEL_VERSION='2.6.28-LinHES'
+  depmod -ae -v $KERNEL_VERSION  > /dev/null 2>&1        
+
+}
+
+# arg 1:  the old package version
+post_remove() {
+  KERNEL_VERSION='2.6.28-LinHES'
+  depmod -ae -v $KERNEL_VERSION  > /dev/null 2>&1        
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/autoconf/PKGBUILD b/abs/core/autoconf/PKGBUILD
index 75bd7ef..1ac8ed6 100644
--- a/abs/core/autoconf/PKGBUILD
+++ b/abs/core/autoconf/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Andreas Radke <adyrtr@archlinux.org>
 
 pkgname=autoconf
-pkgver=2.63
+pkgver=2.66
 pkgrel=1
 pkgdesc="A GNU tool for automatically configuring source code"
 arch=(i686 x86_64)
@@ -12,7 +12,6 @@ groups=('base-devel')
 depends=('awk' 'm4' 'diffutils' 'bash')
 install=autoconf.install
 source=(ftp://ftp.gnu.org/pub/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz)
-md5sums=('43d76649fb86cd21d64f68c48d5abdcf')
 
 build() {
   cd ${srcdir}/${pkgname}-${pkgver}
@@ -23,3 +22,4 @@ build() {
   # conflict with bintuils
   rm -f ${pkgdir}/usr/share/info/standards.info
 }
+md5sums=('fb00d77cbc468994c55919298af1ff02')
diff --git a/abs/core/automake/PKGBUILD b/abs/core/automake/PKGBUILD
index 2943f44..0b3a6f2 100644
--- a/abs/core/automake/PKGBUILD
+++ b/abs/core/automake/PKGBUILD
@@ -3,17 +3,16 @@
 # Maintainer: Andreas Radke <andyrtr@archlinux.org>
 
 pkgname=automake
-pkgver=1.10.2
+pkgver=1.11.1
 pkgrel=1
 pkgdesc="A GNU tool for automatically creating Makefiles"
 arch=(i686 x86_64)
 license=('GPL')
 url="http://www.gnu.org/software/automake"
 groups=('base-devel')
-depends=('perl' 'bash' 'texinfo')
+depends=('perl' 'bash' 'texinfo' 'autoconf>=2.60')
 install=automake.install
 source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.gz)
-md5sums=('ede3e08c696861a01f4d2c6a2e822053')
 
 build() {
   cd ${srcdir}/${pkgname}-${pkgver}
@@ -23,3 +22,4 @@ build() {
 
   rm -f ${pkgdir}/usr/share/info/dir
 }
+md5sums=('4ee7f0ff5f0e467d58b6bd5da96b1c74')
diff --git a/abs/core/catalyst/PKGBUILD b/abs/core/catalyst/PKGBUILD
new file mode 100644
index 0000000..c9f315e
--- /dev/null
+++ b/abs/core/catalyst/PKGBUILD
@@ -0,0 +1,153 @@
+# Maintainer: Vi0L0 <vi0l093@gmail.com>
+# Contributor: Eduardo "kensai" Romero
+# Contributor: Anssi Hannula
+# Contributor: Stefan Bühler
+# Contributor: baghera
+# Contributor: Arlekino
+
+_kernver=`uname -r`
+
+pkgname=catalyst
+pkgver=10.1
+pkgrel=5
+pkgdesc="AMD/ATI drivers for Radeon brand cards. Stock kernel"
+arch=('i686' 'x86_64')
+url="http://www.ati.amd.com"
+license=('custom')
+depends=('xorg-server<1.7.0' 'kernel26>=2.6.28' 'kernel26<2.6.34' 'kernel-headers' 'netkit-bsd-finger' 'libstdc++5' 'libxrandr' 'libsm' 'fontconfig' 'libxcursor' 'libxi' 'gcc-libs')
+
+conflicts=('catalyst' 'catalyst-utils' 'nvidia' 'libgl' 'catalyst-leaked' 'xf86-input-evdev>2.2.5-1' 'xf86-input-keyboard>1.3.2-2' 'xf86-input-mouse>1.4.0-2' 'xf86-input-synaptics>1.1.3-1' 'xf86-video-vesa>2.2.0-1' 'xf86-video-ati' 'xf86-video-radeonhd' 'ati-dri')
+provides=('catalyst' 'libgl')
+install=catalyst.install
+source=(http://www2.ati.com/drivers/linux/ati-driver-installer-${pkgver/./-}-x86.x86_64.run
+    catalyst.sh amdcccle.desktop atieventsd.sh fglrx-2.6.33.patch)
+md5sums=('1edfe45ddf9d9315dec80ff3cc848ca3'
+	 'bdafe749e046bfddee2d1c5e90eabd83'
+         '4efa8414a8fe9eeb50da38b5522ef81d'
+         'f729bf913613f49b0b9759c246058a87'
+	 'c5eb5571782fed5232461f59a789fb08')
+
+build() {
+/bin/sh ./ati-driver-installer-${pkgver/./-}-x86.x86_64.run --extract archive_files
+
+##Build kernel modules
+
+if [ "${CARCH}" = "x86_64" ]; then
+BUILDARCH=x86_64
+_archdir=x86_64
+fi
+if [ "${CARCH}" = "i686" ]; then
+BUILDARCH=i386
+_archdir=x86
+fi
+
+##patching for kernel 2.6.33 or 2.6.34 support
+if [ `uname -r |grep -c "2.6.33"` != 0 ] || [ `uname -r |grep -c "2.6.34"` != 0 ]; then
+cd "${srcdir}/archive_files/"
+patch -Np1 -i ../fglrx-2.6.33.patch || return 1
+fi
+
+cd "${srcdir}/archive_files/common/lib/modules/fglrx/build_mod"
+cp "${srcdir}/archive_files/arch/${_archdir}/lib/modules/fglrx/build_mod/libfglrx_ip.a.GCC4" . || return 1
+cp 2.6.x/Makefile . || return 1
+
+make -C /lib/modules/${_kernver}/build SUBDIRS="`pwd`" ARCH=${BUILDARCH} modules || return 1
+
+install -m755 -d "${pkgdir}/lib/modules/${_kernver}/video/"
+install -m644 fglrx.ko "${pkgdir}/lib/modules/${_kernver}/video/" || return 1
+install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}"
+
+sed -i -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/" $startdir/*.install
+
+##Install catalyst utilities
+
+# Create directories
+install -m755 -d "${pkgdir}/etc/ati"
+install -m755 -d "${pkgdir}/etc/rc.d"
+install -m755 -d "${pkgdir}/etc/profile.d"
+install -m755 -d "${pkgdir}/etc/acpi/events"
+
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/dri"
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/drivers"
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/extensions"
+install -m755 -d "${pkgdir}/usr/lib/xorg/modules/linux"
+
+install -m755 -d "${pkgdir}/usr/bin"
+install -m755 -d "${pkgdir}/usr/sbin"
+
+install -m755 -d "${pkgdir}/usr/include/X11/extensions"
+install -m755 -d "${pkgdir}/usr/include/GL"
+
+install -m755 -d "${pkgdir}/usr/share/applications"
+install -m755 -d "${pkgdir}/usr/share/ati/amdcccle"
+install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}"
+install -m755 -d "${pkgdir}/usr/share/man/man8"
+install -m755 -d "${pkgdir}/usr/share/pixmaps"
+
+# X driver installation
+if [ "${CARCH}" = "i686" ]; then
+cd "${srcdir}/archive_files/x740/usr/X11R6/lib/modules" || return 1
+elif [ "${CARCH}" = "x86_64" ]; then
+cd "${srcdir}/archive_files/x740_64a/usr/X11R6/lib64/modules" || return 1
+fi
+
+install -m644 *.a "${pkgdir}/usr/lib/xorg/modules/" || return 1
+install -m755 *.so "${pkgdir}/usr/lib/xorg/modules/" || return 1
+install -m755 drivers/*.so "${pkgdir}/usr/lib/xorg/modules/drivers/" || return 1
+install -m755 linux/*.so "${pkgdir}/usr/lib/xorg/modules/linux/" || return 1
+install -m755 extensions/libglx.so "${pkgdir}/usr/lib/xorg/modules/extensions/" || return 1
+#install -m755 extensions/libdri.so "${pkgdir}/usr/lib/xorg/modules/extensions/libdri.ati" || return 1
+
+# Controlcenter / library installation
+if [ "${CARCH}" = "i686" ]; then
+cd "${srcdir}/archive_files/arch/x86/usr" || return 1
+_lib=lib
+elif [ "${CARCH}" = "x86_64" ]; then
+cd "${srcdir}/archive_files/arch/x86_64/usr" || return 1
+_lib=lib64
+fi
+
+install -m755 X11R6/bin/* "${pkgdir}/usr/bin/" || return 1
+install -m755 sbin/* "${pkgdir}/usr/sbin/" || return 1
+install -m755 X11R6/${_lib}/*.so* "${pkgdir}/usr/lib/" || return 1
+install -m644 X11R6/${_lib}/*.a "${pkgdir}/usr/lib/" || return 1 # really needed?
+install -m644 X11R6/${_lib}/*.cap "${pkgdir}/usr/lib/" || return 1
+install -m755 X11R6/${_lib}/modules/dri/*.so "${pkgdir}/usr/lib/xorg/modules/dri/" || return 1
+install -m755 ${_lib}/*.so* "${pkgdir}/usr/lib/" || return 1
+
+ln -sf /usr/lib/xorg/modules/dri ${pkgdir}/usr/lib/dri
+ln -sf libfglrx_dm.so.1.0 "${pkgdir}/usr/lib/libfglrx_dm.so.1"
+ln -sf libfglrx_pp.so.1.0 "${pkgdir}/usr/lib/libfglrx_pp.so.1"
+ln -sf libfglrx_tvout.so.1.0 "${pkgdir}/usr/lib/libfglrx_tvout.so.1"
+ln -sf libfglrx_gamma.so.1.0 "${pkgdir}/usr/lib/libfglrx_gamma.so.1"
+ln -sf libGL.so.1.2 "${pkgdir}/usr/lib/libGL.so.1"
+ln -sf libGL.so.1.2 "${pkgdir}/usr/lib/libGL.so"
+
+cd "${srcdir}"/archive_files/common
+install -m644 etc/ati/* "${pkgdir}/etc/ati/" || return 1
+chmod 755 "${pkgdir}/etc/ati/authatieventsd.sh" || return 1
+
+install -m644 usr/X11R6/include/X11/extensions/*.h "${pkgdir}/usr/include/X11/extensions/" || return 1
+install -m644 usr/X11R6/bin/amdupdaterandrconfig "${pkgdir}/usr/bin/" || return 1
+install -m644 usr/include/GL/*.h "${pkgdir}/usr/include/GL/" || return 1
+install -m755 usr/sbin/*.sh "${pkgdir}/usr/sbin/" || return 1
+install -m644 usr/share/ati/amdcccle/* "${pkgdir}/usr/share/ati/amdcccle/" || return 1 # ? what are these files for?
+# install -m644 usr/share/gnome/apps/amdcccle.desktop "${pkgdir}/usr/share/applications/" || return 1
+install -m644 usr/share/icons/*.xpm "${pkgdir}/usr/share/pixmaps/" || return 1
+install -m644 usr/share/man/man8/*.8 "${pkgdir}/usr/share/man/man8/" || return 1
+install -m644 "${srcdir}/amdcccle.desktop" "${pkgdir}/usr/share/applications/" || return 1
+
+# ACPI example files
+install -m755 usr/share/doc/fglrx/examples/etc/acpi/*.sh "${pkgdir}/etc/acpi/" || return 1
+sed -i -e 's/usr\/X11R6/usr/g' "${pkgdir}/etc/acpi/ati-powermode.sh" || return 1
+install -m644 usr/share/doc/fglrx/examples/etc/acpi/events/* "${pkgdir}/etc/acpi/events/" || return 1
+
+# Add ATI Events Daemon launcher
+install -m755 "${srcdir}/atieventsd.sh" "${pkgdir}/etc/rc.d/atieventsd" || return 1
+
+# thanks to cerebral, we dont need that damned symlink
+install -m755 "${srcdir}/catalyst.sh" "${pkgdir}/etc/profile.d/" || return 1
+
+# License
+install -m644 "${srcdir}/archive_files/ATI_LICENSE.TXT" "${pkgdir}/usr/share/licenses/${pkgname}/" || return 1
+}
diff --git a/abs/core/catalyst/amdcccle.desktop b/abs/core/catalyst/amdcccle.desktop
new file mode 100644
index 0000000..ba2ed4a
--- /dev/null
+++ b/abs/core/catalyst/amdcccle.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Name=ATI Catalyst Control Center
+Comment=ATI graphics adapter settings
+Name[de]=ATI Catalyst Control Center
+Comment[de]=ATI grafics adapter settings
+Icon=ccc_large
+MiniIcon=ccc_small
+Exec=amdcccle
+Type=Application
+Terminal=false
+Categories=Settings;DesktopSettings;
diff --git a/abs/core/catalyst/atieventsd.sh b/abs/core/catalyst/atieventsd.sh
new file mode 100644
index 0000000..16bd9a4
--- /dev/null
+++ b/abs/core/catalyst/atieventsd.sh
@@ -0,0 +1,41 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+ATID_PID=`pidof -o %PPID /usr/sbin/atieventsd`
+
+case "$1" in
+  start)
+    rc=0
+    stat_busy "Starting ATI Events Daemon"
+    [ -z "$ATID_PID" ] && /usr/sbin/atieventsd
+    rc=$(($rc+$?))
+    if [ $rc -gt 0 ]; then
+      stat_fail
+    else
+      add_daemon atieventsd
+      stat_done
+    fi
+    ;;
+  stop)
+    rc=0
+    stat_busy "Stopping ATI Events Daemon"
+    kill $ATID_PID &>/dev/null
+    rc=$(($rc+$?))
+    if [ $rc -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon atieventsd
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"  
+esac
+exit 0
diff --git a/abs/core/catalyst/catalyst.install b/abs/core/catalyst/catalyst.install
new file mode 100644
index 0000000..11bf0a7
--- /dev/null
+++ b/abs/core/catalyst/catalyst.install
@@ -0,0 +1,34 @@
+KERNEL_VERSION=2.6.28-LinHES
+
+pre_install() {
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+    ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+}
+
+post_install() {
+  depmod $KERNEL_VERSION
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+    ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+  echo "--------------------------------------------------------------"
+  echo "You can use the tool 'aticonfig' to generate an xorg.conf file."
+  echo "Remember to add fglrx to the MODULES list in /etc/rc.conf."
+  echo "--------------------------------------------------------------"
+}
+
+post_upgrade() {
+  depmod $KERNEL_VERSION
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+    ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+}
+
+post_remove() {
+  depmod $KERNEL_VERSION
+  # If the symlink is dead, remove it
+ if [ ! -e /usr/lib/xorg/modules/extensions/libdri.so ]; then
+    ln -sf /usr/lib/xorg/modules/extensions/libdri.xorg /usr/lib/xorg/modules/extensions/libdri.so
+ fi
+  echo "NOTE: Don't forget to recover your original xorg.conf file."
+}
diff --git a/abs/core/catalyst/catalyst.sh b/abs/core/catalyst/catalyst.sh
new file mode 100644
index 0000000..7aedd4f
--- /dev/null
+++ b/abs/core/catalyst/catalyst.sh
@@ -0,0 +1,11 @@
+if [ $LIBGL_DRIVERS_PATH ] 
+then 
+  if ! set | grep LIBGL_DRIVERS_PATH | grep /usr/lib/xorg/modules/dri/ > /dev/null 
+  then 
+    LIBGL_DRIVERS_PATH=$LIBGL_DRIVERS_PATH:/usr/lib/xorg/modules/dri/ 
+    export LIBGL_DRIVERS_PATH 
+  fi  
+else 
+  LIBGL_DRIVERS_PATH=/usr/lib/xorg/modules/dri/ 
+  export LIBGL_DRIVERS_PATH 
+fi 
diff --git a/abs/core/catalyst/fglrx-2.6.33.patch b/abs/core/catalyst/fglrx-2.6.33.patch
new file mode 100644
index 0000000..7ba9ecd
--- /dev/null
+++ b/abs/core/catalyst/fglrx-2.6.33.patch
@@ -0,0 +1,228 @@
+Index: ati10.1/common/lib/modules/fglrx/build_mod/drmP.h
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/drmP.h
++++ ati10.1/common/lib/modules/fglrx/build_mod/drmP.h	2010-01-28 19:57:07.562644291 +0200
+@@ -42,7 +42,12 @@
+  * can build the DRM (part of PI DRI). 4/21/2000 S + B */
+ #include <asm/current.h>
+ #endif /* __alpha__ */
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+ #include <linux/miscdevice.h>
+@@ -51,7 +56,6 @@
+ #include <linux/init.h>
+ #include <linux/file.h>
+ #include <linux/pci.h>
+-#include <linux/version.h>
+ #include <linux/sched.h>
+ #include <linux/smp_lock.h>	/* For (un)lock_kernel */
+ #include <linux/mm.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/firegl_public.c	2010-01-29 14:21:58.687999115 +0200
+@@ -28,7 +28,11 @@
+ #error Kernel versions older than 2.6.0 are no longer supported by this module.
+ #endif 
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ 
+ #if !defined(CONFIG_X86) 
+ #if !defined(CONFIG_X86_PC) 
+@@ -163,8 +167,12 @@
+ 
+ //  For 2.6.18 or higher, the UTS_RELEASE is defined in the linux/utsrelease.h. 
+ #ifndef UTS_RELEASE 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/utsrelease.h>
++#else
+ #include <linux/utsrelease.h>
+ #endif
++#endif
+ 
+ #if defined(__i386__)
+ #ifndef do_div
+@@ -1472,7 +1472,16 @@
+ #ifndef __HAVE_ARCH_CMPXCHG
+     return __fgl_cmpxchg(ptr,old,new,size);
+ #else
+-    return __cmpxchg(ptr,old,new,size);
++    switch (size) {
++    case 1: { volatile u8 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++    case 2: { volatile u16 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++    case 4: { volatile u32 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++#ifdef __x86_64__
++    case 8: { volatile u64 *_ptr = ptr; return cmpxchg(_ptr, old, new); }
++#endif
++    default:
++        return old;
++    }
+ #endif
+ }
+
+ 
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_acpi.c	2010-01-28 19:57:17.897225045 +0200
+@@ -15,7 +15,11 @@
+  ****************************************************************************/
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/acpi.h>
+ 
+ #include "kcl_config.h"
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_agp.c	2010-01-28 19:57:26.104892082 +0200
+@@ -31,7 +31,11 @@
+  */
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/pci.h>
+ #include <linux/agp_backend.h>
+ #include <linux/string.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_io.c	2010-01-28 19:57:34.337558105 +0200
+@@ -37,7 +37,11 @@
+  */
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/poll.h>
+ #include <linux/signal.h>
+ #include <asm/io.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_osconfig.h	2010-01-28 19:57:43.599182385 +0200
+@@ -20,7 +20,11 @@
+ #define KCL_OSCONFIG_H
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ 
+ // Choose modern way to call 32-on-64 IOCTLs if configured in the kernel
+ #if defined(CONFIG_COMPAT) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_pci.c	2010-01-28 19:57:51.295870149 +0200
+@@ -31,7 +31,11 @@
+  */
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/pci.h>
+ 
+ #include "kcl_config.h"
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_str.c	2010-01-28 19:57:59.728528058 +0200
+@@ -30,7 +30,12 @@
+  *
+  */
+ 
++#include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/string.h>
+ #include <linux/module.h>
+ 
+Index: ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c
++++ ati10.1/common/lib/modules/fglrx/build_mod/kcl_wait.c	2010-01-28 19:58:08.936154527 +0200
+@@ -31,7 +31,11 @@
+  */
+ 
+ #include <linux/version.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
++#include <generated/autoconf.h>
++#else
+ #include <linux/autoconf.h>
++#endif
+ #include <linux/wait.h>
+ #include <linux/highmem.h>
+ #include <linux/sched.h>
+Index: ati10.1/common/lib/modules/fglrx/build_mod/make.sh
+===================================================================
+--- ati10.1/common/lib/modules/fglrx/build_mod/make.sh
++++ ati10.1/common/lib/modules/fglrx/build_mod/make.sh	2010-01-28 19:55:10.849378991 +0200
+@@ -218,8 +218,15 @@
+         # UTS-define is in external version-*.h files, i.e. linux-2.2.14-5.0-RedHat does this flaw
+         kernel_release=`cat $linuxincludes/linux/version-*.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2` 
+     else
+-        # For 2.6.18 or higher, UTS-define is defined in utsrelease.h.
+-        kernel_release=`cat $linuxincludes/linux/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2` 
++        UTS_REL_COUNT=`cat $linuxincludes/generated/utsrelease.h 2>/dev/null | grep UTS_RELEASE -c`
++
++	if [ $UTS_REL_COUNT -gt 0 ]; then
++	    # 2.6.33+
++	    kernel_release=`cat $linuxincludes/generated/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2`
++	else
++            # For 2.6.18 to 2.6.32, UTS-define is defined in utsrelease.h.
++            kernel_release=`cat $linuxincludes/linux/utsrelease.h | grep UTS_RELEASE | grep \"$OsRelease\" | cut -d'"' -f2`
++	fi
+     fi
+   fi
+ fi
+@@ -302,7 +309,8 @@
+ # 3
+ # linux/autoconf.h may contain this: #define CONFIG_SMP 1
+ 
+-src_file=$linuxincludes/linux/autoconf.h
++src_file=$linuxincludes/generated/autoconf.h
++[ -e $src_file ] || src_file=$linuxincludes/linux/autoconf.h
+ 
+ if [ ! -e $src_file ]; then
+   echo "Warning:"                                                  >> $logfile
+@@ -355,7 +363,8 @@
+ MODVERSIONS=0
+ 
+ # linux/autoconf.h may contain this: #define CONFIG_MODVERSIONS 1
+-src_file=$linuxincludes/linux/autoconf.h
++src_file=$linuxincludes/generated/autoconf.h
++[ -e $src_file ] || src_file=$linuxincludes/linux/autoconf.h
+ if [ ! -e $src_file ];
+ then
+   echo "Warning:"                                                  >> $logfile
diff --git a/abs/core/curl/ChangeLog b/abs/core/curl/ChangeLog
index a508322..02635bf 100644
--- a/abs/core/curl/ChangeLog
+++ b/abs/core/curl/ChangeLog
@@ -1,3 +1,48 @@
+2009-11-04  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.7-1
+	* Upstream update
+
+2009-10-03  Robson Peixoto <robsonpeixoto@gmail.com>
+
+	* curl 7.19.6-2
+	* Compile with ca-path like Debian and Gentoo
+
+2009-08-12  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.6-1
+	* Upstream update
+
+2009-05-18  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.5-1
+	* Upstream update
+
+2009-03-03  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.4-1
+	* Upstream update
+
+2009-01-21  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.3-1
+	* Upstream update
+
+2008-11-14  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.2-1
+	* Upstream update
+
+2008-11-08  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.1-1
+	* Upstream update
+
+2008-09-20  Eric Belanger  <eric@archlinux.org>
+
+	* curl 7.19.0-1
+	* Upstream update
+
 2008-06-04  Eric Belanger  <eric@archlinux.org>
 
 	* curl 7.18.2-1
diff --git a/abs/core/curl/PKGBUILD b/abs/core/curl/PKGBUILD
index cfac1fe..bee1fcb 100644
--- a/abs/core/curl/PKGBUILD
+++ b/abs/core/curl/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 2514 2008-06-05 23:10:19Z eric $
+# $Id: PKGBUILD 58157 2009-11-05 05:13:33Z eric $
 # Maintainer: Eric Belanger <eric@archlinux.org>
 # Contributor: Lucien Immink <l.immink@student.fnt.hvu.nl>
 
 pkgname=curl
-pkgver=7.18.2
+pkgver=7.19.7
 pkgrel=1
 pkgdesc="An URL retrival utility and library"
 arch=('i686' 'x86_64')
@@ -12,14 +12,28 @@ license=('MIT')
 depends=('zlib' 'openssl>=0.9.8b' 'bash' 'ca-certificates')
 options=('!libtool')
 source=(http://curl.haxx.se/download/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('c389be5b0525276e58865956b7465562')
-sha1sums=('0a4d6878d6be22bb2d701a6cf9bf665f66fc8b87')
+md5sums=('79a8fbb2eed5464b97bdf94bee109380')
+sha1sums=('c306ebf0f65fb90df3c9c9a12fb04fb77cc29e2c')
 
 build() {
-  cd ${startdir}/src/${pkgname}-${pkgver}
-  ./configure --prefix=/usr --without-libidn --disable-ldap \
-    --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt || return 1
+  cd "${srcdir}/${pkgname}-${pkgver}"
+
+  # Thanks Debian and Gentoo =)
+  ./configure \
+  	--with-random=/dev/urandom \
+	--prefix=/usr \
+	--mandir=/usr/share/man \
+	--disable-dependency-tracking \
+	--enable-ipv6 \
+	--disable-ldaps \
+	--disable-ldap \
+	--enable-manual \
+	--enable-versioned-symbols \
+	--with-ca-path=/etc/ssl/certs \
+	--without-libidn || return 1
+
   make || return 1
-  make DESTDIR=${startdir}/pkg install || return 1
-  install -D -m644 COPYING ${startdir}/pkg/usr/share/licenses/${pkgname}/COPYING || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+  install -D -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/COPYING" || return 1
+  install -D -m644 docs/libcurl/libcurl.m4 "${pkgdir}/usr/share/aclocal/libcurl.m4" || return 1
 }
diff --git a/abs/core/diskless-legacy/PKGBUILD b/abs/core/diskless-legacy/PKGBUILD
index 6b7cea7..85cfc3a 100644
--- a/abs/core/diskless-legacy/PKGBUILD
+++ b/abs/core/diskless-legacy/PKGBUILD
@@ -2,15 +2,13 @@
 # Maintainer: Greg Frost <gregfrost1@bigpond.com>
 pkgname=diskless-legacy
 pkgver=1
-pkgrel=1
+pkgrel=3
 pkgdesc="Script for configuring a diskless mythtv frontends using NFS root."
 arch=i686
 depends=(tftp-hpa dhcp)
 source=(config_diskless_frontend.bash)
-md5sums=('825fbc61ef209dc47f17dbaab5829779')
 
 build() {
   install -D -m755 ${srcdir}/config_diskless_frontend.bash \
     ${pkgdir}/usr/local/bin/config_diskless_frontend.bash
 }
-md5sums=('825fbc61ef209dc47f17dbaab5829779')
diff --git a/abs/core/diskless-legacy/config_diskless_frontend.bash b/abs/core/diskless-legacy/config_diskless_frontend.bash
index ffd1afd..24d5fc1 100755
--- a/abs/core/diskless-legacy/config_diskless_frontend.bash
+++ b/abs/core/diskless-legacy/config_diskless_frontend.bash
@@ -3,21 +3,18 @@
 # frontend can boot from it.
 
 function backtitle() { # no arguments.
-    BT="${0##*/}"
-    KMV_F1='/KNOPPIX/KnoppMyth-version'
-    KMV_F2='/etc/LinHES-release'
-    if [ -f "$KMV_F1" ]; then
-          BT="-= $(cat $KMV_F1) $BT =-"
-    elif [ -f "$KMV_F2" ]; then
-   BT="-= $(cat $KMV_F2) $BT =-"
-    fi
+  BT="${0##*/}"
+  KMV='/etc/LinHES-release'
+  if [ -f "$KMV" ]; then
+    BT="-= $(cat $KMV) $BT =-"
+  fi
 }
 
 function must_be_root() { # no arguments.
-    test $(id -u) == 0 && return
-    MSG="\Z1ERROR\Zn: This script \Z4should\Zn be run by \Z1root\Zn."
-    dialog --backtitle "$BT" --colors --msgbox "$MSG" 5 45
-    exit 4
+  test $(id -u) == 0 && return
+  MSG="\Z1ERROR\Zn: This script \Z4should\Zn be run by \Z1root\Zn."
+  dialog --backtitle "$BT" --colors --msgbox "$MSG" 5 45
+  exit 4
 }
 
 backtitle 
@@ -319,13 +316,10 @@ fixed-address ${frontend_ips[$fe]};}" >> \
   done
 
   /sbin/add_service.sh dhcpd
-  /sbin/sv restart dhcpd
 }
 
 setup_tftpd() {
-
   /sbin/add_service.sh tftpd
-  /sbin/sv restart tftpd
 }
 
 check_delete_of_existing_nfsroot() {
@@ -386,13 +380,37 @@ export_mounts() {
   else
     echo "Already added line for /data/var/cache/pacman in /etc/exports"
   fi
+
+  # Ensure that the montpoints that are used as storage groups are exported.
+
+  for storage_mount in ${storage_mounts[@]} ; do
+
+    if ! grep -q ^${storage_mount}[[:space:]] /etc/exports ; then
+      echo "Adding line for ${storage_mount} in /etc/exports"
+      echo "${storage_mount} *(rw,async,no_subtree_check)" >> /etc/exports
+    else
+      echo "Already added line for ${storage_mount} in /etc/exports"
+    fi
+  done
 }
 
-enable_nfs() {
-  # Enable NFS.
+find_storage_mounts() {
+  unset storage_mounts
+  for group in $(mysql -sB mythconverg -e \
+    "select dirname from storagegroup where hostname = '$(hostname)'") ; do
 
-  /sbin/add_service.sh nfsd
+    group_mount=$group
+    while ! mountpoint -q $group_mount ; do
+      group_mount=$(dirname $group_mount)
+    done
+
+    echo Storage group $group mountpoint is $group_mount
+    storage_mounts=( "${storage_mounts[@]}" $group_mount )
+  done
+}
 
+enable_nfs() {
+  /sbin/add_service.sh nfsd
 }
 
 restart_nfs (){
@@ -427,10 +445,10 @@ create_tftpboot_directory() {
   if [ ! -e /tftpboot/kernel26.img ] ; then
 
     echo "Building kernel miniroot"
-    if [ -z "$(awk -F\" '$1 ~ /^MODULES=/ && $2 ~ /nfs/' /etc/mkinitcpio.conf)" ] ; then
-      cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf~
-      sed -e '/^MODULES=/s/\"$/ nfs\"/' < /etc/mkinitcpio.conf~ > /etc/mkinitcpio.conf
-    fi
+#    if [ -z "$(awk -F\" '$1 ~ /^MODULES=/ && $2 ~ /nfs/' /etc/mkinitcpio.conf)" ] ; then
+#      cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf~
+#      sed -e '/^MODULES=/s/\"$/ nfs\"/' < /etc/mkinitcpio.conf~ > /etc/mkinitcpio.conf
+#    fi
     if [ -z "$(awk -F\" '$1 ~ /^HOOKS=/ && $2 ~ /net/' /etc/mkinitcpio.conf)" ] ; then
       cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf~
       sed -e '/^HOOKS=/s/\"$/ net\"/' < /etc/mkinitcpio.conf~ > /etc/mkinitcpio.conf
@@ -485,29 +503,28 @@ create_new_nfsroot() {
   echo "Creating the $NFSROOT directory."
   mkdir -p $NFSROOT
   for DIR in /* ; do
-    if [[ "$DIR" != /myth && \
-          "$DIR" != /mnt && \
-          "$DIR" != /bin && \
-          "$DIR" != /sbin && \
-          "$DIR" != /tmp && \
+    if [[ "$DIR" != /mnt && \
           "$DIR" != /data && \
           "$DIR" != /media && \
-          "$DIR" != /proc && \
-          "$DIR" != /sys && \
+          "$DIR" != /tmp && \
+          "$DIR" != /etc.old && \
           "$DIR" != /storage && \
           "$DIR" != /var && \
           "$DIR" != /nfsroot && \
           "$DIR" != /tftpboot && \
           "$DIR" != /cdrom ]]
     then
-      echo "  Copying $DIR to $NFSROOT"
-      cp -ax $DIR $NFSROOT
+      if mountpoint -q $DIR && [ "$DIR" != "/dev" ] ; then
+        echo "  Making mountpoint dir $DIR"
+        cd $NFSROOT
+        tar c $DIR --exclude=$DIR/* 2> /dev/null | tar x 2> /dev/null
+      else
+        echo "  Copying $DIR to $NFSROOT"
+        cp -ax $DIR $NFSROOT
+      fi
     fi
   done
 
-  cp -alx /bin $NFSROOT
-  cp -alx /sbin $NFSROOT
-
   cd $NFSROOT
 
   # Exclude specific bits of /var
@@ -519,7 +536,7 @@ create_new_nfsroot() {
     --exclude=/var/lib/named \
     2> /dev/null | tar x 2> /dev/null
 
-  for DIR in /myth /mnt /data /tmp /proc /media /sys /cdrom /var/lib/mlocate ; do
+  for DIR in /mnt /data /tmp /media /cdrom /var/lib/mlocate ; do
     echo "  Creating $DIR"
     tar c $DIR --exclude=$DIR/* 2> /dev/null | tar x 2> /dev/null
   done
@@ -534,11 +551,12 @@ create_new_nfsroot() {
   chroot $NFSROOT /sbin/remove_service.sh nmbd
   chroot $NFSROOT /sbin/remove_service.sh smbd
   chroot $NFSROOT /sbin/remove_service.sh tftpd
+  chroot $NFSROOT /sbin/remove_service.sh avahi
 
   # Update the fstab.
 
   cp $NSFROOT/etc/fstab $NFSROOT/etc/fstab~
-  cat $NFSROOT/etc/fstab~ | grep -v ext3 |
+  cat $NFSROOT/etc/fstab~ | grep -v ext[34] | grep -v xfs |
     grep -v ^UUID= > $NFSROOT/etc/fstab
 
   echo "\
@@ -547,6 +565,12 @@ $BACKEND_IP:/myth /myth nfs defaults,nolock,auto,noatime 0 0
 $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,auto,noatime 0 0
 " >> $NFSROOT/etc/fstab
 
+  for storage_mount in ${storage_mounts[@]} ; do
+    echo "\
+$BACKEND_IP:${storage_mount} ${storage_mount} nfs auto,noatime,nolock,rsize=32768,wsize=32768 0 0" \
+    >> $NFSROOT/etc/fstab
+  done
+
   cp $NFSROOT/etc/rc.sysinit $NFSROOT/etc/rc.sysinit~
   sed -e '/^\/sbin\/minilogd/s/$/\n\n# Mount NFS early\n\/bin\/mount -a -t nfs/' \
     < $NFSROOT/etc/rc.sysinit~ > $NFSROOT/etc/rc.sysinit
@@ -580,7 +604,13 @@ $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,au
 
   chown mythtv:mythtv $NFSROOT/home/mythtv/.mythtv/mysql.txt
 
-#  echo > $NFSROOT/etc/mythtv/Cards
+  # Check if the user has a diskless_tweak.<frontend_name> file in root's 
+  # home directory. If they do, run it inside the chroot of the NFS root.
+
+  if [[ -x ~/diskless_tweak.$FRONTEND ]] ; then
+    echo Running tweak file ~/diskless_tweak.$FRONTEND
+    chroot $NFSROOT bash -v ~/diskless_tweak.$FRONTEND
+  fi
 
   create_default_pxelinux_entry
   export_nfsroot
@@ -589,11 +619,8 @@ $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,au
   dialog "${DOPTS[@]}" --msgbox "Boot your diskless FE
   and then re-run this script ($0) so that the MAC address
   of the Diskless FE can be obtained." 0 0
-
 }
 
-
-
 ##########################################
 ##########################################
 ##
@@ -602,8 +629,6 @@ $BACKEND_IP:/data/var/cache/pacman /data/var/cache/pacman nfs defaults,nolock,au
 ##########################################
 ##########################################
 
-
-
 check_for_default_fe
 find_existing_diskless_fes
 
@@ -612,6 +637,7 @@ get_network_info
 setup_tftpd
 setup_dhcpd
 enable_mysql_and_backend_networking
+find_storage_mounts
 export_mounts
 create_tftpboot_directory
 enable_nfs
diff --git a/abs/core/dvb-firmware/PKGBUILD b/abs/core/dvb-firmware/PKGBUILD
index 5531f86..3a84167 100644
--- a/abs/core/dvb-firmware/PKGBUILD
+++ b/abs/core/dvb-firmware/PKGBUILD
@@ -3,18 +3,20 @@
 
 pkgname=dvb-firmware
 pkgver=1
-pkgrel=8
+pkgrel=9
 pkgdesc="Firmware for DVB cards"
 arch=('i586' 'i686' 'x86_64')
 url="http://linuxtv.org/"
 source=(ftp://ftp.knoppmyth.net/R6/sources/dvb-firmware.tar.bz2
 http://dl.ivtvdriver.org/ivtv/firmware/cx18-firmware.tar.gz
 	xc3028-v27.fw
-	dvb-usb-dib0700-1.20.fw)
+	dvb-usb-dib0700-1.20.fw
+	dvb-usb-af9015.fw)
 md5sums=('6932d0b4f763424e35b7fa3a6cc82a2e'
-	 '667fa0ee6b79e054736beef922966333'
-	 '293dc5e915d9a0f74a368f8a2ce3cc10'
-	 'f42f86e2971fd994003186a055813237')
+         '667fa0ee6b79e054736beef922966333'
+         '293dc5e915d9a0f74a368f8a2ce3cc10'
+         'f42f86e2971fd994003186a055813237'
+         'dccbc92c9168cc629a88b34ee67ede7b')
 
 build() {
   cd $startdir/src/
diff --git a/abs/core/dvb-firmware/dvb-usb-af9015.fw b/abs/core/dvb-firmware/dvb-usb-af9015.fw
new file mode 100644
index 0000000..0014181
Binary files /dev/null and b/abs/core/dvb-firmware/dvb-usb-af9015.fw differ
diff --git a/abs/core/filesystem/PKGBUILD b/abs/core/filesystem/PKGBUILD
index 02649c3..aca2a86 100644
--- a/abs/core/filesystem/PKGBUILD
+++ b/abs/core/filesystem/PKGBUILD
@@ -4,7 +4,7 @@
 
 pkgname=filesystem
 pkgver=2009.01
-pkgrel=2
+pkgrel=4
 pkgdesc="Base filesystem"
 arch=(i686 x86_64)
 license=('GPL')
@@ -18,25 +18,6 @@ backup=(etc/fstab etc/crypttab etc/group etc/hosts etc/ld.so.conf etc/passwd
 source=(group issue nsswitch.conf securetty host.conf ld.so.conf
         passwd shadow fstab crypttab hosts motd resolv.conf shells
         gshadow services protocols profile modprobe.d.usb-load-ehci-first)
-md5sums=('f4cf8d0a2de2658165148d5f64d81675'
-         '1bdc5dba66947d74866a5df8ce9ef3b1'
-         '775464ba7588b4976e0c2a02b83123f4'
-         '655071da46d2ac03e0fb8a071bf193ea'
-         'f28150d4c0b22a017be51b9f7f9977ed'
-         '2c24792d97ef3cf0d73b60d4c429730b'
-         '8a9042a2cedf6b6b47eb8973f14289cb'
-         '019e5c24f9befef395a28e7ef2e4e5b9'
-         'c4f23a66a1bcc08fd164639bdafbc60a'
-         'e5d8323a4dbee7a6d0d2a19cbf4b819f'
-         '81b3cb42a6ddabc2ed2310511ee9c859'
-         'd41d8cd98f00b204e9800998ecf8427e'
-         '6f48288b6fcaf0065fcb7b0e525413e0'
-         '40dac0de4c6b99c8ca97effbd7527c84'
-         'ab9c2a40eba287b2918589ab8e0b2fbf'
-         'f436d2e0ed02b7b73bd10c6693e95ac3'
-         '65d78e621ed69eed69f854c3ee2e5942'
-         '288a2e8d63c5ea2c2d852c7147e59d28'
-         '8098ffd9fbf890468d3198277596b85a')
 
 build()
 {
@@ -75,7 +56,7 @@ build()
   chown root:50 ${startdir}/pkg/var/games
 
   cd $startdir/src
-  cp fstab crypttab group host.conf hosts issue ld.so.conf motd nsswitch.conf \
+  cp fstab crypttab group host.conf hosts  ld.so.conf motd nsswitch.conf \
     passwd protocols resolv.conf securetty services shadow shells profile \
     $startdir/pkg/etc/
   install -m 600 $startdir/src/gshadow $startdir/pkg/etc/gshadow
@@ -92,3 +73,23 @@ build()
   # Add /etc/modprobe.d/
   install -D -m644 ${srcdir}/modprobe.d.usb-load-ehci-first ${pkgdir}/etc/modprobe.d/usb-load-ehci-first
 }
+
+md5sums=('f4cf8d0a2de2658165148d5f64d81675'
+         '1bdc5dba66947d74866a5df8ce9ef3b1'
+         '042ab2ae8ee489908ae87e0598070a11'
+         '655071da46d2ac03e0fb8a071bf193ea'
+         'f28150d4c0b22a017be51b9f7f9977ed'
+         '2c24792d97ef3cf0d73b60d4c429730b'
+         '8a9042a2cedf6b6b47eb8973f14289cb'
+         '019e5c24f9befef395a28e7ef2e4e5b9'
+         'c4f23a66a1bcc08fd164639bdafbc60a'
+         'e5d8323a4dbee7a6d0d2a19cbf4b819f'
+         '81b3cb42a6ddabc2ed2310511ee9c859'
+         'd41d8cd98f00b204e9800998ecf8427e'
+         '6f48288b6fcaf0065fcb7b0e525413e0'
+         '40dac0de4c6b99c8ca97effbd7527c84'
+         'ab9c2a40eba287b2918589ab8e0b2fbf'
+         'f436d2e0ed02b7b73bd10c6693e95ac3'
+         '65d78e621ed69eed69f854c3ee2e5942'
+         '288a2e8d63c5ea2c2d852c7147e59d28'
+         '8098ffd9fbf890468d3198277596b85a')
diff --git a/abs/core/filesystem/__changelog b/abs/core/filesystem/__changelog
new file mode 100644
index 0000000..6b2fd86
--- /dev/null
+++ b/abs/core/filesystem/__changelog
@@ -0,0 +1,2 @@
+remove /etc/issue
+
diff --git a/abs/core/filesystem/nsswitch.conf b/abs/core/filesystem/nsswitch.conf
index 7d86691..ec84725 100644
--- a/abs/core/filesystem/nsswitch.conf
+++ b/abs/core/filesystem/nsswitch.conf
@@ -15,5 +15,6 @@ ethers: db files
 rpc: db files
 
 netgroup: db files
+automount:files
 
 # End /etc/nsswitch.conf
diff --git a/abs/core/fluxbox/PKGBUILD b/abs/core/fluxbox/PKGBUILD
index b3a9a41..3873ff1 100644
--- a/abs/core/fluxbox/PKGBUILD
+++ b/abs/core/fluxbox/PKGBUILD
@@ -4,7 +4,7 @@
 
 pkgname=fluxbox
 pkgver=1.1.1
-pkgrel=6
+pkgrel=11
 pkgdesc="A lightweight and highly-configurable window manager"
 arch=('i686' 'x86_64')
 url="http://www.fluxbox.org"
@@ -13,9 +13,11 @@ depends=('libxft' 'libxpm' 'libxinerama' 'libxrandr' 'gcc-libs' 'bash' 'imlib2')
 makedepends=('pkgconfig')
 options=('!makeflags')
 source=(http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2 \
-        fluxbox.desktop keys)
+        fluxbox.desktop keys fluxbox_fullscreen_focus.patch)
 
 build() {
+  echo "==> Patching Fluxbox with fullscreen focus patch..."
+  patch < fluxbox_fullscreen_focus.patch ${srcdir}/${pkgname}-${pkgver}/src/Window.cc || return 1
   cd ${srcdir}/${pkgname}-${pkgver}
   ./configure --prefix=/usr \
     --enable-kde --enable-gnome \
@@ -29,3 +31,7 @@ build() {
   install -D -m644 ../keys ${pkgdir}/usr/share/fluxbox/keys || return 1
   install -D -m644 COPYING ${pkgdir}/usr/share/licenses/$pkgname/COPYING || return 1
 }
+md5sums=('fa9fa8fe9a44f86522de5754f8b285ca'
+         'eeae9c88a2526ac0bd8afcd9ce97f9ed'
+         'bb9f812c559263b4bf1d722628a11ca8'
+         '82dac089f2d42bb9592debc93291846d')
diff --git a/abs/core/fluxbox/fluxbox_fullscreen_focus.patch b/abs/core/fluxbox/fluxbox_fullscreen_focus.patch
new file mode 100644
index 0000000..1a8c233
--- /dev/null
+++ b/abs/core/fluxbox/fluxbox_fullscreen_focus.patch
@@ -0,0 +1,12 @@
+--- src/Window.cc.orig	2010-04-12 16:45:00.750585365 -0500
++++ src/Window.cc	2010-04-12 16:45:38.719755786 -0500
+@@ -2042,8 +2042,7 @@
+     FluxboxWindow *cur = FocusControl::focusedFbWindow();
+     WinClient *client = FocusControl::focusedWindow();
+     if (ret && cur && getRootTransientFor(&from) != getRootTransientFor(client))
+-        ret = !(cur->isFullscreen() && getOnHead() == cur->getOnHead()) &&
+-              !cur->isTyping();
++        ret = !cur->isTyping();
+ 
+     if (!ret)
+         Fluxbox::instance()->attentionHandler().addAttention(from);
diff --git a/abs/core/fluxbox/keys b/abs/core/fluxbox/keys
index fbacf75..d0091eb 100644
--- a/abs/core/fluxbox/keys
+++ b/abs/core/fluxbox/keys
@@ -17,11 +17,13 @@ Mod1 F9 :Workspace 9
 Mod1 F10 :Workspace 10
 Mod1 F11 :Workspace 11
 Mod1 F12 :Workspace 12
-Mod1 x :ExecCommand xterm -fn *18*
+Mod1 x :ExecCommand tvterm.sh
 Mod1 s :ExecCommand sudo taskset -c 0 mythtv-setup
-Mod1 m :ExecCommand mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+#Mod1 m :ExecCommand mythfrontend --logfile /var/log/mythtv/mythfrontend.log
+Mod1 m :ExecCommand /usr/LH/bin/mythfrontend-start
 Mod1 1 :ExecCommand sudo sv start mythbackend
 Mod1 2 :ExecCommand sudo sv stop mythbackend
 Mod1 3 :ExecCommand sudo sv restart mythbackend
 Mod1 h :ExecCommand MythVantage -h
 Mod1 Control u :ExecCommand /usr/LH/bin/unclutter-toggle.sh 
+Mod1 Escape :GotoWindow {1}
diff --git a/abs/core/hauppauge-hvr-firmware/PKGBUILD b/abs/core/hauppauge-hvr-firmware/PKGBUILD
index ef38191..f9a488d 100755
--- a/abs/core/hauppauge-hvr-firmware/PKGBUILD
+++ b/abs/core/hauppauge-hvr-firmware/PKGBUILD
@@ -1,12 +1,14 @@
 pkgname=hauppauge-hvr-firmware
 pkgver=1
-pkgrel=1
+pkgrel=3
 pkgdesc="firmware needed for the hvr cards"
 arch=(i686 x86_64)
 url=""
 makedepends='unzip'
-source=("http://steventoth.net/linux/hvr1800/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip")
-
+source=("http://steventoth.net/linux/hvr1800/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip"
+        "http://steventoth.net/linux/hvr1400/xc3028L-v36.fw")
+md5sums=('7fe395c1a398f079d98e416ee7be3777'
+         '5260975b76ade7a1d37270129b6d6372')
 
 build() {
   cd $startdir || return 1
@@ -17,4 +19,6 @@ build() {
   mv hcw85enc.rom v4l-cx23885-enc.fw
   mv hcw85mlC.rom v4l-cx23885-avcore-01.fw
   cp -rp *.fw  $startdir/pkg/lib/firmware
+  cd $startdir/src/
+  cp *.fw  $startdir/pkg/lib/firmware
 }
diff --git a/abs/core/hdhomerun/PKGBUILD b/abs/core/hdhomerun/PKGBUILD
index 3e1a064..51186e0 100755
--- a/abs/core/hdhomerun/PKGBUILD
+++ b/abs/core/hdhomerun/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=hdhomerun	
-pkgver=20090806
+pkgver=20100213
 pkgrel=1
 pkgdesc="utils and firmware needed for the hdhomerun"
 arch=(i686 x86_64)
@@ -20,3 +20,7 @@ build() {
 	mkdir -p $startdir/pkg/lib/firmware
 	cp $startdir/src/*.bin $startdir/pkg/lib/firmware/
 }
+md5sums=('c69f46d0a671e3d7aaacc82ad393644a'
+         '8b23724c2afb04cd909d3c1ff392d287'
+         '369be2b2c95c2c93e0f2b09fcc01edfb'
+         '9e83fbf8a74d6b8f746cc9f1414e9167')
diff --git a/abs/core/hdparm/PKGBUILD b/abs/core/hdparm/PKGBUILD
index de29521..2e1a441 100644
--- a/abs/core/hdparm/PKGBUILD
+++ b/abs/core/hdparm/PKGBUILD
@@ -2,8 +2,8 @@
 # Maintainer: Paul Mattal <paul@archlinux.org>
 
 pkgname=hdparm
-pkgver=8.9
-pkgrel=10
+pkgver=9.29
+pkgrel=1
 pkgdesc="A shell utility for manipulating Linux IDE drive/driver parameters"
 arch=(i686 x86_64)
 depends=('glibc')
@@ -30,4 +30,4 @@ build() {
   # installs empty /usr/share, which we let it do since it causes
   # no harm and it might put something there someday
 }
-md5sums=('19fa013956612581af7d00907990ac84')
+md5sums=('6575aba60e5adee628414cac76549c9b')
diff --git a/abs/core/kernel26/PKGBUILD b/abs/core/kernel26/PKGBUILD
index 8248fc5..0095428 100644
--- a/abs/core/kernel26/PKGBUILD
+++ b/abs/core/kernel26/PKGBUILD
@@ -5,7 +5,7 @@
 pkgname=kernel26
 _basekernel=2.6.28
 pkgver=2.6.28.5
-pkgrel=4
+pkgrel=5
 _pkgrel=1
 _patchname="patch-${pkgver}-${_pkgrel}-ARCH"
 _fbpatchname="fbcondecor-0.9.5-2.6.28.patch"
@@ -35,7 +35,8 @@ source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-$_basekernel.tar.bz2
         kernel26.preset
 	logo_linux_clut224.ppm
 	serial.diff
-	ext4.patch)
+	ext4.patch
+	coretemp.patch)
 optdepends=('crda: to set the correct wireless channels of your country')
 md5sums=('d351e44709c9810b85e29b877f50968a'
          '6e63a5f54c142f42de7e59fc5f75eab2'
@@ -44,7 +45,8 @@ md5sums=('d351e44709c9810b85e29b877f50968a'
          '959b317feb974d8906c5e15e7c76ad8f'
          'ceb38003807a5aa1a00c8d4b9f028893'
          '7bdfe2e1daedb324fdfdfa95ba4e2430'
-         'd66b5cc1e1c2ce40d06d77167f36dfd9')
+         'd66b5cc1e1c2ce40d06d77167f36dfd9'
+	 '695a2d6f1b0b4c7001bf665d5f667a5d')
 
 build() {
   KARCH=x86
@@ -55,6 +57,8 @@ build() {
   patch -Np1 -i ${srcdir}/${_patchname} || return 1
   patch -Np1 -i ${srcdir}/${_fbpatchname} || return 1
   patch -Np1 -i ${srcdir}/ext4.patch || return 1
+  patch -Np1 -i ${srcdir}/coretemp.patch || return 1
+#  patch -Np1 -i ${srcdir}/patch-2.6.28.5 || return 1
 #  patch -p0 < ../../serial.diff
 
   if [ "$CARCH" = "x86_64" ]; then
diff --git a/abs/core/kernel26/coretemp.patch b/abs/core/kernel26/coretemp.patch
new file mode 100644
index 0000000..07ce434
--- /dev/null
+++ b/abs/core/kernel26/coretemp.patch
@@ -0,0 +1,86 @@
+diff -ubr orig/linux-2.6.28/Documentation/hwmon/coretemp linux-2.6.28/Documentation/hwmon/coretemp
+--- orig/linux-2.6.28/Documentation/hwmon/coretemp	2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28/Documentation/hwmon/coretemp	2009-07-18 07:29:37.000000000 +0200
+@@ -4,7 +4,7 @@
+ Supported chips:
+   * All Intel Core family
+     Prefix: 'coretemp'
+-    CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17
++    CPUID: family 0x6, models 0xe, 0xf, 0x16, 0x17, 0x1c
+     Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
+                Volume 3A: System Programming Guide
+                http://softwarecommunity.intel.com/Wiki/Mobility/720.htm
+@@ -14,10 +14,11 @@
+ Description
+ -----------
+ 
+-This driver permits reading temperature sensor embedded inside Intel Core CPU.
+-Temperature is measured in degrees Celsius and measurement resolution is
+-1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
+-the actual value of temperature register is in fact a delta from TjMax.
++This driver permits reading temperature sensor embedded inside Intel
++Core  and Intel Atom CPUs. Temperature is measured in degrees Celsius
++and measurement resolution is 1 degree C. Valid temperatures are from 0
++to TjMax degrees C, because the actual value of temperature register is
++in fact a delta from TjMax.
+ 
+ Temperature known as TjMax is the maximum junction temperature of processor.
+ Intel defines this temperature as 85C or 100C. At this temperature, protection
+@@ -35,4 +36,5 @@
+ 
+ The TjMax temperature is set to 85 degrees C if undocumented model specific
+ register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
+-(sometimes) documented in processor datasheet.
++(sometimes) documented in processor datasheet. The Intel Atom has TjMax 95C
++as per the specification.
+diff -ubr orig/linux-2.6.28/drivers/hwmon/coretemp.c linux-2.6.28/drivers/hwmon/coretemp.c
+--- orig/linux-2.6.28/drivers/hwmon/coretemp.c	2008-12-25 00:26:37.000000000 +0100
++++ linux-2.6.28/drivers/hwmon/coretemp.c	2009-07-18 08:12:16.000000000 +0200
+@@ -1,7 +1,7 @@
+ /*
+  * coretemp.c - Linux kernel module for hardware monitoring
+  *
+- * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
++ * Copyright (C) 2007, 2008 Rudolf Marek <r.marek@assembler.cz>
+  *
+  * Inspired from many hwmon drivers
+  *
+@@ -244,8 +244,14 @@
+ 		}
+ 	}
+ 
++	/* Intel Atom has only fixed TjMax at 95C */
++
++	if (c->x86_model == 0x1c) {
++		data->tjmax = 95000;
++	} else {
++		/* Adjust the TjMax for the rest of Core2 family */
+ 	data->tjmax = adjust_tjmax(c, data->id, &pdev->dev);
+-	platform_set_drvdata(pdev, data);
++	}
+ 
+ 	/* read the still undocumented IA32_TEMPERATURE_TARGET it exists
+ 	   on older CPUs but not in this register */
+@@ -265,6 +271,8 @@
+ 		}
+ 	}
+ 
++	platform_set_drvdata(pdev, data);
++
+ 	if ((err = sysfs_create_group(&pdev->dev.kobj, &coretemp_group)))
+ 		goto exit_dev;
+ 
+@@ -413,11 +421,11 @@
+ 	for_each_online_cpu(i) {
+ 		struct cpuinfo_x86 *c = &cpu_data(i);
+ 
+-		/* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A */
++		/* check if family 6, models 0xe, 0xf, 0x16, 0x17, 0x1A, 0x1C */
+ 		if ((c->cpuid_level < 0) || (c->x86 != 0x6) ||
+ 		    !((c->x86_model == 0xe) || (c->x86_model == 0xf) ||
+ 			(c->x86_model == 0x16) || (c->x86_model == 0x17) ||
+-			(c->x86_model == 0x1A))) {
++			(c->x86_model == 0x1A) || (c->x86_model == 0x1C))) {
+ 
+ 			/* supported CPU not found, but report the unknown
+ 			   family 6 CPU */
diff --git a/abs/core/libarchive/PKGBUILD b/abs/core/libarchive/PKGBUILD
index c8209a7..1c29cd2 100644
--- a/abs/core/libarchive/PKGBUILD
+++ b/abs/core/libarchive/PKGBUILD
@@ -1,16 +1,17 @@
-# $Id: PKGBUILD 24591 2009-01-18 20:59:48Z dan $
+# $Id: PKGBUILD 50484 2009-08-27 22:33:42Z thomas $
 # Maintainer: Dan McGee <dan@archlinux.org>
 # Maintainer: Aaron Griffin <aaron@archlinux.org>
 pkgname=libarchive
-pkgver=2.6.1
+pkgver=2.7.1
 pkgrel=1
 pkgdesc="library that can create and read several streaming archive formats"
 arch=(i686 x86_64)
-url="http://people.freebsd.org/~kientzle/libarchive/"
+url="http://libarchive.googlecode.com/"
 license=('BSD')
 groups=('base')
-depends=('zlib' 'bzip2' 'acl')
+depends=('zlib' 'bzip2' 'xz-utils' 'acl' 'openssl')
 source=(http://libarchive.googlecode.com/files/libarchive-$pkgver.tar.gz)
+sha256sums=('a7e066ef857d3db0211e2d916ca14aafc48a4776c4fa108fd67092ce862a7ba8')
 
 # pacman.static build fails unless we keep the libtool files (or unless we link
 # the missing symbols inside the libarchive .a static lib, but that is dirty)
@@ -18,7 +19,7 @@ options=(libtool)
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
-  ./configure --prefix=/usr --without-lzmadec
+  ./configure --prefix=/usr
 
   make || return 1
   make DESTDIR=$startdir/pkg install
@@ -27,6 +28,3 @@ build() {
   mkdir -p $startdir/pkg/usr/share/licenses/libarchive
   install -m644 COPYING $startdir/pkg/usr/share/licenses/libarchive/
 }
-
-md5sums=('9d9f83947ee9d5732289ed48d00e3743')
-sha256sums=('4d0ad4e5c33aa9725c7d92a42ae605815781372db949cd9906945e6c0d85c179')
diff --git a/abs/core/libfetch/Makefile b/abs/core/libfetch/Makefile
new file mode 100644
index 0000000..15df96e
--- /dev/null
+++ b/abs/core/libfetch/Makefile
@@ -0,0 +1,88 @@
+prefix = /usr
+DESTDIR =
+DEBUG = false
+FETCH_WITH_INET6 = true
+FETCH_WITH_OPENSSL = true
+
+WARNINGS = -Wall -Wstrict-prototypes -Wsign-compare -Wchar-subscripts \
+	   -Wpointer-arith -Wcast-align -Wsign-compare
+CFLAGS   = -O2 -pipe -I. -fPIC $(WARNINGS) \
+	   -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES
+
+CFLAGS	+= -DFTP_COMBINE_CWDS -DNETBSD
+
+ifeq ($(strip $(FETCH_WITH_INET6)), true)
+CFLAGS+=	-DINET6
+endif
+
+ifeq ($(strip $(FETCH_WITH_OPENSSL)), true)
+CFLAGS+=	-DWITH_SSL
+LDFLAGS=	-lssl -lcrypto
+endif
+
+ifeq ($(strip $(DEBUG)), true)
+CFLAGS += -g -DDEBUG
+else
+CFLAGS += -UDEBUG
+endif
+
+CC = gcc
+LD = gcc
+AR = ar
+RANLIB = ranlib
+INSTALL = install -c -D
+
+OBJS= fetch.o common.o ftp.o http.o file.o
+INCS= fetch.h common.h
+GEN = ftperr.h httperr.h
+MAN = libdownload.3
+
+#pretty print!
+E = @/bin/echo
+Q = @
+
+all: libfetch.so libfetch.a
+	$(E) "  built with:  " $(CFLAGS)
+.PHONY: all
+
+%.o: %.c $(INCS) $(GEN)
+	$(E) "  compile   " $@
+	$(Q) $(CC) $(CFLAGS) -c $<
+
+ftperr.h: ftp.errors
+	$(E) "  generate  " $@
+	$(Q) ./errlist.sh ftp_errlist FTP ftp.errors > $@
+
+httperr.h: http.errors
+	$(E) "  generate  " $@
+	$(Q) ./errlist.sh http_errlist HTTP http.errors > $@
+
+libfetch.so: $(GEN) $(INCS) $(OBJS)
+	$(E) "  build     " $@
+	$(Q) rm -f $@
+	$(Q) $(LD) $(LDFLAGS) *.o -shared -o $@
+
+libfetch.a: $(GEN) $(INCS) $(OBJS)
+	$(E) "  build     " $@
+	$(Q) rm -f $@
+	$(Q) $(AR) rcs $@ *.o
+	$(Q) $(RANLIB) $@
+
+clean:
+	$(E) "  clean     "
+	$(Q) rm -f libfetch.so libfetch.a *.o $(GEN)
+.PHONY: clean
+
+install: all
+	$(Q) $(INSTALL) -m 755 libfetch.so $(DESTDIR)$(prefix)/lib/libfetch.so
+	$(Q) $(INSTALL) -m 644 libfetch.a $(DESTDIR)$(prefix)/lib/libfetch.a
+	$(Q) $(INSTALL) -m 644 fetch.h $(DESTDIR)$(prefix)/include/fetch.h
+	$(Q) $(INSTALL) -m 644 fetch.3 $(DESTDIR)$(prefix)/share/man/man3/fetch.3
+.PHONY: install
+
+uninstall:
+	$(Q) rm -f $(DESTDIR)$(prefix)/lib/libfetch.so
+	$(Q) rm -f $(DESTDIR)$(prefix)/lib/libfetch.a
+	$(Q) rm -f $(DESTDIR)$(prefix)/include/fetch.h
+	$(Q) rm -f $(DESTDIR)$(prefix)/share/man/man3/fetch.3
+.PHONY: uninstall
diff --git a/abs/core/libfetch/PKGBUILD b/abs/core/libfetch/PKGBUILD
new file mode 100644
index 0000000..8cdbd2c
--- /dev/null
+++ b/abs/core/libfetch/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id$
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Xavier Chantry <shiningxc@gmail.com>
+
+pkgname=libfetch
+pkgver=2.26
+pkgrel=1
+pkgdesc="URL based download library"
+arch=('i686' 'x86_64')
+license=('BSD')
+groups=('base')
+depends=('openssl')
+url="http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/net/libfetch/"
+source=(Makefile
+        ftp://ftp.archlinux.org/other/$pkgname/$pkgname-$pkgver.tar.gz)
+
+# source PKGBUILD && mksource
+mksource() {
+  export CVSROOT=:pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
+  D=pkgsrc/net/libfetch
+  [ -d "$D" ] && cvs up "$D" || cvs co "$D"
+  pushd "$D"
+  dirname=$(sed -n 's/DISTNAME=.*\(libfetch-.*$\)/\1/p' Makefile)
+  cp -r files $dirname
+  tar -czv --exclude=CVS -f ../../../$dirname.tar.gz $dirname
+  rm -r $dirname
+  popd
+}
+
+build() {
+  cd $srcdir/${pkgname}-${pkgver}
+  cp ../Makefile .
+  make || return 1
+  make DESTDIR=$pkgdir install
+}
+
+md5sums=('cea609a8d6fd97761e364f7203e6d609'
+         '2dc53c0b5480d3dd5157482379820806')
diff --git a/abs/core/libiec61883/PKGBUILD b/abs/core/libiec61883/PKGBUILD
index 8159d36..dbb0b49 100644
--- a/abs/core/libiec61883/PKGBUILD
+++ b/abs/core/libiec61883/PKGBUILD
@@ -5,19 +5,23 @@
 
 pkgname=libiec61883
 pkgver=1.2.0
-pkgrel=2
+pkgrel=3
 pkgdesc="A higher level API for streaming DV, MPEG-2 and audio over Linux IEEE 1394"
 arch=('i686' 'x86_64')
 url="http://www.linux1394.org/"
 license=('LGPL')
 depends=('libraw1394')
 options=('!libtool')
-source=(http://www.linux1394.org/dl/$pkgname-$pkgver.tar.gz)
+source=(http://www.kernel.org/pub/linux/libs/ieee1394/$pkgname-$pkgver.tar.gz)
 md5sums=('8af39fff74988073c3ad53fbab147da9')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
+  patch -p0 <$startdir/libiec61883-1.2.0-Makefile.patch
   ./configure --prefix=/usr
   make || return 1
-  make DESTDIR=$startdir/pkg install
+  make DESTDIR=$startdir/pkg install || return 1
+#  mkdir -p $startdir/pkg/usr/bin/.libs
+#  cp $startdir/src/$pkgname-$pkgver/examples/test-mpeg2 $startdir/pkg/usr/bin || return 1
+#  cp $startdir/src/$pkgname-$pkgver/examples/.libs/lt-test-mpeg2 $startdir/pkg/usr/bin/.libs || return 1
 }
diff --git a/abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch b/abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch
new file mode 100644
index 0000000..59166ce
--- /dev/null
+++ b/abs/core/libiec61883/libiec61883-1.2.0-Makefile.patch
@@ -0,0 +1,25 @@
+--- examples/Makefile.in.orig	2010-01-01 03:30:47.294012274 +0000
++++ examples/Makefile.in	2010-01-01 03:35:31.530650431 +0000
+@@ -33,8 +33,8 @@
+ build_triplet = @build@
+ host_triplet = @host@
+ noinst_PROGRAMS = test-amdtp$(EXEEXT) test-dv$(EXEEXT) \
+-	test-mpeg2$(EXEEXT) test-plugs$(EXEEXT)
+-bin_PROGRAMS = plugreport$(EXEEXT) plugctl$(EXEEXT)
++	test-plugs$(EXEEXT)
++bin_PROGRAMS = plugreport$(EXEEXT) plugctl$(EXEEXT) test-mpeg2$(EXEEXT)
+ subdir = examples
+ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+
+--- examples/Makefile.am.orig	2010-01-01 03:30:57.440678420 +0000
++++ examples/Makefile.am	2010-01-01 03:33:34.714412431 +0000
+@@ -1,6 +1,6 @@
+ 
+-noinst_PROGRAMS = test-amdtp test-dv test-mpeg2 test-plugs
+-bin_PROGRAMS = plugreport plugctl
++noinst_PROGRAMS = test-amdtp test-dv test-plugs
++bin_PROGRAMS = plugreport plugctl test-mpeg2
+ man_MANS = plugreport.1 plugctl.1
+ EXTRA_DIST = plugreport.1 plugctl.1
+ 
diff --git a/abs/core/libjpeg6/PKGBUILD b/abs/core/libjpeg6/PKGBUILD
new file mode 100644
index 0000000..659aaf6
--- /dev/null
+++ b/abs/core/libjpeg6/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=libjpeg6
+pkgver=6b
+pkgrel=11
+pkgdesc="Library of JPEG support functions"
+arch=('i686' 'x86_64')
+url="http://ijg.org"
+license=('custom')
+depends=('glibc')
+makedepends=('libtool')
+options=(!libtool)
+install=libjpeg6.install
+source=(ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v$pkgver.tar.gz)
+md5sums=('dbd5f3b47ed13132f04c685d608a7547')
+
+build() {
+  cd $srcdir/jpeg-$pkgver
+  cp /usr/share/libtool/config/config.{guess,sub} .
+  sed -i "s#./libtool#libtool#" configure
+  ./configure --prefix=/opt/libjpeg6 --enable-shared --enable-static
+  make || return 1
+  mkdir -p $pkgdir/opt/libjpeg6/{bin,lib,include,man/man1}
+  make prefix=$pkgdir/opt/libjpeg6 mandir=$pkgdir/usr/share/man/man1 install
+  install -m644 jpegint.h $pkgdir/opt/libjpeg6/include
+  install -Dm644 README $pkgdir/opt/libjpeg6/share/licenses/libjpeg/README
+}
diff --git a/abs/core/libjpeg6/libjpeg6.install b/abs/core/libjpeg6/libjpeg6.install
new file mode 100644
index 0000000..0d3173d
--- /dev/null
+++ b/abs/core/libjpeg6/libjpeg6.install
@@ -0,0 +1,25 @@
+# arg 1:  the new package version
+post_install() {
+	grep -v libjpeg6 /etc/ld.so.conf > /tmp/ld.so.conf
+	mv /tmp/ld.so.conf /etc/ld.so.conf
+	echo "/opt/libjpeg6/lib" >> /etc/ld.so.conf
+	ldconfig
+}
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_upgrade() {
+	grep -v libjpeg6 /etc/ld.so.conf > /tmp/ld.so.conf
+	mv /tmp/ld.so.conf /etc/ld.so.conf
+	echo "/opt/libjpeg6/lib" >> /etc/ld.so.conf
+	ldconfig
+}
+# arg 1:  the old package version
+post_remove() {
+	grep -v libjpeg6 /etc/ld.so.conf > /tmp/ld.so.conf
+	mv /tmp/ld.so.conf /etc/ld.so.conf
+	ldconfig
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/libvdpau/PKGBUILD b/abs/core/libvdpau/PKGBUILD
new file mode 100644
index 0000000..3c44363
--- /dev/null
+++ b/abs/core/libvdpau/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libvdpau
+pkgver=0.4
+pkgrel=1
+pkgdesc="NVIDIA VDPAU library"
+arch=(i686 x86_64)
+url=http://cgit.freedesktop.org/~aplattner/libvdpau
+depends=('gcc-libs>=4.3.3')
+conflicts=('nvidia-utils<190.42-2')
+options=('!libtool' 'force')
+license=('custom')
+source=(http://people.freedesktop.org/~aplattner/vdpau/${pkgname}-${pkgver}.tar.gz)
+makedepends=('libx11')
+sha256sums=('530c630e0784cc65bc31e5b487bd11fccd4049bc861d16844702048821262faa')
+
+
+build() {
+  cd "${srcdir}/${pkgname}-${pkgver}"
+  ./configure --prefix=/usr || return 1
+  make || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+
+  install -d -m755 "${pkgdir}/usr/share/licenses/${pkgname}"
+  install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" || return 1
+}
diff --git a/abs/core/lighttpd/PKGBUILD b/abs/core/lighttpd/PKGBUILD
index cec41d4..ed6d01e 100644
--- a/abs/core/lighttpd/PKGBUILD
+++ b/abs/core/lighttpd/PKGBUILD
@@ -3,8 +3,8 @@
 
 pkgname=lighttpd
 pkgver=1.4.26
-pkgrel=7
-pkgdesc='a secure, fast, compliant and very flexible web-server'
+pkgrel=16
+pkgdesc='A secure, fast, compliant and very flexible web-server'
 license=('custom')
 arch=('i686' 'x86_64')
 url="http://www.lighttpd.net/"
@@ -16,12 +16,12 @@ optdepends=('libxml2: mod_webdav' \
             'sqlite3: mod_webdav' \
             'gdbm: mod_trigger_b4_dl' \
             )
-backup=('etc/lighttpd/lighttpd.conf' 'etc/logrotate.d/lighttpd' 'etc/lighttpd/auth-inc.conf')
+backup=(etc/lighttpd/lighttpd.conf etc/logrotate.d/lighttpd etc/lighttpd/auth-inc.conf etc/lighttpd/conf.include etc/lighttpd/html.include)
 options=('!libtool' 'emptydirs')
 source=("http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${pkgver}.tar.bz2" \
         'lighttpd.rc.d' 'lighttpd.logrotate.d' 'lighttpd.conf' 'auth-inc.conf' \
         'openssl-0.9.8m.patch')
-install='lighttpd.install'
+#install='lighttpd.install'
 build() {
 	cd $srcdir/$pkgname-$pkgver
 
@@ -65,13 +65,20 @@ build() {
 	    -e 's|#server.pid-file            = "/var/run/lighttpd.pid"|server.pid-file            = "/var/run/lighttpd/lighttpd.pid"|' \
 	    -e 's|/usr/local/bin/php-cgi|/usr/bin/php-cgi|' \
             -e 's|"^/mythweb|"^/{1,2}mythweb|' \
+            -e 's|#                               "mod_proxy",|                               "mod_proxy",|' \
+            -e 's|#                               "mod_ssi",|                               "mod_ssi",|' \
+            -e 's|#ssi.extension              = ( ".shtml" )|ssi.extension              = ( ".shtml" )|' \
 	    -i ${pkgdir}/etc/lighttpd/lighttpd.conf || return 1
 
+        /bin/touch $pkgdir/etc/lighttpd/{conf,html}.include || return 1
+        /bin/echo 'include "/etc/lighttpd/conf.include"' >> $pkgdir/etc/lighttpd/lighttpd.conf || return 1
+        /bin/echo 'include "/etc/lighttpd/html.include"' >> $pkgdir/etc/lighttpd/lighttpd.conf || return 1
+
 	install -D -m644 COPYING $pkgdir/usr/share/licenses/$pkgname/COPYING
 }
 md5sums=('a682c8efce47a2f4263a247ba0813c9b'
          'bd690eee0d9e51857448770a151023b0'
          '857e174643fd7761a2f0d8431a679f6c'
-         'fe078f9b8ee701ed21278789cad90acf'
+         '11fbec7ff7ca1b0d5575445681e8f60e'
          'c6e361131000ceec085f40b310ef4a2c'
          '84c884b8dadd724afe2bc6529e9d4485')
diff --git a/abs/core/lighttpd/__changelog b/abs/core/lighttpd/__changelog
index a96d942..0fe6415 100644
--- a/abs/core/lighttpd/__changelog
+++ b/abs/core/lighttpd/__changelog
@@ -4,3 +4,11 @@ modified auth to require valid user (include auth-inc.conf)
 # by mihanson:
 upgraded to 1.4.26 to address http://linhes.org/flyspray/index.php?do=details&task_id=624
 Added -e 's|"^/mythweb|"^/{1,2}mythweb|' \ to the sed command to work around lighttpd no longer honoring // in a url and/or to work around mythweb producing url's with a // for streaming and downloading.
+
+changed lightttpd.conf to user perl for .cgi (needed for monx)_
+added 404 page
+
+bummped to version 13 to test redmine #690
+
+# by mihanson
+Added etc/lighttpd/conf.include and etc/lighttpd/html.include to backup array
diff --git a/abs/core/lighttpd/lighttpd.conf b/abs/core/lighttpd/lighttpd.conf
index 0c55f52..f437484 100644
--- a/abs/core/lighttpd/lighttpd.conf
+++ b/abs/core/lighttpd/lighttpd.conf
@@ -145,7 +145,7 @@ static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
 #server.bind                = "127.0.0.1"
 
 ## error-handler for status 404
-#server.error-handler-404   = "/error-handler.html"
+server.error-handler-404   = "/404.html"
 #server.error-handler-404   = "/error-handler.php"
 
 ## to help the rc.scripts
@@ -235,7 +235,7 @@ server.groupname           = "http"
 )	
 #### CGI module
 cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
-                               ".cgi" => "/bin/bash" )
+                               ".cgi" => "/usr/bin/perl" )
 
    url.rewrite-once = (
        "^/mythweb/(css|data|images|js|themes|skins|[a-z_]+\.(php|pl)).*" => "$0",
diff --git a/abs/core/lighttpd/lighttpd.install b/abs/core/lighttpd/lighttpd.install
index 0e32a66..a921b0f 100755
--- a/abs/core/lighttpd/lighttpd.install
+++ b/abs/core/lighttpd/lighttpd.install
@@ -2,6 +2,6 @@ pre_upgrade() {
     mv /etc/lighttpd/lighttpd.conf  /etc/lighttpd/lighttpd.conf.old
 }
 post_upgrade() {
-    sed -i 's|"^/mythweb|"/{1,2}mythweb|g' /etc/lighttpd/lighttpd.conf
+    sed -i 's|"^/mythweb|"^/{1,2}mythweb|g' /etc/lighttpd/lighttpd.conf
     touch /etc/lighttpd/lighttpd.user
 }
diff --git a/abs/core/linhes-scripts/770-wrapper.sh b/abs/core/linhes-scripts/770-wrapper.sh
index 65573f4..3095541 100755
--- a/abs/core/linhes-scripts/770-wrapper.sh
+++ b/abs/core/linhes-scripts/770-wrapper.sh
@@ -26,7 +26,7 @@ fi
 # Transcode the file 
 
 
-perl /usr/local/bin/770-encode.pl -q -p mplayer $VIDEODIR/$FILENAME $DIROUT/$TITLE-$STARTTIME.avi
+perl /usr/bin/tablet-encode -q -p mplayer $VIDEODIR/$FILENAME $DIROUT/$TITLE-$STARTTIME.avi
 
 chmod 664 $DIROUT/$TITLE-$STARTTIME.avi
 
diff --git a/abs/core/linhes-scripts/PKGBUILD b/abs/core/linhes-scripts/PKGBUILD
index 4b3244f..d4bdc50 100644
--- a/abs/core/linhes-scripts/PKGBUILD
+++ b/abs/core/linhes-scripts/PKGBUILD
@@ -3,12 +3,13 @@
 
 pkgname=linhes-scripts
 pkgver=1
-pkgrel=35
+pkgrel=77
 pkgdesc="Various scripts that help to make LinHES, LinHES."
 arch=('i686' 'x86_64')
 license=('GPL2')
 depends=('xosd' 'cpulimit')
 url="http://linhes.org/"
+install="linhes-scripts.install"
 source=(
 myth2xvid
 shootscreens.sh
@@ -23,6 +24,7 @@ pause-mythcommflag.sh
 myth2x264
 770-wrapper.sh
 mythwelcome-set-alarm.sh
+mythwelcome-config.py
 pause_mythcommflag
 limit-mythcommflag.sh
 vdpau-detector
@@ -32,12 +34,21 @@ run-limit-mythcommflag
 linhes_update.sh
 linhes_update2.sh
 linhes_update3.sh
+install_hulu.sh
+update_schema_021_to_022.sh
+upgrade_linhes.sh
+remove_php_mythvideo.sh
+removecommercials.sh
+system-cleanup.sh
+myth2fuze
+dct700-cc.sh
+qip7100-cc.sh
 )
 
 build() {
   cd $startdir/src
   mkdir -p $startdir/pkg/usr/LH/bin
-  install -D -m755 myt* 770* idle.sh imp* shoo* *commflag*sh mplayer* vdpau* screen* linhes_* $startdir/pkg/usr/LH/bin
+  install -D -m755 myt* 770* *.sh imp* shoo* *commflag*sh mplayer* vdpau* screen* linhes_* install_hulu.sh $startdir/pkg/usr/LH/bin
   mkdir -p $startdir/pkg/etc/sv/pause-mythcommflag/supervise
   cp run-pause-mythcommflag $startdir/pkg/etc/sv/pause-mythcommflag/run
   mkdir -p $startdir/pkg/etc/sv/limit-mythcommflag/supervise
@@ -45,3 +56,36 @@ build() {
   mkdir -p $startdir/pkg/etc/logrotate.d/
   cp pause_mythcommflag $startdir/pkg/etc/logrotate.d/
 }
+
+md5sums=('f56985b2d602e11dc1e10d3e7848b2a5'
+         '9a2181cdc0bc9cc8b42101f19620def8'
+         '9ae2cd7a0c42d57ad8b5f515d7d60196'
+         '1274bad3fb7296f00acd2d44804bad14'
+         '47225fa9b6c953d56f6ede84d921a300'
+         '6b6e7d34a4bda6d608d150039adefd07'
+         '3fe554dbbf7d09e1f9925032ba888bf5'
+         '18263972b6326e140bbef0bb7dfa2da9'
+         '410795ef9039e4c6c0484e706ecfd567'
+         '0750d7c65109d12aa536f312a38410d1'
+         'ac2a4a6b4100f4d7bfb9ecd9356c8c6e'
+         'd2b475821f902c5e081e7da43a35e6ac'
+         '95c092f67036a361ef7a57436f44332e'
+         'a87e7394bfb3fcc5c2419a2f9ae9b9aa'
+         '3b776bbff68906ddc2f62b7e0dde3fe4'
+         '15f3143d2b1369da431e4268029aba40'
+         '3d0adf26280cde55a0c47188fff34826'
+         '93aaa2940e33ec9ebb305b839ac46a3e'
+         '27a8b3680f3c631a582064fd26ab8746'
+         'b527b01d119d3bc33b8fa69bdf1082bb'
+         'c537c44156d8404016cc4b405b092d45'
+         '4e66f302a77f1a857476e7f289d0c157'
+         'be324dba44ae96676973a74421944853'
+         'ccca6bdbbd86b203a3eecdbbe363e701'
+         '65629302a4d2c3adf88cdf0ebc10d493'
+         '2734054f08c4c885bb9070dce239d4c3'
+         '87b0dc855181f98516acb18a7d551601'
+         '25c1baeb97a49656456ae33f7e7a9f06'
+         '2fb25aef03ffd1282414d8cca3df7056'
+         'd2a29444ab9036fb385bbf044daf1ff5'
+         'df727c98350a64e2171c950bbefc9c5d'
+         '7b890e7044db38e8d439f67e398af206')
diff --git a/abs/core/linhes-scripts/dct700-cc.sh b/abs/core/linhes-scripts/dct700-cc.sh
new file mode 100644
index 0000000..c8d8cf6
--- /dev/null
+++ b/abs/core/linhes-scripts/dct700-cc.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+#Script to control DCT 700/2524 on emitter #1 of CommandIR
+irsend set_transmitters 1
+REMOTE_NAME=DCT700
+cmd="$1"
+irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME menu
+sleep 1
+irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME exit
+sleep 1
+
+case $cmd in
+    [0-9]*)
+    for digit in $(echo $1 | sed -e 's/./& /g'); do 
+        irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME $digit
+        sleep .2
+        # If things work OK with sleep 1, try this for faster channel changes:
+        # sleep 0.3
+    done
+        irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME ok
+sleep .3
+        irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME exit
+    ;;
+
+    *)
+        irsend SEND_ONCE $REMOTE_NAME $cmd
+        ;;
+esac
diff --git a/abs/core/linhes-scripts/install_hulu.sh b/abs/core/linhes-scripts/install_hulu.sh
new file mode 100644
index 0000000..9b06b2e
--- /dev/null
+++ b/abs/core/linhes-scripts/install_hulu.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+#install_hulu.sh
+if [ -e /tmp/huludesktop_i386.deb ]
+then
+cd /tmp
+deb2targz huludesktop_i386.deb
+tar -xzvf huludesktop_i386.tar.gz -C /
+else
+echo "Cannot find huludesktop_i386.deb."
+echo "Please download it from http://www.hulu.com/labs/hulu-desktop-linux"
+echo "Then copy (or move) it to /tmp"
+exit
+fi
+if grep -q Hulu /usr/share/mythtv/themes/defaultmenu/is.xml
+then
+echo "Hulu Desktop exist in Online Streams!"
+else
+  mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp                                           
+  grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp                         
+  echo "<!--#Hulu-->" >> /tmp/is.xml.tmp                                     
+  echo "   <button>" >> /tmp/is.xml.tmp                                      
+  echo "     <type>STREAM</type>" >> /tmp/is.xml.tmp                         
+  echo "     <text>Hulu Desktop</text>" >> /tmp/is.xml.tmp                   
+  echo "     <action>EXEC huludesktop</action>" >> /tmp/is.xml.tmp           
+  echo "   </button>" >> /tmp/is.xml.tmp                                     
+  echo "<!--#Hulu-->" >> /tmp/is.xml.tmp                                     
+  echo "" >> /tmp/is.xml.tmp                                                 
+  echo "</mythmenu>" >> /tmp/is.xml.tmp                                      
+  mv /tmp/is.xml.tmp /usr/share/mythtv/themes/defaultmenu/is.xml
+echo "Hulu Desktop has been added to Online Streams!"
+fi
+if [ -e /home/mythtv/.huludesktop ]
+then
+echo "Found existing Hulu configuration file."
+else
+cat >> /home/mythtv/.huludesktop << EOF
+[display]
+fullscreen = TRUE
+width = 1024
+height = 576
+pos_x = 201
+pos_y = 179
+
+[remote]
+lirc_device = /dev/lircd
+lirc_remote_identifier = mceusb
+lirc_release_suffix = _UP
+lirc_repeat_threshold = 10
+button_name_up = Up
+button_name_down = Down
+button_name_left = Left
+button_name_right = Right
+button_name_select = OK
+button_name_menu = Home
+
+[flash]
+flash_location = /usr/lib/mozilla/plugins/libflashplayer.so
+
+[screensaver]
+suspend_script = /usr/bin/xscreensaver-command -deactivate
+resume_script = /usr/bin/xscreensaver-command -activate
+
+[version]
+latest = (null)
+eula_version = 0
+EOF
+chown mythtv.mythtv /home/mythtv/.huludesktop
+fi
+echo "Integration of Hulu Desktop is now complete!"
+echo "Thanks for using LinHES!"
diff --git a/abs/core/linhes-scripts/limit-mythcommflag.sh b/abs/core/linhes-scripts/limit-mythcommflag.sh
index 8ca61c7..5cd81bb 100755
--- a/abs/core/linhes-scripts/limit-mythcommflag.sh
+++ b/abs/core/linhes-scripts/limit-mythcommflag.sh
@@ -1,6 +1,7 @@
 #!/bin/bash
-# limit-mythcommflag.sh   v0.1  05/17/09
-# Utility to automatically limit mythcommflag if CPU usage is above a certain level.
+# limit-mythcommflag.sh   v0.2  03/2/10
+# Utility to automatically limit mythcommflag if CPU system load is above a certain level
+# and if backend usage is above a certain level
 # Uses cpulimit from http://cpulimit.sourceforge.net/
 # Free for any use.
 # Installation:
@@ -8,47 +9,83 @@
 #  chmod +x /usr/LH/bin/limit-mythcommflag.sh
 # Usage: Executed from runit limit-mythcommflag at boot
 
-# Threshold for when mythcommflag will be paused
-CPUTHRESHOLD=43
-
-# Limit mythcommflag to percentage
-LIMITCPU=20
-
-# Log file to write (use /dev/null for no log)
-#LOG=/var/log/mythtv/limit-mythcommflag.log
-LOG=/dev/null
-
+#-----OPTIONS______
 # Number of seconds to wait between checking for mythcommflag process
 SLEEP=5
+# Backend and Frontend thresholds above which mythcommflag is stopped
+BETHRESHOLD=30
+FETHRESHOLD=55
 
-#sleep $SLEEP
+# FUNCTIONS
+limit_cpu()
+# Arg_1 = LimitedRangeNum; Arg_2 = CPULimitPercent; Arg_3 = Commflag PID
+{
+if [ $ALREADYLIMITED -ne $1 ] ; then
+    if [ $cpulimit_pid -ne 0 ]; then
+        kill $cpulimit_pid
+    fi
+    cpulimit -p $3 -l $2 &
+    cpulimit_pid=$!
+    ALREADYLIMITED=$1
+fi
+}
 
-touch $LOG
+stop_limit()
+{
+if [ $ALREADYLIMITED -ne 0 ]; then
+    if [ $cpulimit_pid -ne 0 ]; then
+        kill $cpulimit_pid
+        cpulimit_pid=0
+    fi
+    ALREADYLIMITED=0
+fi
+}
 
 ALREADYLIMITED=0
+STOPPED=0
+cpulimit_pid=0
 
 while true; do
     PROCCOMMFLAG=`pidof mythcommflag`
-    if [ -n "${PROCCOMMFLAG}" ]
-    then
-        FRONTENDCPU=`top -bn1u mythtv | grep mythfrontend | awk '{ print $9 }'`
-        if [ "$FRONTENDCPU" -ge "$CPUTHRESHOLD" ]
-        then
-            echo "$(date) FE CPU $FRONTENDCPU% is greater than $CPUTHRESHOLD%, LIMIT Commflagging" # >> $LOG
-            if [ $ALREADYLIMITED -eq 0 ]; then
-                cpulimit -e mythcommflag -l $LIMITCPU &
-		cpulimit_pid=$!
-                ALREADYLIMITED=1
+    if [ -n "${PROCCOMMFLAG}" ]; then
+        BACKENDCPU=`top -bn1u mythtv | grep -m 1 mythbackend | awk '{ print $9 }'`
+        FRONTENDCPU=`top -bn1u mythtv | grep -m 1 mythfrontend | awk '{ print $9 }'`
+        if [ "$FRONTENDCPU" = "" ]; then
+            FRONTENDCPU=0
+        fi
+        if [ "$BACKENDCPU" -ge "$BETHRESHOLD" ]; then
+            if [ "$FRONTENDCPU" -ge $FETHRESHOLD ]; then
+                if [ $STOPPED -eq 0 ]; then
+                    kill -s STOP $PROCCOMMFLAG
+                    STOPPED=1
+                fi
+            else
+                if [ $STOPPED -eq 1 ]; then
+                    kill -s CONT $PROCCOMMFLAG
+                    STOPPED=0
+                fi
+                stop_limit
             fi
         else
-            echo "$(date) FE CPU $FRONTENDCPU% is less than $CPUTHRESHOLD%, UNLIMIT Commflagging" #>> $LOG
-            if [ $ALREADYLIMITED -eq 1 ]; then
-	        kill $cpulimit_pid
-                ALREADYLIMITED=0
+            if [ $STOPPED -eq 1 ]; then
+                kill -s CONT $PROCCOMMFLAG
+                STOPPED=0
             fi
+            case $FRONTENDCPU in
+	        [0-9]|[0-3][0-9] )
+                stop_limit;;
+	        [4-5][0-9] ) 
+                limit_cpu "1" "70" $PROCCOMMFLAG;;
+	        [6-7][0-9] ) 
+                limit_cpu "2" "50" $PROCCOMMFLAG;;
+	        [8-9][0-9] ) 
+                limit_cpu "3" "20" $PROCCOMMFLAG;;
+	        [1][0-9][0-9] )
+                limit_cpu "4" "10" $PROCCOMMFLAG;;
+	        esac
         fi
 #    else
-#        echo "No COMMFLAG Process Active" >> $LOG
+#        echo "No COMMFLAG Process Active"
     fi
     sleep $SLEEP
 done
diff --git a/abs/core/linhes-scripts/linhes-scripts.install b/abs/core/linhes-scripts/linhes-scripts.install
new file mode 100644
index 0000000..f554bd0
--- /dev/null
+++ b/abs/core/linhes-scripts/linhes-scripts.install
@@ -0,0 +1,7 @@
+
+post_upgrade() {
+    . /etc/profile
+    /usr/LH/bin/remove_php_mythvideo.sh
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/core/linhes-scripts/linhes_update.sh b/abs/core/linhes-scripts/linhes_update.sh
index 3b455e0..39d2817 100644
--- a/abs/core/linhes-scripts/linhes_update.sh
+++ b/abs/core/linhes-scripts/linhes_update.sh
@@ -1,26 +1,27 @@
 #!/bin/bash
 dsply ()  {
-	if grep -q Updates\ Available /usr/share/mythtv/linhes.xml
+	if grep -q Updates\ Available /usr/share/mythtv/themes/defaultmenu/linhes.xml
 		then
-		killall osd_cat
+		killall -9 osd_cat
 		echo -e "Updates available!\n  Exit and reenter Service Menu\n to perform updates." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 10 -A centre
 		exit
 		else
+		killall -9 osd_cat
 		echo -e "Checking for updates." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 300 -A centre &
 	fi
 }
 chck ()  {
 	sudo pacman -Sy
-	sudo pacman -Qu > /tmp/check_update
-	sudo grep Target /tmp/check_update > /tmp/to_be_upgraded
+	sudo pacman -Qu > /tmp/to_be_upgraded
+#	sudo grep Target /tmp/check_update > /tmp/to_be_upgraded
 	if grep -q no\ upgrades\ found /tmp/check_update
 		then
-		killall osd_cat
+		killall -9 osd_cat
 		echo -e "No updates available\n at this time." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 5 -A centre
 		else
-		mv /usr/share/mythtv/linhes.xml /tmp/linhes.xml.tmp
-        sed -e '/\#Check/,/\#Check/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/linhes.xml
-        mv /usr/share/mythtv/linhes.xml /tmp
+		mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp/linhes.xml.tmp
+        sed -e '/\#Check/,/\#Check/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/themes/defaultmenu/linhes.xml
+        mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp
         grep -v -e /mythmenu /tmp/linhes.xml > /tmp/linhes.xml.tmp
   		echo "<!--#UpdatesAvailable-->" >> /tmp/linhes.xml.tmp
   		echo "   <button>" >> /tmp/linhes.xml.tmp
@@ -30,7 +31,7 @@ chck ()  {
   		echo "   </button>" >> /tmp/linhes.xml.tmp
   		echo "<!--#UpdatesAvailable-->" >> /tmp/linhes.xml.tmp
   		echo "</mythmenu>" >> /tmp/linhes.xml.tmp
-  		mv /tmp/linhes.xml.tmp /usr/share/mythtv/linhes.xml
+  		mv /tmp/linhes.xml.tmp /usr/share/mythtv/themes/defaultmenu/linhes.xml
   		dsply
 	fi
 	}
diff --git a/abs/core/linhes-scripts/linhes_update2.sh b/abs/core/linhes-scripts/linhes_update2.sh
index 20f32b9..80945eb 100644
--- a/abs/core/linhes-scripts/linhes_update2.sh
+++ b/abs/core/linhes-scripts/linhes_update2.sh
@@ -1,14 +1,16 @@
 #!/bin/bash
+killall -9 osd_cat
 echo -e "Performing updates." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 300000 -A centre & 
-sudo pacman -Syuf --noconfirm && sudo killall -9 osd_cat
-if grep -q Check\ for\ updates /usr/share/mythtv/linhes.xml
+sudo pacman -Suf --noconfirm && sudo killall -9 osd_cat
+if grep -q Check\ for\ updates /usr/share/mythtv/themes/defaultmenu/linhes.xml
 then
 rm -fr /tmp/to_be_upgraded
+killall -9 osd_cat
 echo -e "Update complete." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 5 -A centre
 else
-mv /usr/share/mythtv/linhes.xml /tmp/linhes.xml.tmp
-sed -e '/\#UpdatesAv/,/\#UpdatesAv/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/linhes.xml
-mv /usr/share/mythtv/linhes.xml /tmp
+mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp/linhes.xml.tmp
+sed -e '/\#UpdatesAv/,/\#UpdatesAv/d' < /tmp/linhes.xml.tmp > /usr/share/mythtv/themes/defaultmenu/linhes.xml
+mv /usr/share/mythtv/themes/defaultmenu/linhes.xml /tmp
 grep -v -e /mythmenu /tmp/linhes.xml > /tmp/linhes.xml.tmp
 echo "<!--#Check for updates-->" >> /tmp/linhes.xml.tmp
 echo "   <button>" >> /tmp/linhes.xml.tmp
@@ -19,7 +21,8 @@ echo "   </button>" >> /tmp/linhes.xml.tmp
 echo "<!--#Check for updates-->" >> /tmp/linhes.xml.tmp
 echo "" >> /tmp/linhes.xml.tmp
 echo "</mythmenu>" >> /tmp/linhes.xml.tmp
-mv /tmp/linhes.xml.tmp /usr/share/mythtv/linhes.xml
+mv /tmp/linhes.xml.tmp /usr/share/mythtv/themes/defaultmenu/linhes.xml
 rm -fr /tmp/to_be_upgraded
+killall -9 osd_cat
 echo -e "Update complete." | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 5 -A centre
 fi
diff --git a/abs/core/linhes-scripts/linhes_update3.sh b/abs/core/linhes-scripts/linhes_update3.sh
index 56e8612..5dc0b4d 100644
--- a/abs/core/linhes-scripts/linhes_update3.sh
+++ b/abs/core/linhes-scripts/linhes_update3.sh
@@ -8,3 +8,10 @@ if [ $COUNT -lt 20 ]
 	else
 	cat /tmp/to_be_upgraded2 | osd_cat -p top -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 1 -A centre -l 20 -w
 fi
+if grep kernel26 /tmp/to_be_upgraded2
+then
+	killall -9 osd_cat
+	echo -e "Please note:\The kernel will be upgraded.\nThis will require a reboot.\nPlease do so when no jobs are running." | osd_cat -p middle -s 5 -f"-adobe-courier-bould-*-*-*-34-*-*-*-*-*" -d 10 -A centre
+else
+	exit
+fi
diff --git a/abs/core/linhes-scripts/myth2fuze b/abs/core/linhes-scripts/myth2fuze
new file mode 100755
index 0000000..9e8fc3c
--- /dev/null
+++ b/abs/core/linhes-scripts/myth2fuze
@@ -0,0 +1,318 @@
+#!/bin/bash
+# convert recording to avi compatable with San Disk Sansa Fuze
+# Based on and/or inspired by myth2xvid, the video4fuze project:
+# http://code.google.com/p/video4fuze
+# and the fuzemux project:
+# http://code.google.com/p/fuzemux
+#
+# version 0.2
+#
+# usage:
+# first parameter must be %DIR%/%FILE% of the recording
+# second parameter must be the %TITLE% for the output filename
+# third parameter must be the %SUBTITLE% for the output filename
+# fourth parameter must be %CHANID% if you set USECUTLIST=Y
+# fifth parameter must be %STARTTIME% for USECUTLIST=Y and output filename
+# sixth parameter must be %JOBID% for the User Job status to be updated
+# in MythTV
+# In the mythtv setup screen invoke this script like this:
+# MYTHTV User Job Command:
+# /usr/LH/bin/myth2fuze "%DIR%/%FILE%" "%TITLE%" "%SUBTITLE%" "%CHANID%" "%STARTTIME%" "%JOBID%"
+
+# options:
+USECUTLIST=Y		# Y or N
+
+# check prerequesites
+for APP in {fuzemux,mencoder,ffmpeg,mythcommflag,mythtranscode,mysql}; do
+   /usr/bin/which ${APP} &>/dev/null
+   ERROR=$?
+   if [ $ERROR -ne 0 ]; then
+      echo "${APP} not found in your PATH! Aborting! ERROR: ${ERROR}" >> ${LOGFILE}
+      update_status 304
+      update_comment "${APP} not found in your PATH! Aborting! Exit status: ${ERROR}"
+      exit 1
+   fi
+done
+
+# where the converted video is stored
+OUT_DIR=/myth/video/fuze
+
+# Ensure output directory exists
+if [ ! -d ${OUT_DIR} ] ; then
+  mkdir -p -m777 ${OUT_DIR}
+fi
+
+# database settings
+BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"}
+DBUSERNAME=${DBUSERNAME:-"mythtv"}
+DBPASSWORD=${DBPASSWORD:-"mythtv"}
+SQLCMD="mysql -u ${DBUSERNAME} --password=${DBPASSWORD} -h ${BACKEND_HOSTNAME} mythconverg -e"
+
+# create temp filename so multiple instances won't conflict
+TMPNAME=toFUZE-$$
+TMPDIR=/myth/tmp
+TMPFILE=${TMPDIR}/${TMPNAME}.avi
+TMPCUTFILE=${TMPDIR}/${TMPNAME}.mpg
+MENINPUTFILE=${1}
+TWOPASSFILE=/tmp/${TMPNAME}-2pass.log
+STATUSFILE=/tmp/${TMPNAME}-status.log
+MENCODER_RETURN_CODE=/tmp/${TMPNAME}-mencoder_return_code
+MENCODER_RETURN_CODE_2=/tmp/${TMPNAME}-mencoder_return_code_2
+
+# Ensure temp directory exists
+if [ ! -d ${TMPDIR} ] ; then
+  mkdir -p -m777 ${TMPDIR}
+fi
+
+#------FUNCTIONS---------------
+update_comment()
+# Arg_1 = COMMENT
+{
+if [ ${NO_JOBID} = 0 ]; then
+    `${SQLCMD} "update jobqueue set comment=\"${1}\" where id=\"${JOBID}\";"`
+fi
+}
+
+update_status()
+# Arg_1 = status code
+{
+if [ ${NO_JOBID} = 0 ]; then
+    `${SQLCMD} "update jobqueue set status=\"${1}\" where id=\"${JOBID}\";"`
+fi
+}
+
+check_background_progress()
+# check mencoder progress in background
+# Arg_1 = PROGRESS CALCULATION
+{
+while [ `tail -1 ${STATUSFILE} | grep -cE "^Audio stream:|^Video stream:"` = 0 ]
+do
+    sleep 10
+    check_myth_jobcmds
+    current_status=`tail -1 ${STATUSFILE} | grep "([ 0-9]\{1,\}%)"`
+    prog_percent=`echo ${current_status} | sed 's_.*(\([ 0-9][ 0-9]\)%).*_\1_'`
+    current_FPS=`echo ${current_status} | sed 's_.*\([ 0-9][ 0-9].[ 0-9][ 0-9]\)fps.*_\1_'`
+    if [ -n ${prog_percent} ]; then
+        prog_percent=`expr ${prog_percent} / ${1}`
+        echo "${prog_percent}% Completed @ ${current_FPS} fps"
+        update_comment "${prog_percent}% Completed @ ${current_FPS} fps"
+    fi
+    sleep 10
+done
+}
+
+check_myth_jobcmds()
+# check the myth database for stop pause or resume commands
+{
+if [ ${NO_JOBID} = 0 ]; then
+    CURRENT_CMD=`${SQLCMD} "select cmds from jobqueue where id=\"${JOBID}\";" | sed '/[0-9]/!d'`
+    case ${CURRENT_CMD} in
+	# JOB_RUN
+	0) ;;
+	# JOB_PAUSE
+	1) update_status 6
+	   kill -s STOP ${mencoder_pid} ;;
+	# JOB_RESUME
+	2) update_status 4
+       `${SQLCMD} "update jobqueue set cmds=\"0\" where id=\"${JOBID}\";"`
+       kill -s CONT ${mencoder_pid} ;;
+	# JOB_STOP
+	4) update_status 5
+	   `${SQLCMD} "update jobqueue set cmds=\"0\" where id=\"${JOBID}\";"`
+       kill -9 ${mencoder_pid} ${command_pid}
+       clean_up_files
+       echo "Encode Cancelled" >> ${LOGFILE}
+       update_status 320
+ 	   exit ;;
+    esac
+fi
+}
+
+get_mencoder_pid()
+{
+process_name=""
+i1=1
+while [ "$process_name" != "found" ]; do
+   if [ "`ps ${mencoder_pid} | grep mencoder | sed 's_.*\(mencoder\).*_\1_'`" = "mencoder" ]; then
+      process_name="found"
+   else
+      mencoder_pid=`expr ${mencoder_pid} + 1`
+   fi
+   i1=`expr $i1 + 1`
+   if [ $i1 -gt 20 ]; then
+      break
+   fi
+done
+}
+
+run_fuzemux()
+# Remux avi to fuze compatable avi
+{
+/usr/bin/nice -n19 /usr/bin/fuzemux ${TMPFILE} ${OUTPUTFILE} >> ${LOGFILE} || return 1
+}
+
+create_thumbnail()
+# Create a thumbnail image for the fuze
+{
+/usr/bin/nice -n19 /usr/bin/ffmpeg -y -v -1 -i ${OUTPUTFILE} -t 1 -ss 3 \
+-s 224x176 -f image2 ${OUTPUTFILE%.*}.thm >> ${LOGFILE}
+}
+
+clean_up_files()
+# clean up left over files
+{
+unlink ${TMPFILE} 2> /dev/null
+unlink ${TMPCUTFILE} 2> /dev/null
+unlink ${TMPCUTFILE}.map 2> /dev/null
+unlink ${TWOPASSFILE} 2> /dev/null
+unlink ${TWOPASSFILE}.tmp 2> /dev/null
+unlink ${STATUSFILE} 2> /dev/null
+unlink ${MENCODER_RETURN_CODE} 2> /dev/null
+unlink ${MENCODER_RETURN_CODE_2} 2> /dev/null
+}
+
+#-------MAIN SCRIPT------------
+
+# check if %JOBID% is passed from command line
+JOBID=${6}
+if [ -z ${JOBID} ]; then
+    NO_JOBID=1
+else
+    NO_JOBID=0
+fi
+
+# log file location
+LOGFILE=/var/log/mythtv/myth2fuze.log
+CDate="`date`"
+echo "" >> ${LOGFILE}
+echo ${CDate} >> ${LOGFILE}
+echo "File to encode: ${MENINPUTFILE}     Name: ${2} - ${3}" >> ${LOGFILE}
+
+# start timer
+beforetime="$(date +%s)"
+
+check_myth_jobcmds
+
+# check if using cutlist
+if [ ${USECUTLIST} = Y ]; then
+    MYTHCOMMFRAMES=$( mythcommflag --getcutlist -f ${MENINPUTFILE} | grep 'Cutlist:' | cut -d \  -f 2 )
+    if [ -n "$MYTHCOMMFRAMES" ]; then
+        echo "Extracting Cutlist..." >> ${LOGFILE}
+        update_comment "Extracting Cutlist"
+        /usr/bin/nice -n19 /usr/bin/mythtranscode --chanid ${4} --starttime ${5} --outfile ${TMPCUTFILE} --mpeg2 --honorcutlist
+        MENINPUTFILE=${TMPCUTFILE}
+    fi
+fi
+
+# run mencoder in background to do 1st pass conversion
+echo "Encoding 1st Pass for the Fuze..." >> ${LOGFILE}
+( /usr/bin/nice -n19 /usr/bin/mencoder ${MENINPUTFILE} -passlogfile \
+${TWOPASSFILE} -ffourcc DX50 -ofps 20 \
+-vf pp=li,expand=:::::224/176,scale=224:176,harddup -ovc lavc \
+-lavcopts vcodec=mpeg4:vbitrate=683:vmax_b_frames=0:keyint=15:turbo:vpass=1 \
+-nosound -o /dev/null > ${STATUSFILE} 2>&1 ; echo $? > \
+${MENCODER_RETURN_CODE} ) &
+mencoder_pid=$!
+command_pid=${mencoder_pid}
+get_mencoder_pid
+
+check_background_progress "2"
+
+if [ `cat ${MENCODER_RETURN_CODE}` -ne 0 ]; then
+   echo "Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE}.  Encoding failed!"
+   update_status 304
+   update_comment "ERROR: Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE}"
+   clean_up_files
+   exit 1
+fi
+
+# run mencoder in background to do 2nd pass conversion
+echo "Encoding 2nd Pass for the Fuze..." >> ${LOGFILE}
+( /usr/bin/nice -n19 /usr/bin/mencoder ${MENINPUTFILE} -passlogfile \
+${TWOPASSFILE} -ffourcc DX50 -ofps 20 \
+-vf pp=li,expand=:::::224/176,scale=224:176,harddup -ovc lavc \
+-lavcopts vcodec=mpeg4:vbitrate=683:vmax_b_frames=0:keyint=15:vpass=2 \
+-srate 44100 -af resample=44100:0:1,format=s16le -oac mp3lame \
+-lameopts cbr:br=128 -o ${TMPFILE} > ${STATUSFILE} 2>&1 ; echo $? \
+> ${MENCODER_RETURN_CODE_2} ) &
+mencoder_pid=$!
+command_pid=${mencoder_pid}
+get_mencoder_pid
+
+check_background_progress "2 + 50"
+
+if [ `cat ${MENCODER_RETURN_CODE_2}` -ne 0 ]; then
+   echo "Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE}.  Encoding failed!"
+   update_status 304
+   update_comment "ERROR: Mencoder pass #1 exited with error ${MENCODER_RETURN_CODE_2}"
+   clean_up_files
+   exit 1
+fi
+
+# make output filename unique, remove punctuation and "special" characters,
+# replace spaces with underscores and force lowercase names
+OAD=$( echo ${5} | cut -b 1-8 )
+FILENAME=$( echo "${2} ${OAD} ${3}" | tr -d '[:punct:]' \
+          | tr -s '[:blank:]' '[_]' | tr '[:upper:]' '[:lower:]' )_fuze.avi
+
+OUTPUTFILE=${OUT_DIR}/${FILENAME}
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+   echo "Setting output file name exited with error ${ERROR}" >> ${LOGFILE}
+   update_status 304
+   update_comment "ERROR: Setting output file name exited with error ${ERROR}  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+run_fuzemux
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+   echo "Fuzemux exited with error ${ERROR}" >> ${LOGFILE}
+   update_status 304
+   update_comment "ERROR: Fuzemux exited with error ${ERROR}  Job Failed!"
+   clean_up_files
+   exit 1
+fi
+
+# ensure mythtv owns the final avi
+chown mythtv ${OUTPUTFILE}
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+   echo "Changing ownership of avi to mythtv exited with error ${ERROR}"
+   update_status 304
+   update_comment "ERROR: Changing ownership of avi to mythtv exited with error ${ERROR}  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+create_thumbnail
+
+# ensure mythtv owns the thumbnail
+chown mythtv ${OUTPUTFILE%.*}.thm
+ERROR=$?
+
+if [ ${ERROR} -ne 0 ]; then
+   echo "Changing ownership of thumbnail to mythtv exited with error ${ERROR}"
+   update_status 304
+   update_comment "ERROR: Changing ownership of thumbnail to mythtv exited with error ${ERROR}  Job failed!"
+   clean_up_files
+   exit 1
+fi
+
+# stop timer
+aftertime="$(date +%s)"
+seconds="$(expr $aftertime - $beforetime)"
+    echo "File Encoded Successfully: ${OUTPUTFILE}" >> ${LOGFILE}
+    hours=$((seconds / 3600))
+    seconds=$((seconds % 3600))
+    minutes=$((seconds / 60))
+    seconds=$((seconds % 60))
+    echo "Encoding took $hours hour(s) $minutes minute(s) $seconds second(s) @ $current_FPS fps." >> ${LOGFILE}
+    update_status 272
+    update_comment "Encode Successful. Encoding Time: $hours hour(s) $minutes minute(s) $seconds second(s)"
+
+clean_up_files
diff --git a/abs/core/linhes-scripts/mythwelcome-config.py b/abs/core/linhes-scripts/mythwelcome-config.py
new file mode 100755
index 0000000..c7bf10b
--- /dev/null
+++ b/abs/core/linhes-scripts/mythwelcome-config.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+# This script will configure the myth db to allow MythWelcome to wake and shutdown the system.
+
+from socket import gethostname
+from MythTV import MythDB
+mythdb = MythDB()
+localhostname = gethostname()
+
+# mythwelcome --setup
+mythdb.settings[localhostname].MythShutdownNvramCmd = u'sudo sh -c \"/usr/LH/bin/mythwelcome-set-alarm.sh $time\"'
+mythdb.settings[localhostname].MythShutdownWakeupTimeFmt = u'time_t'
+mythdb.settings[localhostname].MythShutdownNvramRestartCmd = u''
+mythdb.settings[localhostname].MythShutdownReboot = u'sudo /sbin/reboot'
+mythdb.settings[localhostname].MythShutdownPowerOff = u'sudo /sbin/poweroff'
+mythdb.settings[localhostname].MythShutdownXTermCmd = u'xterm'
+mythdb.settings[localhostname].MythWelcomeStartFECmd = u'/usr/LH/bin/mythfrontend-start'
+
+
+# mythtv-setup Shutdown/Wakeup options
+if mythdb.settings[localhostname].idleTimeoutSecs == u'0':
+    mythdb.settings[localhostname].idleTimeoutSecs = u'40'
+
+mythdb.settings.NULL.WakeupTimeFormat = u'yyyy-MM-ddThh:mm:ss'
+mythdb.settings.NULL.SetWakeuptimeCommand = u'/usr/bin/mythshutdown --setwakeup $time'
+mythdb.settings.NULL.ServerHaltCommand = u'/usr/bin/mythshutdown --shutdown'
+mythdb.settings.NULL.preSDWUCheckCommand = u'/usr/bin/mythshutdown --check'
diff --git a/abs/core/linhes-scripts/mythwelcome-set-alarm.sh b/abs/core/linhes-scripts/mythwelcome-set-alarm.sh
index 6dbd39e..990adf7 100755
--- a/abs/core/linhes-scripts/mythwelcome-set-alarm.sh
+++ b/abs/core/linhes-scripts/mythwelcome-set-alarm.sh
@@ -13,7 +13,7 @@
 
 # Configure mythtv-setup Shutdown/Wakeup Options page:
 # Idletimeout (secs):             any value greater that 0
-# Wakeup time format:             yyyy-MM-dd:hh:mm
+# Wakeup time format:             yyyy-MM-ddThh:mm:ss
 # Set wakeup time command:        /usr/bin/mythshutdown --setwakeup $time
 # Server Halt command:            /usr/bin/mythshutdown --shutdown
 # Pre shutdown check command:     /usr/bin/mythshutdown --check 
diff --git a/abs/core/linhes-scripts/qip7100-cc.sh b/abs/core/linhes-scripts/qip7100-cc.sh
new file mode 100755
index 0000000..029e25c
--- /dev/null
+++ b/abs/core/linhes-scripts/qip7100-cc.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+#Script to control DCT 700/2524 on emitter #1 of CommandIR
+irsend set_transmitters 2
+sleep .5
+#REMOTE_NAME=DCT2524
+REMOTE_NAME=Motorola_QIP6200-2
+cmd="$1"
+
+case $cmd in
+    [0-9]*)
+    for digit in $(echo $1 | sed -e 's/./& /g'); do 
+        irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME $digit
+        sleep .4
+        # If things work OK with sleep 1, try this for faster channel changes:
+        sleep 0.3
+    done
+        irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME ok
+sleep .3
+        irsend -d /dev/lircd SEND_ONCE $REMOTE_NAME exit
+    ;;
+
+    *)
+        irsend SEND_ONCE $REMOTE_NAME $cmd
+        ;;
+esac
diff --git a/abs/core/linhes-scripts/remove_php_mythvideo.sh b/abs/core/linhes-scripts/remove_php_mythvideo.sh
new file mode 100644
index 0000000..d9d53a0
--- /dev/null
+++ b/abs/core/linhes-scripts/remove_php_mythvideo.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+. /etc/systemconfig
+
+if [ $SystemType != Frontend_only ] && [ $SystemType != Slave_backend ] ; then
+
+mysql mythconverg <<EOF
+delete from videotypes where extension='php';
+insert into videotypes(extension,f_ignore) values('php','1');
+EOF
+
+else
+    exit 0
+fi
diff --git a/abs/core/linhes-scripts/removecommercials.sh b/abs/core/linhes-scripts/removecommercials.sh
new file mode 100755
index 0000000..70e2e52
--- /dev/null
+++ b/abs/core/linhes-scripts/removecommercials.sh
@@ -0,0 +1,213 @@
+#!/bin/sh
+# remove commercials from recordings using the user generated cutlist or
+# optionally using the mythcommflag generated cutlist.
+# version 0.2  3/24/2010
+
+# usage:
+# first parameter must be %DIR% of the recording
+# second parameter must be %FILE% of the recording
+# third parameter must be %CHANID%
+# fourth parameter must be %STARTTIME%
+# fifth parameter must be %JOBID% for the User Job status to be updated in MythTV
+# in the mythtv setup screen invoke this script like this:
+# MYTHTV User Job Command:
+# /usr/LH/bin/removecommercials.sh "%DIR%" "%FILE%" "%CHANID%" "%STARTTIME%" "%JOBID%"
+
+#-------OPTIONS----------------
+# If no cutlist is found USE_MYTHCOMMFLAG_CUTLIST=YES will use mythcommflag 
+#          to generate a cutlist.
+# WARNING: Using this option could result in part of the recording being cut if 
+#          mythcommflag incorrectly flagged the commercial.
+USE_MYTHCOMMFLAG_CUTLIST=NO
+
+# Auguments passed from command line
+VIDEODIR=$1
+FILENAME=$2
+CHANID=$3
+STARTTIME=$4
+JOBID=$5
+
+# database settings
+BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"}
+DBUSERNAME=${DBUSERNAME:-"mythtv"}
+DBPASSWORD=${DBPASSWORD:-"mythtv"}
+SQLCMD="mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e"
+
+LOG="/var/log/mythtv/removecommercials.log"
+
+#------FUNCTIONS---------------
+update_comment()
+# Arg_1 = COMMENT
+{
+if [ $NO_JOBID = 0 ]; then
+    `$SQLCMD "update jobqueue set comment=\"$1\" where id=\"$JOBID\";"`
+fi
+}
+
+update_status()
+# Arg_1 = status code
+{
+if [ $NO_JOBID = 0 ]; then
+    `$SQLCMD "update jobqueue set status=\"$1\" where id=\"$JOBID\";"`
+fi
+}
+
+check_myth_jobcmds()
+# check the myth database for stop pause or resume commands
+{
+if [ $NO_JOBID = 0 ]; then
+    CURRENT_CMD=`$SQLCMD "select cmds from jobqueue where id=\"$JOBID\";" | sed '/[0-9]/!d'`
+    case "$CURRENT_CMD" in
+	# JOB_RUN
+	0) ;;
+	# JOB_PAUSE
+	1) update_status 6 
+	    kill -s STOP $TPID ;;
+	# JOB_RESUME
+	2) update_status 4
+       `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"` 
+       kill -s CONT $TPID ;;
+	# JOB_STOP
+	4) update_status 5
+	   `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"`
+	   kill -9 $TPID
+       clean_up_files
+       echo "Cancelled"
+       update_status 320
+ 	   exit ;;
+    esac
+fi
+}
+
+check_background_progress()
+#check progress in background
+{
+while [ `tail -1 $STATUSFILE | grep -c "Done"` = 0 ]
+do
+    sleep 5
+    check_myth_jobcmds
+    current_status=`tail -1 $STATUSFILE`
+    if [ `expr match "$current_status" '.*\complete'` -ne 0 ]; then
+        prog_percent=`echo "$current_status" | awk '{print $3}'`
+        if [ -n "$prog_percent" ]; then
+            echo "Removing Commercials - $prog_percent Completed"
+            update_comment "Removing Commercials - $prog_percent Completed"
+        fi
+    fi
+done
+}
+
+get_pid()
+{
+process_name=""
+i1=1
+while [ "$process_name" != "found" ]; do
+   if [ "`ps $TPID | grep mythtranscode | sed 's_.*\(mythtranscode\).*_\1_'`" = "mythtranscode" ]; then
+      process_name="found"
+   else
+      TPID=`expr $TPID + 1`
+   fi
+   i1=`expr $i1 + 1`
+   if [ $i1 -gt 20 ]; then
+      break
+   fi
+done
+}
+
+clean_up_files()
+# clean up left over files
+{
+unlink $TMPFILE 2> /dev/null
+unlink $TMPFILE.map 2> /dev/null
+unlink $STATUSFILE 2> /dev/null
+unlink $VIDEODIR/$FILENAME.tmp 2> /dev/null
+}
+
+#-------MAIN SCRIPT------------
+# check if %JOBID% is passed from command line
+JOBID=$5
+if [ -z "$JOBID" ]; then
+    NO_JOBID=1
+else
+    NO_JOBID=0
+fi
+# check if file is a .mpg
+if [ `expr match "$FILENAME" '.*\.mpg'` -ne 0 ]; then
+    MPEG="--mpeg2"
+else
+    MPEG=""
+fi
+
+# create temp filename so multiple instances won't conflict
+TMPNAME=rmvCOMMS-$$
+TMPFILE=$VIDEODIR/$FILENAME-$$
+STATUSFILE=/myth/tmp/$TMPNAME-status.log
+
+touch $STATUSFILE
+
+update_status 4
+
+check_myth_jobcmds
+
+# check for cutlist
+MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $VIDEODIR/$FILENAME | grep 'Cutlist:' | cut -d \  -f 2`
+
+if [ $USE_MYTHCOMMFLAG_CUTLIST=YES ] && [ -z "$MYTHCOMMFRAMES" ]; then
+    echo "Generating cutlist..."
+    update_comment "Generating cutlist..."
+    /usr/bin/nice -n19 /usr/bin/mythcommflag --gencutlist -f $VIDEODIR/$FILENAME
+    MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $VIDEODIR/$FILENAME | grep 'Cutlist:' | cut -d \  -f 2`
+fi
+
+if [ -n "$MYTHCOMMFRAMES" ]; then
+    echo "Removing Commercials..."
+    update_comment "Removing Commercials..."
+    ( /usr/bin/nice -n19 /usr/bin/mythtranscode -c $CHANID -s $STARTTIME -o $TMPFILE $MPEG --honorcutlist --showprogress > $STATUSFILE 2>&1 ; echo "Done" >> $STATUSFILE ) &
+    TPID=$!
+    get_pid
+    check_background_progress
+    ERROR=$?
+    if [ $ERROR -ne 0 ]; then
+        echo "Transcoding failed for ${FILENAME} with error $ERROR"
+        exit $ERROR
+    fi
+
+    check_myth_jobcmds
+    # move temp file to output location
+    echo "Moving file..."
+    update_comment "Moving file..."
+    if [ `$SQLCMD "select data from settings where value='SaveTranscoding';" | sed '/[0-9]/!d'` = 1 ]; then
+        echo "DB is set to save transcoding"
+        mv $VIDEODIR/$FILENAME $VIDEODIR/$FILENAME.old
+    fi
+    mv $TMPFILE $VIDEODIR/$FILENAME
+
+    # file has changed, rebuild index
+    echo "Rebuilding index..."
+    update_comment "Rebuilding index..."
+    mythcommflag -c $CHANID -s $STARTTIME --rebuild
+    ERROR=$?
+    if [ $ERROR -ne 0 ]; then
+        echo "Rebuilding seek list failed for ${FILENAME} with error $ERROR"
+        exit $ERROR
+    fi
+
+    # remove old cutlist
+    echo "Removing old cutlist..."
+    update_comment "Removing old cutlist..."
+    mythcommflag -c $CHANID -s $STARTTIME --clearcutlist
+    ERROR=$?
+    if [ $ERROR -eq 0 ]; then
+        # Fix the database entry for the file
+        `$SQLCMD UPDATE recorded SET cutlist = 0, filesize = $(ls -l $VIDEODIR/$FILENAME | awk '{print $5}') WHERE basename = '$FILENAME';` > /dev/null
+    else
+        echo "Clearing cutlist failed for ${FILENAME} with error $ERROR"
+        exit $ERROR
+    fi
+    clean_up_files
+    echo "Commercials Removed"
+    update_status 272
+    update_comment "Sucessfully Completed." 
+else
+    echo "No cutlist found."
+fi
diff --git a/abs/core/linhes-scripts/screenshooter.sh b/abs/core/linhes-scripts/screenshooter.sh
index 94ea6fd..3bacac1 100755
--- a/abs/core/linhes-scripts/screenshooter.sh
+++ b/abs/core/linhes-scripts/screenshooter.sh
@@ -135,7 +135,7 @@ if [ "$EXTENSION_CHECK" == "1" ]; then
 	#    if [ "$VERBOSE" == "1" ]; then
 	#     echo "Importing $VIDEO_FILENAME in to database."
 	#    fi
-	#    mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "insert into videometadata (intid, title, director, plot, rating, inetref, year, userrating, length, showlevel, filename, coverfile, childid, browse, playcommand, category) values (' ', '$VIDEO_FILENAME', 'Unknown', 'Unknown', 'NR', '00000000', 1895, 0.0, 0, 1, '$VIDEO_PATHNAME', 'No Cover', -1, 1, ' ', 0);"
+	#    mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -sNBe "insert into videometadata (intid, title, director, plot, rating, inetref, year, userrating, length, showlevel, filename, coverfile, childid, browse, playcommand, category) values (' ', '$VIDEO_FILENAME', 'Unknown', 'Unknown', 'NR', '00000000', 1895, 0.0, 0, 1, '$VIDEO_PATHNAME', '', -1, 1, ' ', 0);"
 	fi
     fi
 fi
@@ -145,7 +145,7 @@ if [ "$CLOBBER" -eq 0 ]; then
     SQL_CMD="select coverfile from videometadata where filename=\"$VIDEO_PATHNAME\";"
     CURRENT_COVERFILE=`mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -B -e "$SQL_CMD" | tail -1`
     
-    if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != "No Cover" ]]; then
+    if [[ "$CURRENT_COVERFILE" != "" ]] && [[ "$CURRENT_COVERFILE" != "" ]]; then
   	  # there's already a cover file for this video
   	if [ "$VERBOSE" == "1" ]; then 
 	    echo "$VIDEO_FILENAME has cover file, skipping."
diff --git a/abs/core/linhes-scripts/shootscreens-mythtv.sh b/abs/core/linhes-scripts/shootscreens-mythtv.sh
index db01147..111b980 100755
--- a/abs/core/linhes-scripts/shootscreens-mythtv.sh
+++ b/abs/core/linhes-scripts/shootscreens-mythtv.sh
@@ -1,11 +1,19 @@
 #! /bin/bash 
-# available sizes: 34, 25, 24, 20, 18, 17, 14, 12, 11, 10
-export FONT="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+
+. /etc/osd_cat.cfg || {
+	color=yellow
+	outline=2
+	outlinecolour=black
+	shadow=0
+	shadowcolour=black
+	font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
+
 echo "This could take several minutes," > /tmp/screens
 echo "depending on your hardware and the" >> /tmp/screens
 echo "number and type of videos you have." >> /tmp/screens
 echo "It will only work on videos scanned" >> /tmp/screens
 echo "with Video Manager." >> /tmp/screens 
-cat /tmp/screens | osd_cat --font=$FONT --shadow=3 --pos=middle --align=centre --offset=200 --color=yellow --delay=0 &
+cat /tmp/screens | osd_cat --pos=middle --align=center --delay=0 --offset=200 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
 shootscreens.sh 1
 /bin/rm -f /tmp/screens
\ No newline at end of file
diff --git a/abs/core/linhes-scripts/shootscreens.sh b/abs/core/linhes-scripts/shootscreens.sh
index 7b1260c..bb45252 100755
--- a/abs/core/linhes-scripts/shootscreens.sh
+++ b/abs/core/linhes-scripts/shootscreens.sh
@@ -10,6 +10,14 @@
 
 if [ "$1" == "1" ]; then
     OSD=1
+    . /etc/osd_cat.cfg || {
+        color=yellow
+        outline=2
+        outlinecolour=black
+        shadow=0
+        shadowcolour=black
+        font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+    }
 else
     OSD=0
 fi
@@ -23,15 +31,14 @@ fi
     increment=$(expr 100 / $vidcount)
     for vid in `mysql -u root mythconverg -B -e "select filename from videometadata where coverfile=\"No Cover\";" | grep -v -e "^filename$"`
     do
-      if [ $OSD == 1 ]; then
-	osd_cat --barmode=percentage --percentage=$percentage --pos=middle --align=center --color=white --text="Generating Video Thumbnails..." --font=$FONT --shadow=3 --color=yellow --delay=0 &
-	percentage=$(expr $percentage + $increment)
-      fi
-
-      screenshooter.sh -v $vid
+    	if [ $OSD == 1 ]; then
+            osd_cat --barmode=percentage --percentage=$percentage --pos=middle --align=center --text="Generating Video Thumbnails..." --delay=0 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
+            percentage=$(expr $percentage + $increment)
+        fi
+        screenshooter.sh -v $vid
     done
     if [ $OSD == 1 ]; then
-	killall -9 osd_cat
-	osd_cat --barmode=percentage --percentage=100 --pos=middle --align=center --color=white --text="Video Thumbnails Generated!" --font=$FONT --shadow=3 --color=yellow --delay=3 &
+        killall -9 osd_cat
+        osd_cat --barmode=percentage --percentage=100 --pos=middle --align=center --text="Video Thumbnails Generated!" --delay=3 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font &
     fi
 }
\ No newline at end of file
diff --git a/abs/core/linhes-scripts/system-cleanup.sh b/abs/core/linhes-scripts/system-cleanup.sh
new file mode 100755
index 0000000..59a4ebb
--- /dev/null
+++ b/abs/core/linhes-scripts/system-cleanup.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# This script cleans up some SVN stuff that the build process leaves
+# in /usr/share/mythtv, along with ownership and file permsisions on the
+# themes and the mythstream stuff.  There are bunch of files which are
+# left executable for no good reason, although I can think of several
+# potentially bad reasons for it.
+
+find /usr/share/mythtv -name .svn -print0 | xargs -0 rm -rf
+find /usr/share/mythtv -name CVS -print0 | xargs -0 rm -rf
+
+THEMES=/usr/share/mythtv/themes
+
+chown -R root:root $THEMES
+chmod -R +r $THEMES
+find $THEMES -type f -print0 | xargs -0 chmod a-x
+
+
+chown -R mythtv:users /myth
+chown -R root:root /myth/backup/
+chown -R root:root /etc/sv
+
+chown -R http:users /data/srv/httpd/
+
+# None of thes files should be executable.
+for ext in gif png jpg xml htm html php ; do
+    find / -type f -name "*.$ext" -print0 | xargs -0 chmod a-x
+done
+
+# These files should be owned by root and not writable to anybody else
+
+#chown root:root /usr/share/mythtv/*.xml /usr/share/mythtv/*.ttf
+chown root:root /usr/share/mythtv/*.ttf
+
+chown -R root:root \
+    /usr/share/mythtv/i18n \
+    /usr/share/mythtv/mytharchive \
+    /usr/share/mythtv/mythflix \
+    /usr/share/mythtv/mythnews \
+    /usr/share/mythtv/mythvideo \
+    /usr/share/mythtv/mythweather \
+    /usr/LH 
+
+
+
+# Report any remaining orphans...
+find / /myth -xdev \( -nouser -o -nogroup \) -ls
diff --git a/abs/core/linhes-scripts/update_schema_021_to_022.sh b/abs/core/linhes-scripts/update_schema_021_to_022.sh
new file mode 100644
index 0000000..4157fb4
--- /dev/null
+++ b/abs/core/linhes-scripts/update_schema_021_to_022.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+mysql mythconverg <<EOF
+update gameplayers set commandline = '/usr/bin/sdlmame -rp /myth/games/xmame/roms %s' where commandline = '/usr/game/mame -rp /myth/games/xmame/roms %s';
+update settings set data = '/myth/video_stuff/coverart' where value = 'VideoArtworkDir';
+update settings set data = '/myth/video_stuff/fanart' where value = 'mythvideo.fanartDir';
+update settings set data = '/myth/video_stuff/screenshots' where value = 'mythvideo.screenshotDir';
+update settings set data = '/myth/video_stuff/banners' where value = 'mythvideo.bannerDir';
+update settings set data = '/myth/video_stuff/trailers' where value = 'mythvideo.TrailersDir';
+update settings set data = '1' where value = 'mythvideo.TrailersRandomEnabled';
+update settings set data = '1' where value = 'mythvideo.EnableAlternatePlayer';
+update settings set data = '/myth/video_stuff/screenshots' where value = 'ScreenShotPath';
+update settings set data = '/myth/games/screenshots' where value = 'mythgame.screenshotdir';
+update settings set data = '/myth/games/fanart' where value = 'mythgame.fanartdir';
+update settings set data = '/myth/games/boxart' where value = 'mythgame.boxartdir';
+update settings set data = '3' where value = 'OverrideExitMenu';
+update settings set data = 'sudo sv start mythbackend' where value = 'BackendStartCommand';
+update settings set data = 'sudo sv stop mythbackend' where value = 'BackendStopCommand';
+update settings set data = '/usr/share/mythtv/mythvideo/scripts/tmdb.pl -M' where value = 'MovieListCommandLine';
+update settings set data = replace(data, 'imdb.pl', 'tmdb.pl');
+EOF
diff --git a/abs/core/linhes-scripts/upgrade_linhes.sh b/abs/core/linhes-scripts/upgrade_linhes.sh
new file mode 100755
index 0000000..91a46e6
--- /dev/null
+++ b/abs/core/linhes-scripts/upgrade_linhes.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+#Script to facilitate easy upgrade to latest LinHES.
+clear
+if [ "$(id -u)" != "0" ]; then
+   echo "This script must be run as root" 1>&2
+   exit 1
+fi
+function pause(){
+	read -p "$*"
+}
+echo "The script will guide you thru the process of upgrading to the latest LinHES."
+pause 'Press <ENTER> to continue...'
+echo
+echo "Sync'n with the repos..."
+echo
+pacman -Sy &>/dev/null
+pacman -Qu > /tmp/linhes_upgrade
+if [ ! -s /tmp/linhes_upgrade ]
+then
+	echo "No upgrades found.  This could mean the repository is busy."
+	echo "Or your system is already up to date."
+	echo "If you have not upgrade, please try again later."
+	echo "Starting the backend."
+	sv start mythbackend &>/dev/null
+	exit 1
+fi
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+	then
+	echo "Stopping the backend."
+	sv stop mythbackend &>/dev/null
+fi
+if pacman -Qs mythvodka &>/dev/null
+	then
+	echo "Removing MythVodka if installed as it is no longer compatible with MythTV."
+	echo
+	pacman -R mythvodka &>/dev/null
+fi
+echo
+echo "Backing up Online Streams listings."
+echo
+cp /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.021
+echo "Removing mythcontrol and mythphone if installed."
+echo
+if pacman -Qs mythcontrols &>/dev/null
+	then
+	pacman -R mythcontrols &>/dev/null
+fi
+if pacman -Qs mythphone &>/dev/null
+	then
+	pacman -R mythphone &>/dev/null
+fi
+if grep -q kernel26 /tmp/linhes_upgrade
+then
+	echo "Upgrading the kernel."
+	echo
+		if pacman -Qs v4l-dvb &>/dev/null
+		then
+		pacman -Sf --noconfirm kernel26 &>/dev/null && pacman -Sf --noconfirm v4l-dvb
+		else
+		pacman -S kernel26 --noconfirm &>/dev/null
+	fi
+fi
+if grep -q v4l-dvb /tmp/linhes_upgrade
+then
+	pacman -Sf --noconfirm v4l-dvb &>/dev/null
+fi
+echo "Checking for VDPAU packages and upgrading if needed."
+echo
+if pacman -Qs vdpinfo-71xx &>/dev/null
+	then
+	pacman -Rd vdpinfo-71xx &>/dev/null
+fi
+if pacman -Qs vdpinfo-96xx &>/dev/null
+	then
+	pacman -Rd vdpinfo-96xx &>/dev/null
+fi
+if pacman -Qs vdpinfo &>/dev/null
+	then
+	pacman -Rd vdpinfo &>/dev/null && pacman -S --noconfirm nvidia &>/dev/null && pacman -S --noconfirm vdpauinfo &>/dev/null
+fi
+echo "Performing complete system upgrade."
+echo "This may take some time depending on your connection speed."
+echo "Server bandwidth utilization will also have an affect."
+echo "Please be patient."
+echo
+pacman -Suf --noconfirm &>/dev/null
+echo "Restoring Online Streams listings."
+echo
+cp /usr/share/mythtv/is.xml.021 /usr/share/mythtv/is.xml
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+	then
+	echo "Starting the backend.  This will automatically update the schema."
+	sv start mythbackend &>/dev/null
+	echo "I'll launch an xterm so you watch output backend log."
+	echo "Once the schema updates are complete, switch back to this xterm."
+	echo -e "\033[1mWhen you see \"Upgrading to MythTV schema version 1254\"\033[0m"
+	echo "You can switch back to this xterm."
+	echo -e "\033[1mNote:After pressing <ENTER>, I'll be asleep for 30 secs...\033[0m"
+	echo -e "\033[1mThis will give the schema time to upgrade.\033[0m"
+	pause 'Press <ENTER> to continue...'
+	xterm -fn *18* -e tail -f /var/log/mythtv/mythbackend.log &
+	#Sleeping for 30 seconds to give the schema time to upgrade....
+	sleep 30
+	read -p "Press <ENTER> to continue once the schema upgrade is complete."
+	echo
+	echo -e "\033[1mNow, the frontend will launch to update the schema for any plugins.\033[0m"
+	echo -e "\033[1mOnce the this is done, please exit the frontend.\033[0m"
+	pause 'Press <ENTER> to continue...'
+	xterm -e mythfrontend
+	echo
+	echo "Performing LinHES specific schema updates."
+	echo
+	/usr/LH/bin/update_schema_021_to_022.sh
+	cat /data/database/dvd_transcode_r6.sql | mysql -u root mythconverg
+	/usr/LH/bin/mythwelcome-config.py
+fi
+echo "All done!"
+echo -e "\033[5mThanks for choosing LinHES!\033[0m"
+if grep -q kernel26 /tmp/linhes_upgrade
+then
+	echo "The kernel was upgraded, we need to reboot."
+	pause "Press <ENTER> to reboot."
+	reboot
+else
+	if grep -q v4l-dvb /tmp/linhes_upgrade
+	then
+		echo "The V4L\DVB modules were upgraded."
+		pause "Press <ENTER> to reboot."
+		reboot
+	else
+	echo "Launching mythfrontend once again!"
+	echo "Enjoy the latest version!"
+	sleep 5
+	mythfrontend
+fi
+fi
diff --git a/abs/core/linhes-scripts/upgrade_to_0.22.sh b/abs/core/linhes-scripts/upgrade_to_0.22.sh
new file mode 100644
index 0000000..8536a05
--- /dev/null
+++ b/abs/core/linhes-scripts/upgrade_to_0.22.sh
@@ -0,0 +1,94 @@
+#!/bin/bash
+#Script to facilitate easy upgrade to MythTV 0.22 in LinHES.
+if [ "$(id -u)" != "0" ]; then
+   echo "This script must be run as root" 1>&2
+   exit 1
+fi
+function pause(){
+	read -p "$*"
+}
+clear
+echo "The script will guide you thru the process of upgrading LinHES to MythTV 0.22."
+pause 'Press <ENTER> to continue...'
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+	then
+	echo "Stopping the backend."
+	sv stop mythbackend &>/dev/null
+fi
+echo "Sync'n with the repos..."
+pacman -Sy &>/dev/null
+echo "Removing MythVodka if installed as it is no longer compatible with MythTV."
+if pacman -Qs mythvodka &>/dev/null
+	then
+	pacman -R mythvodka &>/dev/null
+fi
+echo "Backing up Online Streams listings."
+cp /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.021
+echo "Removing mythcontrol, mythphone and mythsmolt if installed."
+if pacman -Qs mythcontrols &>/dev/null
+	then
+	pacman -R mythcontrols &>/dev/null
+fi
+if pacman -Qs mythphone &>/dev/null
+	then
+	pacman -R mythphone &>/dev/null
+fi
+if pacman -Qs mythsmolt &>/dev/null
+	then
+	pacman -R mythsmolt &>/dev/null
+fi
+echo "Upgrading the kernel."
+if pacman -Qs v4l-dvb &>/dev/null
+	then
+	pacman -Sf --noconfirm kernel26 &>/dev/null && pacman -Sf --noconfirm v4l-dvb
+	else
+	pacman -S kernel26 --noconfirm &>/dev/null
+fi
+echo "Checking for VDPAU packages and upgrading if needed."
+if pacman -Qs vdpinfo-71xx &>/dev/null
+	then
+	pacman -Rd vdpinfo-71xx &>/dev/null
+fi
+if pacman -Qs vdpinfo-96xx &>/dev/null
+	then
+	pacman -Rd vdpinfo-96xx &>/dev/null
+fi
+if pacman -Qs vdpinfo &>/dev/null
+	then
+	pacman -Rd vdpinfo &>/dev/null && pacman -S --noconfirm nvidia &>/dev/null && pacman -S --noconfirm vdpauinfo &>/dev/null
+fi
+echo "Performing complete system upgrade."
+echo "This may take some time depending on your connection speed."
+echo "Server bandwidth utilization will also have an affect."
+echo "Please be patient."
+pacman -Su --noconfirm &>/dev/null
+echo "Restoring Online Streams listings."
+cp /usr/share/mythtv/is.xml.021 /usr/share/mythtv/is.xml
+clear
+if grep -E "Master|Stand" /etc/systemconfig &>/dev/null
+	then
+	echo "Starting the backend.  This will automatically update the schema."
+	sv start mythbackend &>/dev/null
+	echo "I'll launch an xterm so you watch output backend log."
+	echo "Once the schema updates are complete, switch back to this xterm."
+	echo -e "\033[1mWhen you see \"Upgrading to MythTV schema version 1244\"\033[0m"
+	echo "You can switch back to this xterm."
+	echo -e "\033[1mNote:After pressing <ENTER>, I'll be asleep for 30 secs...\033[0m"
+	echo -e "\033[1mThis will give the schema time to upgrade.\033[0m"
+	pause 'Press <ENTER> to continue...'
+	xterm -fn *18* -e tail -f /var/log/mythtv/mythbackend.log &
+	#Sleeping for 30 seconds to give the schema time to upgrade....
+	sleep 30
+	read -p "Press <ENTER> to continue once the schema upgrade is complete."
+	echo -e "\033[1mNow, the frontend will launch to update the schema for any plugins.\033[0m"
+	echo -e "\033[1mOnce the this is done, please exit the frontend.\033[0m"
+	pause 'Press <ENTER> to continue...'
+	xterm -e mythfrontend
+	echo "Performing LinHES specific schema updates."
+	/usr/LH/bin/update_schema_021_to_022.sh
+	cat /data/database/dvd_transcode_r6.sql | mysql -u root mythconverg
+fi
+echo "All done!"
+echo -e "\033[5mThanks for choosing LinHES!\033[0m"
+pause "Press <ENTER> to reboot."
+reboot
diff --git a/abs/core/linhes-theme/PKGBUILD b/abs/core/linhes-theme/PKGBUILD
new file mode 100644
index 0000000..1d289cd
--- /dev/null
+++ b/abs/core/linhes-theme/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 5936 2008-07-21 20:24:16Z thomas $
+# Maintainer: Cecil Watson<knoppmyth@gmail.com>
+
+pkgname=linhes-theme
+pkgver=1
+pkgrel=12
+pkgdesc="Default LinHES theme."
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="http://linhes.org/"
+source=(ftp://ftp.knoppmyth.net/R6/sources/linhes-theme-1.2.tar.bz2)
+
+build() {
+  cd $startdir/src/
+  mkdir -p $startdir/pkg/usr/share/mythtv/themes
+  cp -a LinHES $startdir/pkg/usr/share/mythtv/themes
+}
+
+md5sums=('805cd304b07a0020ff4990077b2f65d5')
diff --git a/abs/core/lirc-utils/lirc.logrotate b/abs/core/lirc-utils/lirc.logrotate
index 623c4f3..df97c60 100644
--- a/abs/core/lirc-utils/lirc.logrotate
+++ b/abs/core/lirc-utils/lirc.logrotate
@@ -2,4 +2,7 @@
    missingok
    notifempty
    delaycompress
+   postrotate
+      /usr/bin/killall -HUP -q lircd
+   endscript
 }
diff --git a/abs/core/lirc/lirc_mod_mce.patch b/abs/core/lirc/lirc_mod_mce.patch
index 314f2d7..1dc6644 100644
--- a/abs/core/lirc/lirc_mod_mce.patch
+++ b/abs/core/lirc/lirc_mod_mce.patch
@@ -1,6 +1,6 @@
-diff -Naru lirc_mod_mce.orig/lirc_mod_mce.c lirc_mod_mce/lirc_mod_mce.c
---- lirc_mod_mce.orig/lirc_mod_mce.c	2008-04-18 02:12:28.000000000 +0930
-+++ lirc_mod_mce/lirc_mod_mce.c	2009-05-28 07:53:10.000000000 +0930
+diff -Naru lirc_mod_mce/lirc_mod_mce.c lirc_mod_mce_new/lirc_mod_mce.c
+--- lirc_mod_mce/lirc_mod_mce.c	2008-04-18 02:12:28.000000000 +0930
++++ lirc_mod_mce_new/lirc_mod_mce.c	2009-11-22 18:45:24.000000000 +1030
 @@ -171,17 +171,76 @@
  #define VENDOR_TATUNG           0x1460
  #define VENDOR_GATEWAY          0x107b
@@ -86,7 +86,97 @@ diff -Naru lirc_mod_mce.orig/lirc_mod_mce.c lirc_mod_mce/lirc_mod_mce.c
  };
  
  static unsigned char usb_kbd_keycode[256] = {
-@@ -1108,7 +1167,7 @@
+@@ -252,6 +311,8 @@
+     struct semaphore lock;
+     char name[NAME_BUFSIZE];
+     char phys[NAME_BUFSIZE];
++
++    unsigned int carrier_freq;
+ };
+ 
+ /* init strings */
+@@ -889,6 +950,51 @@
+     }
+ }
+ 
++/* Sets the send carrier frequency */
++static int set_send_carrier(struct irctl *ir, int carrier)
++{
++    	int clk = 10000000;
++	int prescaler = 0, divisor = 0;
++	unsigned char cmdbuf[] = { 0x9F, 0x06, 0x01, 0x80 };
++
++	/* Carrier is changed */
++	if (ir->carrier_freq != carrier) {
++
++		if (carrier <= 0) {
++			ir->carrier_freq = carrier;
++			dprintk(DRIVER_NAME "[%d]: SET_CARRIER disabling "
++				"carrier modulation\n", ir->devnum);
++			request_packet_async(ir, ir->usb_ep_out,
++					     cmdbuf, sizeof(cmdbuf),
++					     PHILUSB_OUTBOUND);
++			return carrier;
++		}
++
++		for (prescaler = 0; prescaler < 4; ++prescaler) {
++			divisor = (clk >> (2 * prescaler)) / carrier;
++			if (divisor <= 0xFF) {
++				ir->carrier_freq = carrier;
++				cmdbuf[2] = prescaler;
++				cmdbuf[3] = divisor;
++				dprintk(DRIVER_NAME "[%d]: SET_CARRIER "
++					"requesting %d Hz\n",
++					ir->devnum, carrier);
++
++				/* Transmit new carrier to mce device */
++				request_packet_async(ir, ir->usb_ep_out,
++						     cmdbuf, sizeof(cmdbuf),
++						     PHILUSB_OUTBOUND);
++				return carrier;
++			}
++		}
++
++		return -EINVAL;
++
++	}
++
++	return carrier;
++}
++
+ static int input_open(struct input_dev *id)
+ {
+     return 0;
+@@ -945,6 +1051,18 @@
+         if(lvalue!=(LIRC_MODE_PULSE&LIRC_CAN_SEND_MASK)) return -EINVAL;
+         break;
+ 
++    case LIRC_SET_SEND_CARRIER:
++        /* Retrieve lirc_plugin data for the device */
++        ir=lirc_get_pdata(filep);
++        if (!ir && !ir->usb_ep_out) return -EFAULT;
++
++	result = get_user(ivalue, (unsigned int *) arg);
++	if (result)
++	    return result;
++
++	set_send_carrier(ir, ivalue);
++	break;
++
+     default:
+         return -ENOIOCTLCMD;
+     }
+@@ -1047,7 +1165,8 @@
+             plugin->minor = -1;
+             plugin->features = LIRC_CAN_SEND_PULSE |
+                                 LIRC_CAN_SET_TRANSMITTER_MASK |
+-                                LIRC_CAN_REC_MODE2;
++                                LIRC_CAN_REC_MODE2 |
++                                LIRC_CAN_SET_SEND_CARRIER;
+             plugin->data = ir;
+             plugin->rbuf = rbuf;
+             plugin->set_use_inc = &set_use_inc;
+@@ -1108,7 +1227,7 @@
      input_dev->name = ir->name;
      input_dev->phys = ir->phys;
      usb_to_input_id(dev, &input_dev->id);
diff --git a/abs/core/local-website/htdocs/404.html b/abs/core/local-website/htdocs/404.html
new file mode 100755
index 0000000..41219b0
--- /dev/null
+++ b/abs/core/local-website/htdocs/404.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
+  <meta content="Cecil Watson" name="author">
+  <title>LinHES 404</title>
+  <!-- Generated by: /usr/local/bin/rrd_Configure.sh -->
+  <link href="/KnoppMyth.css" rel="stylesheet" type="text/css" />
+  <p align="center"><a href="http://www.mysettopbox.tv">
+     <img src="/header.png" alt="Tux with a Remote" align="middle" border="0"></a>
+  </p>
+  <table align="center" border="0" cellpadding="5">
+    <tbody>
+      <tr>
+	<td style="vertical-align: top;">
+	  <p class="headerimage" align="center"><b>The Linux Home Entertainment System Release 6</b></p>
+    <p align=center>
+<font size="+2">OOPS</font><br>
+<font size="+1"> The page you requested is missing!<br>
+        </td>
+      </tr>
+    </tbody>
+  </table>
+</body>
+</html>
diff --git a/abs/core/local-website/htdocs/index.html b/abs/core/local-website/htdocs/index.html
old mode 100644
new mode 100755
index 9c46aac..5e6ec81
--- a/abs/core/local-website/htdocs/index.html
+++ b/abs/core/local-website/htdocs/index.html
@@ -1,125 +1,118 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+    <base href="/linhes/">
+    <title>Welcome to LinHES!</title>
 
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <meta name="robots" content="noindex, nofollow">
 
+    <script type="text/javascript" src="/linhes/js/prototype.js"></script>
+    <script type="text/javascript" src="/linhes/js/prototip/prototip.js"></script>
+    <link rel="stylesheet" type="text/css" href="/linhes/js/prototip/prototip.css">
 
-  
-  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
+    <script type="text/javascript" src="/linhes/js/utils.js"></script>
+    <script type="text/javascript" src="/linhes/js/AC_OETags.js"></script>
+    <script type="text/javascript" src="/linhes/js/table_sort.js"></script>
 
-  
-  <meta content="Cecil Watson" name="author">
+    <link rel="stylesheet" type="text/css" href="/linhes/default/style.css">
+    <link rel="stylesheet" type="text/css" href="/linhes/default/header.css">
+    <link rel="stylesheet" type="text/css" href="/linhes/default/menus.css">
+    <link rel="stylesheet" type="text/css" href="/linhes/default/programming.css">
 
-  
- 
-  
-  
-  <title>LinHES R6</title><link href="KnoppMyth.css" rel="stylesheet" type="text/css"></head>
-<body>
-<p align="center"><a href="http://www.mysettopbox.tv/">
-      <img src="header.png" alt="Tux with a Remote" align="middle" border="0"></a>
-  </p>
-
-	
-  
-<table align="center" border="0" cellpadding="5">
-
-    <tbody>
-
-      <tr>
-
-	<td style="vertical-align: top;">
-	  
-      <p class="headerimage" align="center"><b>The Linux Home Entertainment System Release 6</b></p>
-
-	  
-      <p><a href="mythweb/mythweb.php"><b>MythWeb</b></a>: <br>
-
-		&nbsp; &nbsp; The MythWeb allows you to use a web page to control
-		aspects of your MythTV system. MythWeb is a separate application,
-		but it is dependent upon MythTV being installed and operational."
-	  </p>
-
-	  
-      <p><a href="remote/index.html"><b>MythTV Web Virtual Remote</b></a>: <br>
-
-		&nbsp; &nbsp; A web based virtual remote control for MythTV.
-		&nbsp;In order for this to work, you must enable
-		"Network Remote Control interface". &nbsp; See:
-		<b>Utilities/Setup -&gt; Setup -&gt; General -&gt; Fourth Page</b>.
-	  </p>
-
-	  
-      <p><a href="mythtv-doc/mythtv-HOWTO.html"><b>MythTV Documentation</b></a>: <br>
-
-		&nbsp; &nbsp; The MythTV Installation / User's Guide.
-	  </p>
-
-	  
-      <p><a href="mythtv-doc/keys.txt"><b>MythTV Keybindings</b></a>: <br>
-
-		&nbsp; &nbsp; The keybindings for the normal MythTV interface.
-	  </p>
-
-	  
-      <p><a href="linhes.html"><b>LinHES</b></a>: <br>
+    <link rel="stylesheet" type="text/css" href="/linhes/default/welcome.css">
+</head>
 
-		&nbsp; &nbsp; Describes how "The Project Leader" setup multiple systems
-		to form a <b>Lin</b>ux <b>H</b>ome <b>E</b>ntertainment <b>S</b>ystem.
-	  </p>
-
-	  
-      <p><a href="http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&amp;teamnum=50975"><b>Folding@home</b></a>: <br>
-
-		&nbsp; &nbsp; KnoppMyth Team status for the folding@home effort.  Install via the Service Menu.
-		</p>
-
-      <p><a href="foldingathome/"><b>My Folding Status</b></a>: <br>
-
-		&nbsp; &nbsp; Status of the folding@home work for the local user.
-	  </p>
-
-	  
-      <p><a href="ipodfeed/feed.php"><b>iPod Feeds</b></a> <br>
-
-		&nbsp; &nbsp; Transcodes ready for the ipod (if any). &nbsp;Additionally, you can delete unwanted files using this <a href="/ipodfeed/m2iweb.php">link</a>. &nbsp;Note: &nbsp;If you have no recordings, you will see a warning issued from PHP.</p>
-<a href="archive/feed.php"><b>XviD Feed dir</b></a> <br>
-&nbsp; &nbsp; Any programs you have transcoded to XviD.
-&nbsp;Additionally, you can delete unwanted files using this <a href="/archive/archive.php">link</a>. &nbsp;Note: &nbsp;If you have no recordings, you will see a warning issued from PHP.
-      <p><a style="font-weight: bold;" href="fuppes.php"><span style="text-decoration: underline;">FUPPES</span></a><br>
-&nbsp;&nbsp;&nbsp; FUPPES - Free UPnP Entertainment Service. &nbsp;A
-UPnP to be used inplace of the UPnP server that comes with MythTV.
-&nbsp;If the UPnP that comes with MythTV doesn't work for you, you can
-try FUPPES.  Install via the Service Menu.</p><p><a style="font-weight: bold;" href="mediaserv.php"><span style="text-decoration: underline;">Mediaserv</span></a><br>
-&nbsp;&nbsp;&nbsp; Mediaserv - A on-demand transcoding server for
-videos. &nbsp;Mediaserv is designed to transcode video in a format
-playable on the Nokia Internet Tablets. &nbsp;However it works well at
-transcoding and streaming&nbsp;to any device. &nbsp;As longs as the
-device will playback AVIs (think streaming to any browser!). &nbsp;By
-default, we have it set to link to
-TV recordings (pretty) and your video directory. &nbsp;Additionally if
-you want it to stream contents from a network share, it will! &nbsp;ln
--s /path/to/share /myth/mediaserv/media/ </p><p><a href="rrd/index.html"><b>RRDTool</b></a>: <br>
-
-		&nbsp; &nbsp; Hardware status graphs.  Install via the Service Menu.
-	  </p>
-
-	  
-      <p><a href="javascript:void(0)" onclick="window.open('mythweb/data/mp3player.html','linkname','height=100, width=260,scrollbars=no')"><b>KnoppMyth Radio</b></a>: <br>
-
-                &nbsp; &nbsp; Your music must be encoded as MP3 in MythMusic for this to work.</p>
-	  
-      <p><a style="font-weight: bold;" href="zm/"><span style="text-decoration: underline;">ZoneMinder</span></a><br>
-      &nbsp;&nbsp;&nbsp; Video camera security software with motion detection.  Install via the Service Menu.
-      </p>
-        </td>
-
-      </tr>
-
-    <tr>
-      <td style="vertical-align: top;"></td>
-    </tr>
-  </tbody>
-  
+<body>
+<div id="page_header" style="position:relative; text-align:center;">
+    <div id="logo_box">
+        <a id="LinHES_logo" href="http://linhes.org/">
+        <img src="/header.png" alt="Tux with a Remote" class="body">
+        </a>
+    </div>
+</div>
+
+<table width="100%" border="0" cellspacing="2" cellpadding="0">
+<tr>
+    <td colspan="2" class="menu menu_border_t menu_border_b">
+        <table class="body" width="100%" border="0" cellspacing="2" cellpadding="2">
+            <td align="center">
+                <a href="http://linhes.org" <b>The Linux Home Entertainment System Release 6</b></a>
+            </td>
+        </table>
+    </td>
+</tr>
 </table>
 
-</body></html>
+
+<script type="text/javascript">
+<!--
+
+    var visible_module = 'media';
+    function show_module_info(module) {
+        if (visible_module == module)
+            return;
+    // Change the outline on the list item
+        $('module_'+ visible_module).removeClassName('selected');
+        $('module_'+ module).addClassName('selected');
+    // Show and hide the appropriate info boxes
+        $('info_' + visible_module).hide();
+        $('info_' + visible_module).addClassName('hidden');
+        $('info_' + module).show();
+        $('info_' + module).removeClassName('hidden');
+    // Keep track of what's visible now
+        visible_module = module;
+    }
+
+// -->
+</script>
+
+<div id="modules" class="clearfix">
+
+    <div id="module_names">
+    <ul>
+        <li id="module_media" class="selected" onmouseover="show_module_info('media')">Media</li>
+        <li id="module_status" onmouseover="show_module_info('status')">Status</li>
+        <li id="module_help" onmouseover="show_module_info('help')">Help</li>
+    </ul>
+    </div>
+
+    <div id="module_info">
+        <div id="info_media">
+            <ul>
+                <li><a href="/mythweb/">MythWeb</a> - MythWeb provides a frontend for scheduling and managing recordings on your MythBox from a web browser.<br></li>
+                <li><a href="/remote/index.html">MythTV Web Virtual Remote</a> - A web based virtual remote control for MythTV.  For this to work, you must enable "Network Remote Control interface" in Service Menu -> MythTV Configuration -> Setup -> General -> Remote Control.<br></li>
+                <li><a href="/ipodfeed/feed.php">iPod Feeds</a> - Transcodes ready for the iPod. If you have no recordings, you will see a warning issued from PHP.<br></li>
+                <li><a href="/ipodfeed/m2iweb.php">Delete iPod Transcodes</a><br></li>
+                <li><a href="/archive/feed.php">XviD Feeds</a> - Programs you have transcoded to XviD. If you have no recordings, you will see a warning issued from PHP.<br></li>
+                <li><a href="/archive/archive.php">Delete XviD Transcodes</a><br></li>
+                <li><a href="/fuppes.php">FUPPES</a> - Free UPnP Entertainment Service.  A UPnP to be used inplace of the UPnP server that comes with MythTV. Install via the Service Menu.<br></li>
+                <li><a href="/mediaserv.php">Mediaserv</a> - A on-demand transcoding server for videos. Mediaserv is designed to transcode video in a format playable on the Nokia Internet Tablets.  However it works well at transcoding and streaming to any device that will playback AVIs (think streaming to any browser!). By default, we have it set to link to TV recordings (pretty) and your video directory. Additionally if you want it to stream contents from a network share, it will! ln -s /path/to/share /myth/mediaserv/media/<br></li>
+                <li><a href="/mythweb/data/mp3player.html">Radio</a> - Music in MythMusic must be encoded as MP3s.<br></li>
+            </ul>
+        </div>
+        <div id="info_status" class="hidden">
+            <ul>
+                <li><a href="/rrd/index.html">RRDTool</a> - Hardware status graphs.</li>
+                <li><a href="/monitorix/">Monitorix</a> - A system monitoring perl script that uses rrd databases to log system data.<br></li>
+                <li><a href="http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&amp;teamnum=50975">KnoppMyth Folding@home Team Status</a></li>
+                <li><a href="/foldingathome/">My Folding@home Status</a></li>
+            </ul>
+        </div>
+        <div id="info_help" class="hidden">
+            <ul>
+                <li><a href="http://www.mythtv.org/docs/">MythTV Documentation</a></li>
+                <li><a href="/mythtv-doc/keys.txt">MythTV Default Keybindings</a></li>
+                <li><a href="http://www.mythtv.org/support">MythTV Support</a></li>
+                <li><a href="http://www.schedulesdirect.org/">Schedules Direct</a> - Provides U.S./Canadian TV listing data.<br></li>
+                <li><a href="/linhes.html">LinHES</a> - Describes how "The Project Leader" setup multiple systems to form a <b>Lin</b>ux <b>H</b>ome <b>E</b>ntertainment <b>S</b>ystem.<br></li>
+                <li><a href="http://linhes.org/phpBB2/">LinHES Forum</a></li>
+                <li><a href="http://www.google.com/advanced_search?q=+site:mysettopbox.tv/phpBB2&hl=en&lr=&as_qdr=all">Search LinHES Forum</a></li>
+                <li><a href="http://www.knoppmythwiki.org/">KnoppMyth Wiki</a></li>
+                <li><a href="http://linhes.org/bugs/projects/linhes/wiki">LinHES Wiki</a></li>
+                <li><a href="http://linhes.org/bugs">LinHES Bug Tracker</a></li>
+            </ul>
+        </div>
+
+</body>
+</html>
diff --git a/abs/core/local-website/htdocs/linhes/default/header.css b/abs/core/local-website/htdocs/linhes/default/header.css
new file mode 100644
index 0000000..d4b2802
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/header.css
@@ -0,0 +1,123 @@
+#page_header {
+    margin: 5px;
+}
+
+#logo_box {
+}
+#mythtv_logo {
+    margin:     0px 5px;
+    padding:    5px;
+    height:     48px;
+    width:      180px;
+    float:      left;
+    text-align: center;
+}
+
+#sections {
+    white-space: nowrap;
+}
+#sections a {
+    float:              left;
+    margin:             0px 5px;
+    padding:            5px;
+    background-color:   #347;
+    border-top:         1px solid #8ad;
+    border-right:       1px solid #003;
+    border-bottom:      1px solid #000;
+    border-left:        1px solid #79c;
+    -moz-border-radius: 8px;
+    text-align:         center;
+    height:             48px;
+    width:              48px;
+}
+#sections a:hover {
+    background-color:   #458;
+}
+#sections a img {
+    border:  none;
+    display: inline !important;
+}
+
+#sections a.current_section {
+    background-color:   #164;
+    border-top:         1px solid #7b9;
+    border-right:       1px solid #030;
+    border-bottom:      1px solid #000;
+    border-left:        1px solid #6a8;
+}
+#sections a.current_section:hover {
+    background-color:   #275;
+}
+
+#tv_link {
+}
+#music_link {
+}
+#video_link {
+}
+#weather_link {
+}
+#settings_link {
+}
+
+#extra_header {
+    margin-left: 550px;
+    padding:     0px 5px;
+    height:      58px;
+}
+
+/*
+ * IE sucks:  true-height is supposed to be height+padding+margin+border, but IE
+ * doesn't add in padding, so we have to create a wrapper container and use
+ * margin instead of padding to make the "padding" that we need.
+ */
+#help_wrapper {
+    height:             21px;
+    margin-bottom:      3px;
+    background-color:   #247;
+    border-top:         1px solid #013;
+    border-right:       1px solid #79c;
+    border-bottom:      1px solid #68b;
+    border-left:        1px solid #002;
+    -moz-border-radius: 6px;
+    min-width:          225px;
+}
+#help_box {
+    margin:             4px 5px 2px 5px;
+    height:             15px;
+    overflow:           hidden;
+    white-space:        nowrap;
+}
+#search {
+    margin-top:         2px;
+    padding:            3px 5px;
+    height:             26px;
+    background-color:   #247;
+    border-top:         1px solid #013;
+    border-right:       1px solid #79c;
+    border-bottom:      1px solid #68b;
+    border-left:        1px solid #002;
+    -moz-border-radius: 8px;
+    min-width:          225px;
+    white-space:        nowrap;
+}
+#simple_search {
+    padding-top: 1px;
+}
+
+
+#search_text {
+    position:     relative;
+    top:          -1px;
+    width:        150px;
+    margin-right: 3px;
+    padding:      0px 3px;
+    font-size:    9pt;
+}
+#search_submit {
+    position:  relative;
+    top:       1px;
+    width:     64px;
+    font-size: 9pt;
+}
+
diff --git a/abs/core/local-website/htdocs/linhes/default/menus.css b/abs/core/local-website/htdocs/linhes/default/menus.css
new file mode 100644
index 0000000..d4e793a
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/menus.css
@@ -0,0 +1,221 @@
+/* popup and menu classes */
+.popup {
+    font-size:          9pt;
+}
+
+.popup table {
+    font-size:          9pt;
+}
+
+.popup dl {
+    min-width:          40em;
+    color:              #dedede;
+    background-color:   #265990;
+    border:             2px ridge #127;
+    padding:            5px;
+}
+
+/*
+
+    This other stuff isn't used quite yet, but is here as a placeholder so I don't lose the necessary styles
+
+div.popup_menu {
+    position:         absolute;
+    visibility:       hidden;
+    top:              0px;
+    left:             0px;
+    color:            #000036;
+    background-color: #40A0B0;
+    border-right:     2px groove #289;
+    border-bottom:    2px groove #289;
+    border-left:      1px solid #289;
+    border-top:       1px solid #289;
+    padding:          10px;
+    font-size:        13px;
+}
+div.popup_menu A, div.popup_menu A:link, div.popup_menu A:visited {
+    color: #000036;
+    text-decoration: none;
+}
+div.popup_menu A:hover, div.popup_menu_hover {
+    color: #000036;
+    text-decoration: underline;
+}
+div.popup_menu_item, div.popup_menu_item A, div.popup_menu_item A:link, div.popup_menu_item A:visited {
+    font-size: 13px;
+    color: #003040;
+    padding: 5px;
+    display: block;
+    text-decoration: none;
+}
+div.popup_menu_item A:hover, div.popup_menu_item A:active {
+    background-color: #70D0F0;
+    text-decoration: underline;
+}
+div.popup_menu_sep {
+    border-bottom:  1px ridge #208090;
+}
+
+ul.tree_item_menu {
+    width:              20px;
+    height:             20px;
+}
+
+ul.popup_menu {
+    display:            block;
+    list-style-type:    none;
+    margin:             0px;
+    padding:            0px;
+    font-size:          10pt;
+}
+ul.popup_menu li {
+    font-weight:        bold;
+    color:              #cce;
+    padding:            3px 0px 0px 4px;
+    margin:             -3px 0px 0px 0px;
+    cursor:             default;
+    white-space:        nowrap;
+    list-style-type:    none;
+    height:             20px;
+}
+ul.popup_menu.vertical li {
+    width:              20px;
+    list-style-type:    none;
+}
+
+ul.popup_menu li.active {
+    background-color: #607090;
+}
+ul.popup_menu li a {
+    text-decoration:    none;
+    color:              #cde !important;
+}
+ul.popup_menu ul {
+    position:           absolute;
+    visibility:         hidden;
+    text-align:         left;
+    background-color:   #304060;
+    border:             1px solid #020;
+    width:              11em;
+    margin:             2px 0px 0px 0px;
+    padding:            0px;
+}
+ul.popup_menu ul li.sep {
+    border-top:         1px solid #6090d0;
+}
+ul.popup_menu ul li, ul.popup_menu.vertical ul li, ul.popup_menu.horizontal ul li {
+    margin:             0px;
+    padding:            3px 0px 0px 0px;
+    border-bottom:      1px solid #00191a;
+    border-right:       none;
+    white-space:        normal;
+    width:              11em;
+    height:             18px;
+}
+ul.popup_menu ul li a {
+    margin-top:         -3px !important;
+    display:            block;
+    width:              9em;
+    color:              #cde;
+    text-decoration:    none;
+    padding:            3px 1em;
+}
+ul.popup_menu ul li a:hover {
+    color:              #def;
+    background-color:   #205980;
+}
+
+ul.popup_menu ul li.active {
+    background-color:   #105053;
+    color:              white;
+}
+
+#menu {
+    display:            block;
+    list-style-type:    none;
+    margin:             0px 220px 0px 0px;
+    padding:            0em 0em;
+    font-size:          10pt;
+    background-color:   #103949;
+    height:             20px;
+    border-bottom:      1px solid black;
+}
+#menu li {
+    font-weight:        bold;
+    color:              #cce;
+    padding:            0em 1em;
+    margin:             0em;
+    cursor:             default;
+    white-space:        nowrap;
+    list-style-type:    none;
+    height:             18px;
+    padding-top:        3px;
+}
+#menu li span.subtext {
+    font-weight:        normal;
+}
+#menu.horizontal li {
+    float:              left;
+    border-right:       1px solid #002;
+}
+
+#menu.vertical {
+    width:              8em;
+    border-right:       1px solid #600;
+    border-top:         1px solid #600;
+}
+#menu.vertical li {
+    width:              7em;
+    border-bottom:      1px solid #600;
+    list-style-type:    none;
+}
+
+#menu li.active {
+    background-color: #205060;
+}
+#menu li a {
+    text-decoration:    none;
+    color:              #cce;
+}
+#menu ul {
+    position:           absolute;
+    visibility:         hidden;
+    text-align:         left;
+    background-color:   #103A39;
+    border:             1px solid #020;
+    width:              13em;
+    margin:             0px;
+    padding:            0px;
+}
+#menu ul li.sep {
+    border-top:         1px solid #609A99;
+}
+#menu ul li, #menu.vertical ul li, #menu.horizontal ul li {
+    border-right:       none;
+    padding:            0;
+    white-space:        normal;
+    margin: 0px;
+    border-bottom:      1px solid #001A19;
+    padding-top:        3px;
+    height:             18px;
+    width:              13em;
+}
+#menu ul li a {
+    margin-top: -3px !important;
+    display:            block;
+    width:              11em;
+    color:              #cce;
+    text-decoration:    none;
+    padding:            3px 1em;
+}
+#menu ul li a:hover {
+    color:              #DDF;
+    background-color:   #206A59;
+}
+
+#menu ul li.active {
+    background-color:   #105350;
+    color:              white;
+}
+
+*/
diff --git a/abs/core/local-website/htdocs/linhes/default/programming.css b/abs/core/local-website/htdocs/linhes/default/programming.css
new file mode 100644
index 0000000..60042a7
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/programming.css
@@ -0,0 +1,150 @@
+/*
+ *
+ * The following subclasses are used for list displays that deal with tv
+ * programming.
+ *
+/*/
+
+/* some classes for various list displays */
+    .list {    background-color: #191c26 }
+    .list_separator {
+        background-color: #203670;
+        border-top:       4px;
+    }
+
+/* The category legend, and its associated popup */
+    #command_choices a {
+        white-space: nowrap;
+    }
+
+    #category_legend_popup {
+        position:         absolute;
+        visibility:       hidden;
+        top:              0px;
+        left:             0px;
+        padding:          2px;
+        white-space:      nowrap;
+    }
+    #category_legend_popup table {
+        font-size:        9pt;
+    }
+
+/* A class for the left-cleared <dl> lists used for program details popups */
+    dl.details_list {
+        font-size:  9pt;
+        margin:     .125em;
+        max-width:  41em;
+    }
+    dl.details_list dt {
+        clear:       left;
+        float:       left;
+        width:       9em;
+        padding-top: 3px;
+        text-align:  right;
+        color:       #ffe;
+        white-space: nowrap;
+    }
+    dl.details_list dd {
+        padding-top: 3px;
+        margin-left: 9.5em;
+    }
+
+/* Control the look of the text-based HDTV stamp throughout MythWeb */
+    .hdtv_icon {
+        font-size:   9pt;
+        float:       right;
+        color:       yellow;
+        display:     inline;
+        font-weight: bold;
+    }
+
+/* a class for the the cells containing recorded programs in recorded_programs.php */
+.scheduled   { background-color: #506090; }
+.conflict    { background-color: #806050; }
+.duplicate   { background-color: #304050; }
+.deactivated { background-color: #508060; }
+
+.will_record              { border: 1px solid  #00F000 !important; }
+.record_weekly            { border: 1px solid  #00F000 !important; }
+.record_timeslot          { border: 1px solid  #00F000 !important; }
+.record_once              { border: 1px solid  #00F000 !important; }
+.record_channel           { border: 1px solid  #00F000 !important; }
+.record_always            { border: 1px solid  #00F000 !important; }
+.record_conflicting       { border: 1px solid  #FF0000 !important; }
+.record_duplicate         { border: 2px dashed #90B0A0 !important; }
+.record_old_duplicate     { border: 1px dashed #90B0A0 !important; }
+.record_suppressed        { border: 2px dotted #60B0B0 !important; }
+.record_override_suppress { border: 2px dotted #D03060 !important; }
+.record_override_record   { border: 2px solid  #00FF90 !important; }
+
+
+/* There should be exactly one class in the next section corresponding to
+    each possible value of RecStatus_Types as defined in
+    includes/programs.php */
+.rec_class {
+    background:  transparent;
+    text-align:  center;
+}
+.rec_class.WillRecord     { font-weight: bold; }
+.rec_class.Recording      { font-weight: bold; }
+.Recording                { color: #00FF00; border-width: 2px }
+.WillRecord               { color: #00FF00; }
+.PreviousRecording        { color: #90B0A0; }
+.CurrentRecording         { color: #90D0A0; }
+.Repeat                   { color: #90B0A0; }
+.EarlierShowing           { color: #90FFA0; }
+.LaterShowing             { color: #90FFA0; }
+.TooManyRecordings        { color: #60B0B0; }
+.Cancelled                { color: #60B0B0; }
+.Conflicting              { color: #FF0000; }
+.LowDiskSpace             { color: #60B0B0; }
+.TunerBusy                { color: #60B0B0; }
+.ManualOverride           { color: #D03060; }
+.Overlap                  { color: #FF0000; }
+
+.cat_Action         { background-color: #906020; }
+.cat_Adult          { background-color: #702020; }
+.cat_Animals        { background-color: #609060; }
+.cat_Art_Music      { background-color: #801060; }
+.cat_Business       { background-color: #703010; }
+.cat_Children       { background-color: #B00010; }
+.cat_Comedy         { background-color: #006080; }
+.cat_Crime_Mystery  { background-color: #105050; }
+.cat_Documentary    { background-color: #504020; }
+.cat_Drama          { background-color: #400060; }
+.cat_Educational    { background-color: #606060; }
+.cat_Food           { background-color: #208040; }
+.cat_Game           { background-color: #701010; }
+.cat_Health_Medical { background-color: #806060; }
+.cat_History        { background-color: #807020; }
+.cat_HowTo          { background-color: #A0A000; }
+.cat_Horror         { background-color: #101040; }
+.cat_Misc           { background-color: #403060; }
+.cat_News           { background-color: #606040; }
+.cat_Reality        { background-color: #304040; }
+.cat_Romance        { background-color: #A02050; }
+.cat_Science_Nature { background-color: #008050; }
+.cat_SciFi_Fantasy  { background-color: #606090; }
+.cat_Shopping       { background-color: #103010; }
+.cat_Soaps          { background-color: #508080; }
+.cat_Spiritual      { background-color: #804080; }
+.cat_Sports         { background-color: #005030; }
+.cat_Talk           { background-color: #203040; }
+.cat_Travel         { background-color: #2060B0; }
+.cat_War            { background-color: #B06050; }
+.cat_Western        { background-color: #806040; }
+.cat_Unknown        { background-color: #303030; }
+
+.cat_movie          { background-color: #809090 !important; }
+.cat_series         { }
+.cat_tvshow         { }
+
+/* deprecated show categories that need to be integreted into the above list via regex, or have new categories created for them */
+.tv_Cine           { background-color: blue;            }
+.tv_Classic        { background-color: gray;            }
+.tv_Collectibles   { background-color: #708090;         }
+.tv_Magazine       { background-color: #48D1CC;         }
+.tv_Movies         { background-color: blue;            }
+.tv_Serie          { background-color: #9932CC;         }
+.tv_SHOW           { background-color: #A0522D;         }
+.tv_Tiempo         { background-color: #33ff99;         }
diff --git a/abs/core/local-website/htdocs/linhes/default/style.css b/abs/core/local-website/htdocs/linhes/default/style.css
new file mode 100644
index 0000000..2fbb26e
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/style.css
@@ -0,0 +1,237 @@
+/*
+ * Global page handlers.
+/*/
+
+    html,body {
+        border:           0;
+        margin:           0;
+        padding:          0;
+        font-size:        9pt;
+        font-family:      Arial, Helvetica, sans-serif;
+        background-color: #191c26;
+        color:            #dedede;
+    }
+
+    /* For some reason, settings for the main body element doesn't always work for
+     * text inside of tables
+    /*/
+    .body {
+        font-size: 12px;
+        font-family: Arial, Helvetica, sans-serif;
+    }
+
+/*
+ * We should try to keep links and labels looking consistent across the app.
+/*/
+
+    a, a:link, .link { color: #E0E0FF; text-decoration: none; cursor: pointer;}
+    a:active  { color: #990033; text-decoration: none; }
+    a:visited { color: #E0E0FF; text-decoration: none; }
+    a:hover   { color: #F0F000; text-decoration: underline; }
+
+    label       { color: #E0E0FF; text-decoration: none; }
+    label:hover { color: #F0F000; text-decoration: underline; }
+
+/* a class for the menu across the top of the page as well as menu headers throughout the page */
+    .menu {          background-color: #265990 }
+    .menu_border_t { border-top:    2px solid #9090B0 }
+    .menu_border_b { border-bottom: 2px solid #9090B0 }
+    .menu_border_l { border-left:   2px solid #9090B0 }
+    .menu_border_r { border-right:  2px solid #9090B0 }
+
+/* a class for commands and other user input boxes */
+
+/* @deprecated old classes */
+.command { background-color: #1040A0 }
+.command_border_t { border-top:    2px solid #9090B0 }
+.command_border_b { border-bottom: 2px solid #9090B0 }
+.command_border_l { border-left:   2px solid #9090B0 }
+.command_border_r { border-right:  2px solid #9090B0 }
+.activecommand    { background-color: #108040 }
+
+/* New command classes */
+
+    /* Box to hold commands */
+    .commandbox {
+        background-color:   #102923;
+        color:              #E0E0FF;
+        border:             1px solid #9090B0;
+    }
+
+    /* Commands themselves */
+
+    .commands { /* Placeholder for handling sub-elements */ }
+
+    .commands input.x-submit {
+        border:             2px outset #7b8;
+        padding:            0 .5em;
+        height:             2em;
+        background-color:   #263;
+        color:              #E0E0FF;
+    }
+    .commands input.x-submit:hover {
+        border:             1px outset #9da;
+        background-color:   #485;
+        color:              #F0F000;
+        text-decoration:    underline;
+    }
+
+    .commands a {
+        font-weight:        bold;
+        border:             1px solid #7b8;
+        padding:            .15em .5em;
+        background-color:   #263;
+    }
+    .commands a:hover {
+        border:             1px solid #9da;
+        background-color:   #485;
+    }
+
+/*
+ * The following styles refer to forms and form elements throughout MythWeb
+/*/
+
+    /* Avoid those nasty extra linefeeds in IE </form> tags */
+    form { display: inline; }
+
+    /* A special class for submit buttons */
+    .submit {
+        border:             2px outset #7b8;
+        padding:            0 .5em;
+        background-color:   #263;
+        color:              #E0E0FF;
+        font-weight:        bold;
+        height:             2em;
+    }
+    .submit:hover {
+        border:             2px outset #9da;
+        background-color:   #485;
+        color:              #F0F000;
+        text-decoration:    underline;
+    }
+
+    /* A special class for radio buttons and check boxes because some browsers render them weirdly */
+    .radio {
+        height:             14px !important;
+        width:              14px !important;
+        color:              #002000;
+        background-color:   #C0D0C0;
+    }
+
+    /* Default styles for form fields */
+    select {
+        font-family:        Arial, Helvetica, sans-serif;
+        color:              #002000;
+        background-color:   #C0D0C0;
+        font-size:          9pt;
+    }
+
+    input {
+        padding-left:       .25em;
+        font-family:        Arial, Helvetica, sans-serif;
+        color:              #002000;
+        background-color:   #C0D0C0;
+        font-size:          9pt;
+    }
+
+    textarea {
+        font-family:        courier, courier-new;
+        color:              #002000;
+        background-color:   #C0D0C0;
+        font-size:          9pt;
+    }
+
+    /* Quantity-sized elements look better with the text centered */
+    input.quantity {
+        width:              2em !important;
+        text-align:         center;
+    }
+
+/*
+ * A special class for error stuff, so all page errors look the same.
+/*/
+
+    #error, .error {
+        color:              #F03030;
+        background-color:   #360000;
+        border-color:       #F03030;
+        border:             thin groove #F03030;
+        padding:            8px;
+    }
+
+/*
+ * The following represent some global classes to accommodate minor but
+ * oft-used manipulations like font sizes.0
+/*/
+
+    /* font size classes */
+    .tiny   { font-size: 9px; }
+    .small  { font-size: 9pt; }
+    .normal { font-size: 10pt; }
+    .large  { font-size: 12pt; }
+    .huge   { font-size: 24px; }
+
+    /* fony style classes */
+    .bold, .bold a, .bold a:link, .bold a:visited, .bold a:active, .bold a:hover {
+        font-weight: bold !important;
+    }
+    .italic, .italic a, .italic a:link, .italic a:visited, .italic a:active, .italic a:hover {
+        font-style: italic !important;
+    }
+
+    /* Handy for, well, hiding things..  Also for mouseover popup menus */
+    .hidden {
+        visibility: hidden;
+        display:    none;
+    }
+
+/*
+ * clearfix -- see http://positioniseverything.net/easyclearing.html for details on how/why this works
+/*/
+
+    .clearfix:after {
+        content:    ".";
+        display:    block;
+        height:     0;
+        clear:      both;
+        visibility: hidden;
+    }
+    .clearfix {display: inline-block;}
+    /* Hides from IE-mac \*/
+    * html .clearfix {height: 1%;}
+    .clearfix {display: block;}
+    /* End hide from IE-mac */
+
+    /* Ajax little popup request thing style */
+    #ajax_working {
+        position:           fixed;
+        background-color:   green;
+        bottom:             0px;
+        left:               1em;
+        padding:            1em;
+        width:              10em;
+        text-align:         center;
+    }
+
+    .link {
+        cursor:             pointer;
+    }
+
+/* I don't think we have a single image with a border in the default template, so disable it */
+    a img {
+        border:             0px;
+    }
+
+    .nowrap {
+        white-space:        nowrap;
+    }
+
+#feed_buttons {
+    padding-top:        1em;
+    padding-bottom:     1em;
+    padding-left:       1.35em;
+}
+
+#feed_buttons a {
+    padding-right:      1em;
+}
diff --git a/abs/core/local-website/htdocs/linhes/default/welcome.css b/abs/core/local-website/htdocs/linhes/default/welcome.css
new file mode 100644
index 0000000..6e47ed9
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/default/welcome.css
@@ -0,0 +1,62 @@
+#modules {
+    width:              600px;
+    margin:             100px auto;
+}
+
+#module_names {
+    margin:             0px;
+    padding:            0px;
+    float:              left;
+    width:              7em;
+    font-size:          2em;
+    min-height:         15em;
+}
+
+#module_names ul {
+    margin:             0px;
+    padding:            0px;
+    list-style-type:    none;
+    text-align:         right;
+}
+
+#module_names li {
+    position:           relative;
+    z-index:            2;
+    margin:             0px -6px 0px 0px;
+    padding:            0px .5em .15em 0px;
+    border:             2px solid transparent;
+    white-space:        nowrap;
+}
+#module_names li.selected {
+    background-color:   #475;
+    border-top:         2px solid #48f;
+    border-right:       2px solid #688;
+    border-bottom:      2px solid #48f;
+    border-left:        2px solid #48f;
+    -moz-border-radius: 8px;
+}
+#module_names li.selected a {
+    display:            block;
+}
+
+#module_info {
+    background-color:   #355;
+    margin-left:        14em;
+    border:             2px solid #48f;
+    min-width:          314px;
+    height:             30em;
+    padding:            .5em 1em;
+    -moz-border-radius:     8px;
+}
+
+.module_icon {
+    display: block;
+    margin: auto;
+}
+
+#mythtv_link {
+    float:          left;
+    width:          14em;
+    text-align:     center;
+    margin-top:     -1.5em;
+}
diff --git a/abs/core/local-website/htdocs/linhes/js/AC_OETags.js b/abs/core/local-website/htdocs/linhes/js/AC_OETags.js
new file mode 100644
index 0000000..f72d7e2
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/AC_OETags.js
@@ -0,0 +1,269 @@
+// Flash Player Version Detection - Rev 1.5
+// Detect Client Browser type
+// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
+var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
+var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
+var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
+
+function ControlVersion()
+{
+	var version;
+	var axo;
+	var e;
+
+	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
+
+	try {
+		// version will be set for 7.X or greater players
+		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+		version = axo.GetVariable("$version");
+	} catch (e) {
+	}
+
+	if (!version)
+	{
+		try {
+			// version will be set for 6.X players only
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+			
+			// installed player is some revision of 6.0
+			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
+			// so we have to be careful. 
+			
+			// default to the first public version
+			version = "WIN 6,0,21,0";
+
+			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
+			axo.AllowScriptAccess = "always";
+
+			// safe to call for 6.0r47 or greater
+			version = axo.GetVariable("$version");
+
+		} catch (e) {
+		}
+	}
+
+	if (!version)
+	{
+		try {
+			// version will be set for 4.X or 5.X player
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+			version = axo.GetVariable("$version");
+		} catch (e) {
+		}
+	}
+
+	if (!version)
+	{
+		try {
+			// version will be set for 3.X player
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
+			version = "WIN 3,0,18,0";
+		} catch (e) {
+		}
+	}
+
+	if (!version)
+	{
+		try {
+			// version will be set for 2.X player
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+			version = "WIN 2,0,0,11";
+		} catch (e) {
+			version = -1;
+		}
+	}
+	
+	return version;
+}
+
+// JavaScript helper required to detect Flash Player PlugIn version information
+function GetSwfVer(){
+	// NS/Opera version >= 3 check for Flash plugin in plugin array
+	var flashVer = -1;
+	
+	if (navigator.plugins != null && navigator.plugins.length > 0) {
+		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
+			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
+			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;			
+			var descArray = flashDescription.split(" ");
+			var tempArrayMajor = descArray[2].split(".");
+			var versionMajor = tempArrayMajor[0];
+			var versionMinor = tempArrayMajor[1];
+			if ( descArray[3] != "" ) {
+				tempArrayMinor = descArray[3].split("r");
+			} else {
+				tempArrayMinor = descArray[4].split("r");
+			}
+			var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
+			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
+		}
+	}
+	// MSN/WebTV 2.6 supports Flash 4
+	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
+	// WebTV 2.5 supports Flash 3
+	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
+	// older WebTV supports Flash 2
+	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
+	else if ( isIE && isWin && !isOpera ) {
+		flashVer = ControlVersion();
+	}	
+	return flashVer;
+}
+
+// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
+function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
+{
+	versionStr = GetSwfVer();
+	if (versionStr == -1 ) {
+		return false;
+	} else if (versionStr != 0) {
+		if(isIE && isWin && !isOpera) {
+			// Given "WIN 2,0,0,11"
+			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
+			tempString        = tempArray[1];			// "2,0,0,11"
+			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
+		} else {
+			versionArray      = versionStr.split(".");
+		}
+		var versionMajor      = versionArray[0];
+		var versionMinor      = versionArray[1];
+		var versionRevision   = versionArray[2];
+
+        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
+		if (versionMajor > parseFloat(reqMajorVer)) {
+			return true;
+		} else if (versionMajor == parseFloat(reqMajorVer)) {
+			if (versionMinor > parseFloat(reqMinorVer))
+				return true;
+			else if (versionMinor == parseFloat(reqMinorVer)) {
+				if (versionRevision >= parseFloat(reqRevision))
+					return true;
+			}
+		}
+		return false;
+	}
+}
+
+function AC_AddExtension(src, ext)
+{
+  if (src.indexOf('?') != -1)
+    return src.replace(/\?/, ext+'?'); 
+  else
+    return src + ext;
+}
+
+function AC_Generateobj(objAttrs, params, embedAttrs) 
+{ 
+    var str = '';
+    if (isIE && isWin && !isOpera)
+    {
+  		str += '<object ';
+  		for (var i in objAttrs)
+  			str += i + '="' + objAttrs[i] + '" ';
+  		for (var i in params)
+  			str += '><param name="' + i + '" value="' + params[i] + '" /> ';
+  		str += '></object>';
+    } else {
+  		str += '<embed ';
+  		for (var i in embedAttrs)
+  			str += i + '="' + embedAttrs[i] + '" ';
+  		str += '> </embed>';
+    }
+
+    document.write(str);
+}
+
+function AC_FL_RunContent(){
+  var ret = 
+    AC_GetArgs
+    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
+     , "application/x-shockwave-flash"
+    );
+  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
+}
+
+function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
+  var ret = new Object();
+  ret.embedAttrs = new Object();
+  ret.params = new Object();
+  ret.objAttrs = new Object();
+  for (var i=0; i < args.length; i=i+2){
+    var currArg = args[i].toLowerCase();    
+
+    switch (currArg){	
+      case "classid":
+        break;
+      case "pluginspage":
+        ret.embedAttrs[args[i]] = args[i+1];
+        break;
+      case "src":
+      case "movie":	
+        args[i+1] = AC_AddExtension(args[i+1], ext);
+        ret.embedAttrs["src"] = args[i+1];
+        ret.params[srcParamName] = args[i+1];
+        break;
+      case "onafterupdate":
+      case "onbeforeupdate":
+      case "onblur":
+      case "oncellchange":
+      case "onclick":
+      case "ondblClick":
+      case "ondrag":
+      case "ondragend":
+      case "ondragenter":
+      case "ondragleave":
+      case "ondragover":
+      case "ondrop":
+      case "onfinish":
+      case "onfocus":
+      case "onhelp":
+      case "onmousedown":
+      case "onmouseup":
+      case "onmouseover":
+      case "onmousemove":
+      case "onmouseout":
+      case "onkeypress":
+      case "onkeydown":
+      case "onkeyup":
+      case "onload":
+      case "onlosecapture":
+      case "onpropertychange":
+      case "onreadystatechange":
+      case "onrowsdelete":
+      case "onrowenter":
+      case "onrowexit":
+      case "onrowsinserted":
+      case "onstart":
+      case "onscroll":
+      case "onbeforeeditfocus":
+      case "onactivate":
+      case "onbeforedeactivate":
+      case "ondeactivate":
+      case "type":
+      case "codebase":
+      case "id":
+        ret.objAttrs[args[i]] = args[i+1];
+        break;
+      case "width":
+      case "height":
+      case "align":
+      case "vspace": 
+      case "hspace":
+      case "class":
+      case "title":
+      case "accesskey":
+      case "name":
+      case "tabindex":
+        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
+        break;
+      default:
+        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
+    }
+  }
+  ret.objAttrs["classid"] = classid;
+  if (mimeType) ret.embedAttrs["type"] = mimeType;
+  return ret;
+}
+
+
diff --git a/abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js b/abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js
new file mode 100644
index 0000000..5e14062
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/flowplayer-3.1.1.min.js
@@ -0,0 +1,24 @@
+/* 
+ * flowplayer.js 3.1.1. The Flowplayer API
+ * 
+ * Copyright 2009 Flowplayer Oy
+ * 
+ * This file is part of Flowplayer.
+ * 
+ * Flowplayer is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * Flowplayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Flowplayer.  If not, see <http://www.gnu.org/licenses/>.
+ * 
+ * Date: 2009-02-25 16:24:29 -0500 (Wed, 25 Feb 2009)
+ * Revision: 166 
+ */
+(function(){function g(o){console.log("$f.fireEvent",[].slice.call(o))}function k(q){if(!q||typeof q!="object"){return q}var o=new q.constructor();for(var p in q){if(q.hasOwnProperty(p)){o[p]=k(q[p])}}return o}function m(t,q){if(!t){return}var o,p=0,r=t.length;if(r===undefined){for(o in t){if(q.call(t[o],o,t[o])===false){break}}}else{for(var s=t[0];p<r&&q.call(s,p,s)!==false;s=t[++p]){}}return t}function c(o){return document.getElementById(o)}function i(q,p,o){if(typeof p!="object"){return q}if(q&&p){m(p,function(r,s){if(!o||typeof s!="function"){q[r]=s}})}return q}function n(s){var q=s.indexOf(".");if(q!=-1){var p=s.substring(0,q)||"*";var o=s.substring(q+1,s.length);var r=[];m(document.getElementsByTagName(p),function(){if(this.className&&this.className.indexOf(o)!=-1){r.push(this)}});return r}}function f(o){o=o||window.event;if(o.preventDefault){o.stopPropagation();o.preventDefault()}else{o.returnValue=false;o.cancelBubble=true}return false}function j(q,o,p){q[o]=q[o]||[];q[o].push(p)}function e(){return"_"+(""+Math.random()).substring(2,10)}var h=function(t,r,s){var q=this;var p={};var u={};q.index=r;if(typeof t=="string"){t={url:t}}i(this,t,true);m(("Begin*,Start,Pause*,Resume*,Seek*,Stop*,Finish*,LastSecond,Update,BufferFull,BufferEmpty,BufferStop").split(","),function(){var v="on"+this;if(v.indexOf("*")!=-1){v=v.substring(0,v.length-1);var w="onBefore"+v.substring(2);q[w]=function(x){j(u,w,x);return q}}q[v]=function(x){j(u,v,x);return q};if(r==-1){if(q[w]){s[w]=q[w]}if(q[v]){s[v]=q[v]}}});i(this,{onCuepoint:function(x,w){if(arguments.length==1){p.embedded=[null,x];return q}if(typeof x=="number"){x=[x]}var v=e();p[v]=[x,w];if(s.isLoaded()){s._api().fp_addCuepoints(x,r,v)}return q},update:function(w){i(q,w);if(s.isLoaded()){s._api().fp_updateClip(w,r)}var v=s.getConfig();var x=(r==-1)?v.clip:v.playlist[r];i(x,w,true)},_fireEvent:function(v,y,w,A){if(v=="onLoad"){m(p,function(B,C){if(C[0]){s._api().fp_addCuepoints(C[0],r,B)}});return false}A=A||q;if(v=="onCuepoint"){var z=p[y];if(z){return z[1].call(s,A,w)}}if(v=="onStart"||v=="onUpdate"||v=="onResume"){i(A,y);if(!A.duration){A.duration=y.metaData.duration}else{A.fullDuration=y.metaData.duration}}var x=true;m(u[v],function(){x=this.call(s,A,y,w)});return x}});if(t.onCuepoint){var o=t.onCuepoint;q.onCuepoint.apply(q,typeof o=="function"?[o]:o);delete t.onCuepoint}m(t,function(v,w){if(typeof w=="function"){j(u,v,w);delete t[v]}});if(r==-1){s.onCuepoint=this.onCuepoint}};var l=function(p,r,q,t){var s={};var o=this;var u=false;if(t){i(s,t)}m(r,function(v,w){if(typeof w=="function"){s[v]=w;delete r[v]}});i(this,{animate:function(y,z,x){if(!y){return o}if(typeof z=="function"){x=z;z=500}if(typeof y=="string"){var w=y;y={};y[w]=z;z=500}if(x){var v=e();s[v]=x}if(z===undefined){z=500}r=q._api().fp_animate(p,y,z,v);return o},css:function(w,x){if(x!==undefined){var v={};v[w]=x;w=v}r=q._api().fp_css(p,w);i(o,r);return o},show:function(){this.display="block";q._api().fp_showPlugin(p);return o},hide:function(){this.display="none";q._api().fp_hidePlugin(p);return o},toggle:function(){this.display=q._api().fp_togglePlugin(p);return o},fadeTo:function(y,x,w){if(typeof x=="function"){w=x;x=500}if(w){var v=e();s[v]=w}this.display=q._api().fp_fadeTo(p,y,x,v);this.opacity=y;return o},fadeIn:function(w,v){return o.fadeTo(1,w,v)},fadeOut:function(w,v){return o.fadeTo(0,w,v)},getName:function(){return p},getPlayer:function(){return q},_fireEvent:function(w,v,x){if(w=="onUpdate"){var y=q._api().fp_getPlugin(p);if(!y){return}i(o,y);delete o.methods;if(!u){m(y.methods,function(){var A=""+this;o[A]=function(){var B=[].slice.call(arguments);var C=q._api().fp_invoke(p,A,B);return C=="undefined"?o:C}});u=true}}var z=s[w];if(z){z.apply(o,v);if(w.substring(0,1)=="_"){delete s[w]}}}})};function b(o,t,z){var E=this,y=null,x,u,p=[],s={},B={},r,v,w,D,A,q;i(E,{id:function(){return r},isLoaded:function(){return(y!==null)},getParent:function(){return o},hide:function(F){if(F){o.style.height="0px"}if(y){y.style.height="0px"}return E},show:function(){o.style.height=q+"px";if(y){y.style.height=A+"px"}return E},isHidden:function(){return y&&parseInt(y.style.height,10)===0},load:function(F){if(!y&&E._fireEvent("onBeforeLoad")!==false){m(a,function(){this.unload()});x=o.innerHTML;if(x&&!flashembed.isSupported(t.version)){o.innerHTML=""}flashembed(o,t,{config:z});if(F){F.cached=true;j(B,"onLoad",F)}}return E},unload:function(){try{if(!y||y.fp_isFullscreen()){return E}}catch(F){return E}if(x.replace(/\s/g,"")!==""){if(E._fireEvent("onBeforeUnload")===false){return E}y.fp_close();y=null;o.innerHTML=x;E._fireEvent("onUnload")}return E},getClip:function(F){if(F===undefined){F=D}return p[F]},getCommonClip:function(){return u},getPlaylist:function(){return p},getPlugin:function(F){var H=s[F];if(!H&&E.isLoaded()){var G=E._api().fp_getPlugin(F);if(G){H=new l(F,G,E);s[F]=H}}return H},getScreen:function(){return E.getPlugin("screen")},getControls:function(){return E.getPlugin("controls")},getConfig:function(F){return F?k(z):z},getFlashParams:function(){return t},loadPlugin:function(I,H,K,J){if(typeof K=="function"){J=K;K={}}var G=J?e():"_";E._api().fp_loadPlugin(I,H,K,G);var F={};F[G]=J;var L=new l(I,null,E,F);s[I]=L;return L},getState:function(){return y?y.fp_getState():-1},play:function(G,F){function H(){if(G!==undefined){E._api().fp_play(G,F)}else{E._api().fp_play()}}if(y){H()}else{E.load(function(){H()})}return E},getVersion:function(){var G="flowplayer.js 3.1.1";if(y){var F=y.fp_getVersion();F.push(G);return F}return G},_api:function(){if(!y){throw"Flowplayer "+E.id()+" not loaded when calling an API method"}return y},setClip:function(F){E.setPlaylist([F]);return E},getIndex:function(){return w}});m(("Click*,Load*,Unload*,Keypress*,Volume*,Mute*,Unmute*,PlaylistReplace,ClipAdd,Fullscreen*,FullscreenExit,Error").split(","),function(){var F="on"+this;if(F.indexOf("*")!=-1){F=F.substring(0,F.length-1);var G="onBefore"+F.substring(2);E[G]=function(H){j(B,G,H);return E}}E[F]=function(H){j(B,F,H);return E}});m(("pause,resume,mute,unmute,stop,toggle,seek,getStatus,getVolume,setVolume,getTime,isPaused,isPlaying,startBuffering,stopBuffering,isFullscreen,toggleFullscreen,reset,close,setPlaylist,addClip").split(","),function(){var F=this;E[F]=function(H,G){if(!y){return E}var I=null;if(H!==undefined&&G!==undefined){I=y["fp_"+F](H,G)}else{I=(H===undefined)?y["fp_"+F]():y["fp_"+F](H)}return I=="undefined"?E:I}});E._fireEvent=function(O){if(typeof O=="string"){O=[O]}var P=O[0],M=O[1],K=O[2],J=O[3],I=0;if(z.debug){g(O)}if(!y&&P=="onLoad"&&M=="player"){y=y||c(v);A=y.clientHeight;m(p,function(){this._fireEvent("onLoad")});m(s,function(Q,R){R._fireEvent("onUpdate")});u._fireEvent("onLoad")}if(P=="onLoad"&&M!="player"){return}if(P=="onError"){if(typeof M=="string"||(typeof M=="number"&&typeof K=="number")){M=K;K=J}}if(P=="onContextMenu"){m(z.contextMenu[M],function(Q,R){R.call(E)});return}if(P=="onPluginEvent"){var F=M.name||M;var G=s[F];if(G){G._fireEvent("onUpdate",M);G._fireEvent(K,O.slice(3))}return}if(P=="onPlaylistReplace"){p=[];var L=0;m(M,function(){p.push(new h(this,L++,E))})}if(P=="onClipAdd"){if(M.isInStream){return}M=new h(M,K,E);p.splice(K,0,M);for(I=K+1;I<p.length;I++){p[I].index++}}var N=true;if(typeof M=="number"&&M<p.length){D=M;var H=p[M];if(H){N=H._fireEvent(P,K,J)}if(!H||N!==false){N=u._fireEvent(P,K,J,H)}}m(B[P],function(){N=this.call(E,M,K);if(this.cached){B[P].splice(I,1)}if(N===false){return false}I++});return N};function C(){if($f(o)){$f(o).getParent().innerHTML="";w=$f(o).getIndex();a[w]=E}else{a.push(E);w=a.length-1}q=parseInt(o.style.height,10)||o.clientHeight;if(typeof t=="string"){t={src:t}}r=o.id||"fp"+e();v=t.id||r+"_api";t.id=v;z.playerId=r;if(typeof z=="string"){z={clip:{url:z}}}if(typeof z.clip=="string"){z.clip={url:z.clip}}z.clip=z.clip||{};if(o.getAttribute("href",2)&&!z.clip.url){z.clip.url=o.getAttribute("href",2)}u=new h(z.clip,-1,E);z.playlist=z.playlist||[z.clip];var F=0;m(z.playlist,function(){var H=this;if(typeof H=="object"&&H.length){H={url:""+H}}m(z.clip,function(I,J){if(J!==undefined&&H[I]===undefined&&typeof J!="function"){H[I]=J}});z.playlist[F]=H;H=new h(H,F,E);p.push(H);F++});m(z,function(H,I){if(typeof I=="function"){j(B,H,I);delete z[H]}});m(z.plugins,function(H,I){if(I){s[H]=new l(H,I,E)}});if(!z.plugins||z.plugins.controls===undefined){s.controls=new l("controls",null,E)}s.canvas=new l("canvas",null,E);t.bgcolor=t.bgcolor||"#000000";t.version=t.version||[9,0];t.expressInstall="http://www.flowplayer.org/swf/expressinstall.swf";function G(H){if(!E.isLoaded()&&E._fireEvent("onBeforeClick")!==false){E.load()}return f(H)}x=o.innerHTML;if(x.replace(/\s/g,"")!==""){if(o.addEventListener){o.addEventListener("click",G,false)}else{if(o.attachEvent){o.attachEvent("onclick",G)}}}else{if(o.addEventListener){o.addEventListener("click",f,false)}E.load()}}if(typeof o=="string"){flashembed.domReady(function(){var F=c(o);if(!F){throw"Flowplayer cannot access element: "+o}else{o=F;C()}})}else{C()}}var a=[];function d(o){this.length=o.length;this.each=function(p){m(o,p)};this.size=function(){return o.length}}window.flowplayer=window.$f=function(){var p=null;var o=arguments[0];if(!arguments.length){m(a,function(){if(this.isLoaded()){p=this;return false}});return p||a[0]}if(arguments.length==1){if(typeof o=="number"){return a[o]}else{if(o=="*"){return new d(a)}m(a,function(){if(this.id()==o.id||this.id()==o||this.getParent()==o){p=this;return false}});return p}}if(arguments.length>1){var r=arguments[1];var q=(arguments.length==3)?arguments[2]:{};if(typeof o=="string"){if(o.indexOf(".")!=-1){var t=[];m(n(o),function(){t.push(new b(this,k(r),k(q)))});return new d(t)}else{var s=c(o);return new b(s!==null?s:o,r,q)}}else{if(o){return new b(o,r,q)}}}return null};i(window.$f,{fireEvent:function(){var o=[].slice.call(arguments);var q=$f(o[0]);return q?q._fireEvent(o.slice(1)):null},addPlugin:function(o,p){b.prototype[o]=p;return $f},each:m,extend:i});if(typeof jQuery=="function"){jQuery.prototype.flowplayer=function(q,p){if(!arguments.length||typeof arguments[0]=="number"){var o=[];this.each(function(){var r=$f(this);if(r){o.push(r)}});return arguments.length?o[arguments[0]]:new d(o)}return this.each(function(){$f(this,k(q),p?k(p):{})})}}})();(function(){var e=typeof jQuery=="function";function i(){if(c.done){return false}var k=document;if(k&&k.getElementsByTagName&&k.getElementById&&k.body){clearInterval(c.timer);c.timer=null;for(var j=0;j<c.ready.length;j++){c.ready[j].call()}c.ready=null;c.done=true}}var c=e?jQuery:function(j){if(c.done){return j()}if(c.timer){c.ready.push(j)}else{c.ready=[j];c.timer=setInterval(i,13)}};function f(k,j){if(j){for(key in j){if(j.hasOwnProperty(key)){k[key]=j[key]}}}return k}function g(j){switch(h(j)){case"string":j=j.replace(new RegExp('(["\\\\])',"g"),"\\$1");j=j.replace(/^\s?(\d+)%/,"$1pct");return'"'+j+'"';case"array":return"["+b(j,function(m){return g(m)}).join(",")+"]";case"function":return'"function()"';case"object":var k=[];for(var l in j){if(j.hasOwnProperty(l)){k.push('"'+l+'":'+g(j[l]))}}return"{"+k.join(",")+"}"}return String(j).replace(/\s/g," ").replace(/\'/g,'"')}function h(k){if(k===null||k===undefined){return false}var j=typeof k;return(j=="object"&&k.push)?"array":j}if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}})}function b(j,m){var l=[];for(var k in j){if(j.hasOwnProperty(k)){l[k]=m(j[k])}}return l}function a(q,s){var o=f({},q);var r=document.all;var m='<object width="'+o.width+'" height="'+o.height+'"';if(r&&!o.id){o.id="_"+(""+Math.random()).substring(9)}if(o.id){m+=' id="'+o.id+'"'}o.src+=((o.src.indexOf("?")!=-1?"&":"?")+Math.random());if(o.w3c||!r){m+=' data="'+o.src+'" type="application/x-shockwave-flash"'}else{m+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}m+=">";if(o.w3c||r){m+='<param name="movie" value="'+o.src+'" />'}o.width=o.height=o.id=o.w3c=o.src=null;for(var j in o){if(o[j]!==null){m+='<param name="'+j+'" value="'+o[j]+'" />'}}var n="";if(s){for(var l in s){if(s[l]!==null){n+=l+"="+(typeof s[l]=="object"?g(s[l]):s[l])+"&"}}n=n.substring(0,n.length-1);m+='<param name="flashvars" value=\''+n+"' />"}m+="</object>";return m}function d(l,o,k){var j=flashembed.getVersion();f(this,{getContainer:function(){return l},getConf:function(){return o},getVersion:function(){return j},getFlashvars:function(){return k},getApi:function(){return l.firstChild},getHTML:function(){return a(o,k)}});var p=o.version;var q=o.expressInstall;var n=!p||flashembed.isSupported(p);if(n){o.onFail=o.version=o.expressInstall=null;l.innerHTML=a(o,k)}else{if(p&&q&&flashembed.isSupported([6,65])){f(o,{src:q});k={MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title};l.innerHTML=a(o,k)}else{if(l.innerHTML.replace(/\s/g,"")!==""){}else{l.innerHTML="<h2>Flash version "+p+" or greater is required</h2><h3>"+(j[0]>0?"Your version is "+j:"You have no flash plugin installed")+"</h3>"+(l.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>");if(l.tagName=="A"){l.onclick=function(){location.href="http://www.adobe.com/go/getflashplayer"}}}}}if(!n&&o.onFail){var m=o.onFail.call(this);if(typeof m=="string"){l.innerHTML=m}}if(document.all){window[o.id]=document.getElementById(o.id)}}window.flashembed=function(k,l,j){if(typeof k=="string"){var m=document.getElementById(k);if(m){k=m}else{c(function(){flashembed(k,l,j)});return}}if(!k){return}var n={width:"100%",height:"100%",allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:null,onFail:null,expressInstall:null,w3c:false};if(typeof l=="string"){l={src:l}}f(n,l);return new d(k,n,j)};f(window.flashembed,{getVersion:function(){var l=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var k=navigator.plugins["Shockwave Flash"].description;if(typeof k!="undefined"){k=k.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var m=parseInt(k.replace(/^(.*)\..*$/,"$1"),10);var q=/r/.test(k)?parseInt(k.replace(/^.*r(.*)$/,"$1"),10):0;l=[m,q]}}else{if(window.ActiveXObject){try{var o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(p){try{o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");l=[6,0];o.AllowScriptAccess="always"}catch(j){if(l[0]==6){return}}try{o=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(n){}}if(typeof o=="object"){k=o.GetVariable("$version");if(typeof k!="undefined"){k=k.replace(/^\S+\s+(.*)$/,"$1").split(",");l=[parseInt(k[0],10),parseInt(k[2],10)]}}}}return l},isSupported:function(j){var l=flashembed.getVersion();var k=(l[0]>j[0])||(l[0]==j[0]&&l[1]>=j[1]);return k},domReady:c,asString:g,getHTML:a});if(e){jQuery.tools=jQuery.tools||{version:{}};jQuery.tools.version.flashembed="1.0.2";jQuery.fn.flashembed=function(k,j){var l=null;this.each(function(){l=flashembed(this,k,j)});return k.api===false?this:l}}})();
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/pngbehavior.htc b/abs/core/local-website/htdocs/linhes/js/pngbehavior.htc
new file mode 100644
index 0000000..4d664d9
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/pngbehavior.htc
@@ -0,0 +1,97 @@
+/**
+ * This is a slightly modified version of Eric Advidsson's pngbehavior.htc
+ * script at http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html
+ *
+ * For usage see license at http://webfx.eae.net/license.html
+ *
+ * It also includes some printing fixes from:
+ * http://www.scss.com.au/family/andrew/webdesign/pngbehavior/
+ *
+ * As well as restricting the versions of IE that it will match, since IE 7 now
+ * deals properly with transparent PNGs.
+ *
+ * @url         $URL$
+ * @date        $Date: 2006-11-13 18:57:43 +0000 (Mon, 13 Nov 2006) $
+ * @version     $Revision: 11730 $
+ * @author      $Author: xris $
+ *
+/**/
+
+<public:component>
+<public:attach event="onpropertychange"           onevent="propertyChanged()" />
+<public:attach event="onbeforeprint" for="window" onevent="beforePrint()"     />
+<public:attach event="onafterprint"  for="window" onevent="afterPrint()"      />
+
+<script type="text/javascript">
+
+// Set this to the URL of your 1x1 transparent gif
+    var blankSrc = "/skins/default/img/spacer.gif";
+
+// Only interact with valid browsers.  Everything after IE 6 supports
+// transparent PNGs natively (yay!)
+    var supported = /MSIE (5\.5|6)/.test(navigator.userAgent) && navigator.platform == "Win32";
+
+/******************************************************************************/
+
+    var realSrc;
+
+    if (supported)
+        fixImage();
+
+    function propertyChanged() {
+        if (supported && event.propertyName == 'src') {
+            var i = element.src.lastIndexOf(blankSrc);
+            if (i == -1 || i != element.src.length - blankSrc.length) {
+                fixImage();
+            }
+        }
+    }
+
+    function fixImage() {
+        if (!supported) return;
+    // Don't set the image to itself (i.e. catch stupid web designer errors)
+        if (element.src == realSrc && element.runtimeStyle.filter != "") {
+            element.src = blankSrc;
+            return;
+        }
+    // Backup the old src
+        if ( ! new RegExp(blankSrc).test(element.src))
+            realSrc = element.src;
+    // Test for png
+        if ( realSrc && /\.png$/.test( realSrc.toLowerCase() ) ) {
+        // Make sure that width and height are preserved
+            var width  = element.width;
+            var height = element.height;
+        // Set blank image
+            element.src = blankSrc;
+        // Set filter
+            element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"
+                                          + encodeURI(realSrc) + "',sizingMethod='scale')";
+        // Restore width and height
+            element.width  = width;
+            element.height = height;
+        }
+    // Otherwise, remove the filter
+        else
+            element.runtimeStyle.filter = "";
+    }
+
+    function beforePrint() {
+        if (realSrc) {
+            supported                   = false;
+            element.src                 = realSrc;
+            element.runtimeStyle.filter = '';
+            supported                   = true;
+        }
+    }
+
+    function afterPrint() {
+        if (realSrc) {
+            var rs      = realSrc;
+            realSrc     = null;
+            element.src = rs;
+        }
+    }
+
+</script>
+</public:component>
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif b/abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif
new file mode 100644
index 0000000..a8948b6
Binary files /dev/null and b/abs/core/local-website/htdocs/linhes/js/prototip/classic_toolbar.gif differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/close.gif b/abs/core/local-website/htdocs/linhes/js/prototip/close.gif
new file mode 100644
index 0000000..25b04d3
Binary files /dev/null and b/abs/core/local-website/htdocs/linhes/js/prototip/close.gif differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif
new file mode 100644
index 0000000..2a919ab
Binary files /dev/null and b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover.gif differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif
new file mode 100644
index 0000000..b063bee
Binary files /dev/null and b/abs/core/local-website/htdocs/linhes/js/prototip/close_hover_red.gif differ
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/prototip.css b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.css
new file mode 100644
index 0000000..7ef6fb5
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.css
@@ -0,0 +1,65 @@
+/* prototip.css : http://www.nickstakenburg.com/projects/prototip */
+.prototip { position: absolute; }
+.prototip .effectWrapper { position: relative; }
+.prototip .tooltip { position: relative; }
+.prototip .toolbar {
+	position: relative;
+	display: block;
+	}
+.prototip .toolbar .title {
+	display: block;
+	position: relative;
+	}
+.prototip .content { clear: both; }
+.prototip .toolbar a.close {
+	position: relative;
+	top: 15px;
+	text-decoration: none;
+	float: right;
+	width: 15px;
+	height: 15px;
+	background: transparent url(close.gif);
+	display: block;
+	line-height: 0;
+	font-size: 0px;
+	border: 0;
+	}
+.prototip .toolbar a.close:hover { background: transparent url(close_hover.gif); }
+
+.iframeShim { 
+	position: absolute;
+	border: 0;
+	margin: 0;	
+    padding: 0;
+    background: none;
+}
+
+/* Tooltip styles */
+.prototip .default { width: 150px; color: #fff; }
+.prototip .default .toolbar { background: #0F6788; font: italic 17px Georgia, serif; }
+.prototip .default .title { padding: 5px; }
+.prototip .default .content { background: #1E90FF; font: 11px Arial, Helvetica, sans-serif; padding: 5px;}
+
+.prototip .pinktip { border: 5px solid #a1a1a1; }
+.prototip .pinktip .toolbar { background: #ff1e53; color: #fff; font: italic 17px Georgia, serif; }
+.prototip .pinktip .title { padding: 5px; }
+.prototip .pinktip .content { background: #fff; color: #555555; font: 11px Arial, Helvetica, sans-serif; padding: 5px; }
+
+.prototip .darktip { width: 250px; border: 5px solid #a1a1a1; }
+.prototip .darktip .toolbar { background: #606060; color: #fff; font: italic 17px Georgia, serif; }
+.prototip .darktip .toolbar a.close { background: url(close_hover.gif);}
+.prototip .darktip .toolbar a.close:hover { background: url(close.gif);}
+.prototip .darktip .title { padding: 5px;}
+.prototip .darktip .content { background: #808080; color: #fff; font: 11px Arial, Helvetica, sans-serif; padding: 5px; }
+
+.prototip .silver { width: 300px; border: 5px solid #cccccc; color: #fff; font: 11px Arial, Helvetica, sans-serif;}
+.prototip .silver .toolbar { background: #2e2e2e; color: #fff; font-weight: bold; }
+.prototip .silver .toolbar a.close:hover { background: url(close_hover_red.gif);}
+.prototip .silver .title { padding: 5px; }
+.prototip .silver .content { background: #fff; color: #666666; padding: 5px;}
+
+.protoClassic { width: 300px; border: 5px solid #8c939c; }
+.protoClassic .toolbar { background: #96b8e2 url(classic_toolbar.gif) top left repeat-y; font-weight: bold; color: #fff;}
+.protoClassic .toolbar a.close:hover { background: url(close_hover_red.gif);}
+.protoClassic .title { padding: 5px; }
+.protoClassic .content { background: #fff; color: #333333; font: 11px Arial, Helvetica, sans-serif; padding: 5px; }
diff --git a/abs/core/local-website/htdocs/linhes/js/prototip/prototip.js b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.js
new file mode 100644
index 0000000..f386a03
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototip/prototip.js
@@ -0,0 +1,506 @@
+//  Prototip 1.2.0_pre1 - 17-12-2007
+
+//  Copyright (c) 2007 Nick Stakenburg (http://www.nickstakenburg.com)
+//
+//  Permission is hereby granted, free of charge, to any person obtaining
+//  a copy of this software and associated documentation files (the
+//  "Software"), to deal in the Software without restriction, including
+//  without limitation the rights to use, copy, modify, merge, publish,
+//  distribute, sublicense, and/or sell copies of the Software, and to
+//  permit persons to whom the Software is furnished to do so, subject to
+//  the following conditions:
+//
+//  The above copyright notice and this permission notice shall be
+//  included in all copies or substantial portions of the Software.
+//
+//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+//  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+//  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+//  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+//  TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+//  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+//  More information on this project:
+//  http://www.nickstakenburg.com/projects/prototip/
+
+var Prototip = {
+  Version: '1.2.0_pre1',
+
+  REQUIRED_Prototype: '1.6.0',
+  REQUIRED_Scriptaculous: '1.8.0',
+
+  start: function() {
+    this.require('Prototype');
+    Tips.initialize();
+    Element.observe(window, 'unload', this.unload);
+  },
+
+  require: function(library) {
+    if ((typeof window[library] == 'undefined') ||
+      (this.convertVersionString(window[library].Version) < this.convertVersionString(this['REQUIRED_' + library])))
+      throw('Prototip requires ' + library + ' >= ' + this['REQUIRED_' + library]);
+  },
+
+  convertVersionString: function(versionString) {
+    var r = versionString.split('.');
+    return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
+  },
+
+  viewport: {
+    getDimensions: function() {
+      var dimensions = { };
+      var B = Prototype.Browser;
+      $w('width height').each(function(d) {
+        var D = d.capitalize();
+        dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
+          (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D];
+        });
+      return dimensions;
+    }
+  },
+
+  capture: function(func) {
+    if (!Prototype.Browser.IE) {
+      func = func.wrap(function(proceed, event) {
+      var rel = event.relatedTarget, cur = event.currentTarget;
+      if (rel && rel.nodeType == Node.TEXT_NODE) rel = rel.parentNode;
+      if (rel && rel != cur && rel.descendantOf && !(rel.descendantOf(cur)))
+        proceed(event);
+      });
+    }
+    return func;
+  },
+
+  unload: function() { Tips.removeAll(); }
+};
+
+var Tips = {
+  // Configuration
+  closeButtons: true,
+  zIndex: 1200,
+
+  tips : [],
+  visible : [],
+
+  initialize: function() {
+    this.zIndexTop = this.zIndex;
+  },
+
+  useEvent : (function(IE) { return {
+    'mouseover': (IE ? 'mouseenter' : 'mouseover'),
+    'mouseout': (IE ? 'mouseleave' : 'mouseout'),
+    'mouseenter': (IE ? 'mouseenter' : 'mouseover'),
+    'mouseleave': (IE ? 'mouseleave' : 'mouseout')
+  };})(Prototype.Browser.IE),
+
+  fixIE: (function(agent) {
+    var version = new RegExp('MSIE ([\\d.]+)').exec(agent);
+    return version ? (parseFloat(version[1]) <= 6) : false;
+  })(navigator.userAgent),
+
+  add: function(tip) {
+    this.tips.push(tip);
+  },
+
+  hasTip: function(element) {
+    if (this.tips.find(function(t){ return t.element == $(element); }))
+      return true;
+    return false;
+  },
+
+  showTip: function(element) {
+    var tip = this.tips.find(function(t){ return t.element == $(element); });
+    if (tip) {
+      tip.show();
+      tip.position();
+    }
+  },
+
+  hideTip: function(element) {
+    var tip = this.tips.find(function(t){ return t.element == $(element); });
+    if (tip)
+      tip.hide();
+  },
+
+  hideAll: function() {
+    this.tips.each(function(tip) { tip.hide(); }.bind(this));
+  },
+
+  remove: function(element) {
+    var tip = this.tips.find(function(t){ return t.element == $(element); });
+    if (tip) {
+      tip.deactivate();
+      if (tip.tooltip) {
+        tip.wrapper.remove();
+        if (Tips.fixIE) tip.iframeShim.remove();
+      }
+      this.tips = this.tips.without(tip);
+    }
+  },
+
+  removeAll: function() {
+    this.tips.each(function(tip) { this.remove(tip.element); }.bind(this));
+  },
+
+  raise: function(tip) {
+    if (tip.highest) return;
+    if (this.visible.length == 0) {
+      this.zIndexTop = this.zIndex;
+      for (var i=0;i<this.tips.length;i++) {
+        this.tips[i].wrapper.style.zIndex = this.zIndex;
+      }
+    }
+    tip.style.zIndex = this.zIndexTop++;
+    for (var i=0;i<this.tips.length;i++) { this.tips[i].wrapper.highest = false; };
+    tip.highest = true;
+  },
+
+  addVisibile: function(tip) {
+    this.removeVisible(tip);
+    this.visible.push(tip);
+  },
+
+  removeVisible: function(tip) {
+    this.visible = this.visible.without(tip);
+  }
+};
+Tips.initialize();
+
+var Tip = Class.create({
+  initialize: function(element, content) {
+    this.element = $(element);
+    Tips.remove(this.element);
+
+    this.content = content;
+
+    var isHooking = (arguments[2] && arguments[2].hook);
+    var isShowOnClick = (arguments[2] && arguments[2].showOn == 'click');
+
+    this.options = Object.extend({
+      className: 'default',                 // see css, this will lead to .prototip .default
+      closeButton: Tips.closeButtons,       // true, false
+      delay: !isShowOnClick ? 0.2 : false,  // seconds before tooltip appears
+      duration: 0.3,                        // duration of the effect
+      effect: false,                        // false, 'appear' or 'blind'
+      hideAfter: false,                     // second before hide after no hover/activity
+      hideOn: 'mouseleave',                 // or any other event, false
+      hook: false,                          // { element: topLeft|topRight|bottomLeft|bottomRight, tip: see element }
+      offset: isHooking ? {x:0, y:0} : {x:16, y:16},
+      fixed: isHooking ? true : false,      // follow the mouse if false
+      showOn: 'mousemove',
+      target: this.element,                 // or another element
+      title: false,
+      viewport: isHooking ? false : true    // keep within viewport if mouse is followed
+    }, arguments[2] || {});
+
+    this.target = $(this.options.target);
+
+    this.setup();
+
+    if (this.options.effect) {
+      Prototip.require('Scriptaculous');
+      this.queue = { position: 'end', limit: 1, scope: this.wrapper.identify() }
+    }
+
+    Tips.add(this);
+    this.activate();
+  },
+
+  setup: function() {
+    this.wrapper = new Element('div', { 'class' : 'prototip' }).setStyle({
+      display: 'none', zIndex: Tips.zIndex });
+    this.wrapper.identify();
+
+    if (Tips.fixIE) {
+      this.iframeShim = new Element('iframe', { 'class' : 'iframeShim', src: 'javascript:false;' }).setStyle({
+        display: 'none', zIndex: Tips.zIndex - 1 });
+    }
+
+    this.tip = new Element('div', { 'class' : 'content' }).insert(this.content);
+    this.tip.insert(new Element('div').setStyle({ clear: 'both' }));
+
+    if (this.options.closeButton || (this.options.hideOn.element && this.options.hideOn.element == 'closeButton'))
+      this.closeButton = new Element('a', { href: '#', 'class' : 'close' });
+  },
+
+  build: function() {
+    if (Tips.fixIE) document.body.appendChild(this.iframeShim).setOpacity(0);
+
+    // effects go smooth with extra wrapper
+    var wrapper = 'wrapper';
+    if (this.options.effect) {
+      this.effectWrapper = this.wrapper.appendChild(new Element('div', { 'class' : 'effectWrapper' }));
+      wrapper = 'effectWrapper';
+    }
+
+    this.tooltip = this[wrapper].appendChild(new Element('div', { 'class' : 'tooltip ' + this.options.className }));
+
+    if (this.options.title || this.options.closeButton) {
+      this.toolbar = this.tooltip.appendChild(new Element('div', { 'class' : 'toolbar' }));
+      this.title = this.toolbar.appendChild(new Element('div', { 'class' : 'title' }).update(this.options.title || ' '));
+    }
+
+    this.tooltip.insert(this.tip);
+    document.body.appendChild(this.wrapper);
+
+    // fixate elements for better positioning and effects
+    var fixate = (this.options.effect) ? [this.wrapper, this.effectWrapper]: [this.wrapper];
+    if (Tips.fixIE) fixate.push(this.iframeShim);
+
+    // fix width
+    var fixedWidth = this.wrapper.getWidth();
+    fixate.invoke('setStyle', { width: fixedWidth + 'px' });
+
+    // make toolbar width fixed
+    if(this.toolbar) {
+      this.wrapper.setStyle({ visibility : 'hidden' }).show();
+      this.toolbar.setStyle({ width: this.toolbar.getWidth() + 'px'});
+      this.wrapper.hide().setStyle({ visibility : 'visible' });
+    }
+
+    // add close button
+    if (this.closeButton)
+      this.title.insert({ top: this.closeButton }).insert(new Element('div').setStyle({ clear: 'both' }));
+
+    var fixedHeight = this.wrapper.getHeight();
+    fixate.invoke('setStyle', { width: fixedWidth + 'px', height: fixedHeight + 'px' });
+
+    this[this.options.effect ? wrapper : 'tooltip'].hide();
+  },
+
+  activate: function() {
+    this.eventShow = this.showDelayed.bindAsEventListener(this);
+    this.eventHide = this.hide.bindAsEventListener(this);
+
+    // if fixed use mouseover instead of mousemove for less event calls
+    if (this.options.fixed && this.options.showOn == 'mousemove') this.options.showOn = 'mouseover';
+
+    if(this.options.showOn == this.options.hideOn) {
+      this.eventToggle = this.toggle.bindAsEventListener(this);
+      this.element.observe(this.options.showOn, this.eventToggle);
+    }
+
+    var hideOptions = {
+      'element': this.eventToggle ? [] : [this.element],
+      'target': this.eventToggle ? [] : [this.target],
+      'tip': this.eventToggle ? [] : [this.wrapper],
+      'closeButton': [],
+      'none': []
+    };
+    var el = this.options.hideOn.element;
+    this.hideElement = el || (!this.options.hideOn ? 'none' : 'element');
+    this.hideTargets = hideOptions[this.hideElement];
+    if (!this.hideTargets && el && Object.isString(el)) this.hideTargets = this.tip.select(el);
+
+    var realEvent = {'mouseenter': 'mouseover', 'mouseleave': 'mouseout'};
+    $w('show hide').each(function(e) {
+      var E = e.capitalize();
+      var event = (this.options[e + 'On'].event || this.options[e + 'On']);
+      this[e + 'Action'] = event;
+      if (['mouseenter', 'mouseleave', 'mouseover', 'mouseout'].include(event)) {
+        this[e + 'Action'] = (Tips.useEvent[event] || event);
+        this['event' + E] = Prototip.capture(this['event' + E]);
+      }
+    }.bind(this));
+
+    if (!this.eventToggle) this.element.observe(this.options.showOn, this.eventShow);
+    if (this.hideTargets) this.hideTargets.invoke('observe', this.hideAction, this.eventHide);
+
+    // add postion observer to moving showOn click tips
+    if (!this.options.fixed && this.options.showOn == 'click') {
+      this.eventPosition = this.position.bindAsEventListener(this);
+      this.element.observe('mousemove', this.eventPosition);
+    }
+
+    // close button
+    this.buttonEvent = this.hide.wrap(function(proceed, event) {
+      event.stop();
+      proceed(event);
+    }).bindAsEventListener(this);
+    if (this.closeButton) this.closeButton.observe('click', this.buttonEvent);
+
+    // delay timeout
+    if (this.options.showOn != 'click' && (this.hideElement != 'element')) {
+      this.eventCheckDelay = Prototip.capture(function() {
+        this.clearTimer('show');
+      }).bindAsEventListener(this);
+      this.element.observe(Tips.useEvent['mouseout'], this.eventCheckDelay);
+    }
+
+    // activity (hideAfter, raise)
+    var elements = [this.element, this.wrapper];
+    this.activityEnter = Prototip.capture(function() {
+      Tips.raise(this.wrapper);
+      this.cancelHideAfter();
+    }).bindAsEventListener(this);
+    this.activityLeave = Prototip.capture(this.hideAfter).bindAsEventListener(this);
+    elements.invoke('observe', Tips.useEvent['mouseover'], this.activityEnter);
+    elements.invoke('observe', Tips.useEvent['mouseout'], this.activityLeave);
+  },
+
+  deactivate: function() {
+    if(this.options.showOn == this.options.hideOn)
+      this.element.stopObserving(this.options.showOn, this.eventToggle);
+    else {
+      this.element.stopObserving(this.options.showOn, this.eventShow);
+      if (this.hideTargets) this.hideTargets.invoke('stopObserving');
+    }
+
+    if (this.eventPosition) this.element.stopObserving('mousemove', this.eventPosition);
+    if (this.closeButton) this.closeButton.stopObserving();
+    if (this.eventCheckDelay) this.element.stopObserving('mouseout', this.eventCheckDelay);
+    this.wrapper.stopObserving();
+    this.element.stopObserving(Tips.useEvent['mouseover'], this.activityEnter);
+    this.element.stopObserving(Tips.useEvent['mouseout'], this.activityLeave);
+  },
+
+  showDelayed: function(event) {
+    if (!this.tooltip) this.build();
+    this.position(event); // follow mouse
+    if (this.wrapper.visible()) return;
+
+    this.clearTimer('show');
+    this.showTimer = this.show.bind(this).delay(this.options.delay);
+  },
+
+  clearTimer: function(timer) {
+    if (this[timer + 'Timer']) clearTimeout(this[timer + 'Timer']);
+  },
+
+  show: function() {
+    if (!this.tooltip) this.build();
+    if (this.wrapper.visible() && this.options.effect != 'appear') return;
+
+    if (Tips.fixIE) this.iframeShim.show();
+    Tips.addVisibile(this.wrapper);
+    this.wrapper.show();
+    if (!this.options.effect) this.tooltip.show();
+    else {
+      if (this.activeEffect) Effect.Queues.get(this.queue.scope).remove(this.activeEffect);
+      this.activeEffect = Effect[Effect.PAIRS[this.options.effect][0]](this.effectWrapper,
+        { duration: this.options.duration, queue: this.queue});
+    }
+  },
+
+  hideAfter: function(event) {
+    if (!this.options.hideAfter) return;
+    this.cancelHideAfter();
+    this.hideAfterTimer = this.hide.bind(this).delay(this.options.hideAfter);
+  },
+
+  cancelHideAfter: function() {
+    if (this.options.hideAfter) this.clearTimer('hideAfter');
+  },
+
+  hide: function() {
+    this.clearTimer('show');
+    if(!this.wrapper.visible()) return;
+
+    if (!this.options.effect) {
+      if (Tips.fixIE) this.iframeShim.hide();
+      this.tooltip.hide();
+      this.wrapper.hide();
+      Tips.removeVisible(this.wrapper);
+    }
+    else {
+      if (this.activeEffect) Effect.Queues.get(this.queue.scope).remove(this.activeEffect);
+      this.activeEffect = Effect[Effect.PAIRS[this.options.effect][1]](this.effectWrapper,
+        { duration: this.options.duration, queue: this.queue, afterFinish: function() {
+        if (Tips.fixIE) this.iframeShim.hide();
+        this.wrapper.hide();
+        Tips.removeVisible(this.wrapper);
+      }.bind(this)});
+    }
+  },
+
+  toggle: function(event) {
+    if (this.wrapper && this.wrapper.visible()) this.hide(event);
+    else this.showDelayed(event);
+  },
+
+  position: function(event) {
+    Tips.raise(this.wrapper);
+
+    var offset = {left: this.options.offset.x, top: this.options.offset.y};
+    var targetPosition = Position.cumulativeOffset(this.target);
+    var tipd = this.wrapper.getDimensions();
+
+    if (event)
+        var pos = { left: (this.options.fixed) ? targetPosition[0] : Event.pointerX(event),
+          top: (this.options.fixed) ? targetPosition[1] : Event.pointerY(event) };
+    else
+        var pos = { left: targetPosition[0], top: targetPosition[1] };
+
+    // add offsets
+    pos.left += offset.left;
+    pos.top += offset.top;
+
+    if (this.options.hook) {
+      var dims = {target: this.target.getDimensions(), tip: tipd}
+      var hooks = {target: Position.cumulativeOffset(this.target), tip: Position.cumulativeOffset(this.target)}
+
+      for (var z in hooks) {
+        switch (this.options.hook[z]) {
+          case 'topRight':
+            hooks[z][0] += dims[z].width;
+            break;
+          case 'topMiddle':
+            hooks[z][0] += (dims[z].width / 2);
+            break;
+          case 'rightMiddle':
+            hooks[z][0] += dims[z].width;
+            hooks[z][1] += (dims[z].height / 2);
+            break;
+          case 'bottomLeft':
+            hooks[z][1] += dims[z].height;
+            break;
+          case 'bottomRight':
+            hooks[z][0] += dims[z].width;
+            hooks[z][1] += dims[z].height;
+            break;
+          case 'bottomMiddle':
+            hooks[z][0] += (dims[z].width / 2);
+            hooks[z][1] += dims[z].height;
+            break;
+          case 'leftMiddle':
+            hooks[z][1] += (dims[z].height / 2);
+            break;
+        }
+      }
+
+      // move based on hooks
+      pos.left += -1*(hooks.tip[0] - hooks.target[0]);
+      pos.top += -1*(hooks.tip[1] - hooks.target[1]);
+    }
+
+    // move tooltip when there is a different target or when we don't have a event to position to
+    if ((!this.options.fixed && this.element !== this.target) || !event) {
+      var elementPosition = Position.cumulativeOffset(this.element);
+      pos.left += -1*(elementPosition[0] - targetPosition[0]);
+      pos.top += -1*(elementPosition[1] - targetPosition[1]);
+    }
+
+    if (!this.options.fixed && this.options.viewport) {
+      var scroll = document.viewport.getScrollOffsets();
+      var viewport = Prototip.viewport.getDimensions();
+      var pair = {left: 'width', top: 'height'};
+
+      for(var z in pair) {
+        if ((pos[z] + tipd[pair[z]] - scroll[z]) > viewport[pair[z]])
+          pos[z] = pos[z] - tipd[pair[z]] - 2*offset[z];
+      }
+    }
+
+    // Ensure that the tooltip does not render off screen left edge
+    if ( pos.left < 0 ) {
+      pos.left = 0;
+    }
+
+    var setPos = { left: pos.left + 'px', top: pos.top + 'px' };
+    this.wrapper.setStyle(setPos);
+    if (Tips.fixIE) this.iframeShim.setStyle(setPos);
+  }
+});
+
+Prototip.start();
diff --git a/abs/core/local-website/htdocs/linhes/js/prototype.js b/abs/core/local-website/htdocs/linhes/js/prototype.js
new file mode 100644
index 0000000..dfe8ab4
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/prototype.js
@@ -0,0 +1,4320 @@
+/*  Prototype JavaScript framework, version 1.6.0.3
+ *  (c) 2005-2008 Sam Stephenson
+ *
+ *  Prototype is freely distributable under the terms of an MIT-style license.
+ *  For details, see the Prototype web site: http://www.prototypejs.org/
+ *
+ *--------------------------------------------------------------------------*/
+
+var Prototype = {
+  Version: '1.6.0.3',
+
+  Browser: {
+    IE:     !!(window.attachEvent &&
+      navigator.userAgent.indexOf('Opera') === -1),
+    Opera:  navigator.userAgent.indexOf('Opera') > -1,
+    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
+    Gecko:  navigator.userAgent.indexOf('Gecko') > -1 &&
+      navigator.userAgent.indexOf('KHTML') === -1,
+    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/)
+  },
+
+  BrowserFeatures: {
+    XPath: !!document.evaluate,
+    SelectorsAPI: !!document.querySelector,
+    ElementExtensions: !!window.HTMLElement,
+    SpecificElementExtensions:
+      document.createElement('div')['__proto__'] &&
+      document.createElement('div')['__proto__'] !==
+        document.createElement('form')['__proto__']
+  },
+
+  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
+  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
+
+  emptyFunction: function() { },
+  K: function(x) { return x }
+};
+
+if (Prototype.Browser.MobileSafari)
+  Prototype.BrowserFeatures.SpecificElementExtensions = false;
+
+
+/* Based on Alex Arnell's inheritance implementation. */
+var Class = {
+  create: function() {
+    var parent = null, properties = $A(arguments);
+    if (Object.isFunction(properties[0]))
+      parent = properties.shift();
+
+    function klass() {
+      this.initialize.apply(this, arguments);
+    }
+
+    Object.extend(klass, Class.Methods);
+    klass.superclass = parent;
+    klass.subclasses = [];
+
+    if (parent) {
+      var subclass = function() { };
+      subclass.prototype = parent.prototype;
+      klass.prototype = new subclass;
+      parent.subclasses.push(klass);
+    }
+
+    for (var i = 0; i < properties.length; i++)
+      klass.addMethods(properties[i]);
+
+    if (!klass.prototype.initialize)
+      klass.prototype.initialize = Prototype.emptyFunction;
+
+    klass.prototype.constructor = klass;
+
+    return klass;
+  }
+};
+
+Class.Methods = {
+  addMethods: function(source) {
+    var ancestor   = this.superclass && this.superclass.prototype;
+    var properties = Object.keys(source);
+
+    if (!Object.keys({ toString: true }).length)
+      properties.push("toString", "valueOf");
+
+    for (var i = 0, length = properties.length; i < length; i++) {
+      var property = properties[i], value = source[property];
+      if (ancestor && Object.isFunction(value) &&
+          value.argumentNames().first() == "$super") {
+        var method = value;
+        value = (function(m) {
+          return function() { return ancestor[m].apply(this, arguments) };
+        })(property).wrap(method);
+
+        value.valueOf = method.valueOf.bind(method);
+        value.toString = method.toString.bind(method);
+      }
+      this.prototype[property] = value;
+    }
+
+    return this;
+  }
+};
+
+var Abstract = { };
+
+Object.extend = function(destination, source) {
+  for (var property in source)
+    destination[property] = source[property];
+  return destination;
+};
+
+Object.extend(Object, {
+  inspect: function(object) {
+    try {
+      if (Object.isUndefined(object)) return 'undefined';
+      if (object === null) return 'null';
+      return object.inspect ? object.inspect() : String(object);
+    } catch (e) {
+      if (e instanceof RangeError) return '...';
+      throw e;
+    }
+  },
+
+  toJSON: function(object) {
+    var type = typeof object;
+    switch (type) {
+      case 'undefined':
+      case 'function':
+      case 'unknown': return;
+      case 'boolean': return object.toString();
+    }
+
+    if (object === null) return 'null';
+    if (object.toJSON) return object.toJSON();
+    if (Object.isElement(object)) return;
+
+    var results = [];
+    for (var property in object) {
+      var value = Object.toJSON(object[property]);
+      if (!Object.isUndefined(value))
+        results.push(property.toJSON() + ': ' + value);
+    }
+
+    return '{' + results.join(', ') + '}';
+  },
+
+  toQueryString: function(object) {
+    return $H(object).toQueryString();
+  },
+
+  toHTML: function(object) {
+    return object && object.toHTML ? object.toHTML() : String.interpret(object);
+  },
+
+  keys: function(object) {
+    var keys = [];
+    for (var property in object)
+      keys.push(property);
+    return keys;
+  },
+
+  values: function(object) {
+    var values = [];
+    for (var property in object)
+      values.push(object[property]);
+    return values;
+  },
+
+  clone: function(object) {
+    return Object.extend({ }, object);
+  },
+
+  isElement: function(object) {
+    return !!(object && object.nodeType == 1);
+  },
+
+  isArray: function(object) {
+    return object != null && typeof object == "object" &&
+      'splice' in object && 'join' in object;
+  },
+
+  isHash: function(object) {
+    return object instanceof Hash;
+  },
+
+  isFunction: function(object) {
+    return typeof object == "function";
+  },
+
+  isString: function(object) {
+    return typeof object == "string";
+  },
+
+  isNumber: function(object) {
+    return typeof object == "number";
+  },
+
+  isUndefined: function(object) {
+    return typeof object == "undefined";
+  }
+});
+
+Object.extend(Function.prototype, {
+  argumentNames: function() {
+    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1]
+      .replace(/\s+/g, '').split(',');
+    return names.length == 1 && !names[0] ? [] : names;
+  },
+
+  bind: function() {
+    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function() {
+      return __method.apply(object, args.concat($A(arguments)));
+    }
+  },
+
+  bindAsEventListener: function() {
+    var __method = this, args = $A(arguments), object = args.shift();
+    return function(event) {
+      return __method.apply(object, [event || window.event].concat(args));
+    }
+  },
+
+  curry: function() {
+    if (!arguments.length) return this;
+    var __method = this, args = $A(arguments);
+    return function() {
+      return __method.apply(this, args.concat($A(arguments)));
+    }
+  },
+
+  delay: function() {
+    var __method = this, args = $A(arguments), timeout = args.shift() * 1000;
+    return window.setTimeout(function() {
+      return __method.apply(__method, args);
+    }, timeout);
+  },
+
+  defer: function() {
+    var args = [0.01].concat($A(arguments));
+    return this.delay.apply(this, args);
+  },
+
+  wrap: function(wrapper) {
+    var __method = this;
+    return function() {
+      return wrapper.apply(this, [__method.bind(this)].concat($A(arguments)));
+    }
+  },
+
+  methodize: function() {
+    if (this._methodized) return this._methodized;
+    var __method = this;
+    return this._methodized = function() {
+      return __method.apply(null, [this].concat($A(arguments)));
+    };
+  }
+});
+
+Date.prototype.toJSON = function() {
+  return '"' + this.getUTCFullYear() + '-' +
+    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
+    this.getUTCDate().toPaddedString(2) + 'T' +
+    this.getUTCHours().toPaddedString(2) + ':' +
+    this.getUTCMinutes().toPaddedString(2) + ':' +
+    this.getUTCSeconds().toPaddedString(2) + 'Z"';
+};
+
+var Try = {
+  these: function() {
+    var returnValue;
+
+    for (var i = 0, length = arguments.length; i < length; i++) {
+      var lambda = arguments[i];
+      try {
+        returnValue = lambda();
+        break;
+      } catch (e) { }
+    }
+
+    return returnValue;
+  }
+};
+
+RegExp.prototype.match = RegExp.prototype.test;
+
+RegExp.escape = function(str) {
+  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
+};
+
+/*--------------------------------------------------------------------------*/
+
+var PeriodicalExecuter = Class.create({
+  initialize: function(callback, frequency) {
+    this.callback = callback;
+    this.frequency = frequency;
+    this.currentlyExecuting = false;
+
+    this.registerCallback();
+  },
+
+  registerCallback: function() {
+    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+  },
+
+  execute: function() {
+    this.callback(this);
+  },
+
+  stop: function() {
+    if (!this.timer) return;
+    clearInterval(this.timer);
+    this.timer = null;
+  },
+
+  onTimerEvent: function() {
+    if (!this.currentlyExecuting) {
+      try {
+        this.currentlyExecuting = true;
+        this.execute();
+      } finally {
+        this.currentlyExecuting = false;
+      }
+    }
+  }
+});
+Object.extend(String, {
+  interpret: function(value) {
+    return value == null ? '' : String(value);
+  },
+  specialChar: {
+    '\b': '\\b',
+    '\t': '\\t',
+    '\n': '\\n',
+    '\f': '\\f',
+    '\r': '\\r',
+    '\\': '\\\\'
+  }
+});
+
+Object.extend(String.prototype, {
+  gsub: function(pattern, replacement) {
+    var result = '', source = this, match;
+    replacement = arguments.callee.prepareReplacement(replacement);
+
+    while (source.length > 0) {
+      if (match = source.match(pattern)) {
+        result += source.slice(0, match.index);
+        result += String.interpret(replacement(match));
+        source  = source.slice(match.index + match[0].length);
+      } else {
+        result += source, source = '';
+      }
+    }
+    return result;
+  },
+
+  sub: function(pattern, replacement, count) {
+    replacement = this.gsub.prepareReplacement(replacement);
+    count = Object.isUndefined(count) ? 1 : count;
+
+    return this.gsub(pattern, function(match) {
+      if (--count < 0) return match[0];
+      return replacement(match);
+    });
+  },
+
+  scan: function(pattern, iterator) {
+    this.gsub(pattern, iterator);
+    return String(this);
+  },
+
+  truncate: function(length, truncation) {
+    length = length || 30;
+    truncation = Object.isUndefined(truncation) ? '...' : truncation;
+    return this.length > length ?
+      this.slice(0, length - truncation.length) + truncation : String(this);
+  },
+
+  strip: function() {
+    return this.replace(/^\s+/, '').replace(/\s+$/, '');
+  },
+
+  stripTags: function() {
+    return this.replace(/<\/?[^>]+>/gi, '');
+  },
+
+  stripScripts: function() {
+    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+  },
+
+  extractScripts: function() {
+    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+    return (this.match(matchAll) || []).map(function(scriptTag) {
+      return (scriptTag.match(matchOne) || ['', ''])[1];
+    });
+  },
+
+  evalScripts: function() {
+    return this.extractScripts().map(function(script) { return eval(script) });
+  },
+
+  escapeHTML: function() {
+    var self = arguments.callee;
+    self.text.data = this;
+    return self.div.innerHTML;
+  },
+
+  unescapeHTML: function() {
+    var div = new Element('div');
+    div.innerHTML = this.stripTags();
+    return div.childNodes[0] ? (div.childNodes.length > 1 ?
+      $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
+      div.childNodes[0].nodeValue) : '';
+  },
+
+  toQueryParams: function(separator) {
+    var match = this.strip().match(/([^?#]*)(#.*)?$/);
+    if (!match) return { };
+
+    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
+      if ((pair = pair.split('='))[0]) {
+        var key = decodeURIComponent(pair.shift());
+        var value = pair.length > 1 ? pair.join('=') : pair[0];
+        if (value != undefined) value = decodeURIComponent(value);
+
+        if (key in hash) {
+          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
+          hash[key].push(value);
+        }
+        else hash[key] = value;
+      }
+      return hash;
+    });
+  },
+
+  toArray: function() {
+    return this.split('');
+  },
+
+  succ: function() {
+    return this.slice(0, this.length - 1) +
+      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
+  },
+
+  times: function(count) {
+    return count < 1 ? '' : new Array(count + 1).join(this);
+  },
+
+  camelize: function() {
+    var parts = this.split('-'), len = parts.length;
+    if (len == 1) return parts[0];
+
+    var camelized = this.charAt(0) == '-'
+      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
+      : parts[0];
+
+    for (var i = 1; i < len; i++)
+      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
+
+    return camelized;
+  },
+
+  capitalize: function() {
+    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
+  },
+
+  underscore: function() {
+    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
+  },
+
+  dasherize: function() {
+    return this.gsub(/_/,'-');
+  },
+
+  inspect: function(useDoubleQuotes) {
+    var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
+      var character = String.specialChar[match[0]];
+      return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
+    });
+    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
+    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
+  },
+
+  toJSON: function() {
+    return this.inspect(true);
+  },
+
+  unfilterJSON: function(filter) {
+    return this.sub(filter || Prototype.JSONFilter, '#{1}');
+  },
+
+  isJSON: function() {
+    var str = this;
+    if (str.blank()) return false;
+    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
+    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
+  },
+
+  evalJSON: function(sanitize) {
+    var json = this.unfilterJSON();
+    try {
+      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
+    } catch (e) { }
+    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
+  },
+
+  include: function(pattern) {
+    return this.indexOf(pattern) > -1;
+  },
+
+  startsWith: function(pattern) {
+    return this.indexOf(pattern) === 0;
+  },
+
+  endsWith: function(pattern) {
+    var d = this.length - pattern.length;
+    return d >= 0 && this.lastIndexOf(pattern) === d;
+  },
+
+  empty: function() {
+    return this == '';
+  },
+
+  blank: function() {
+    return /^\s*$/.test(this);
+  },
+
+  interpolate: function(object, pattern) {
+    return new Template(this, pattern).evaluate(object);
+  }
+});
+
+if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
+  escapeHTML: function() {
+    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
+  },
+  unescapeHTML: function() {
+    return this.stripTags().replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>');
+  }
+});
+
+String.prototype.gsub.prepareReplacement = function(replacement) {
+  if (Object.isFunction(replacement)) return replacement;
+  var template = new Template(replacement);
+  return function(match) { return template.evaluate(match) };
+};
+
+String.prototype.parseQuery = String.prototype.toQueryParams;
+
+Object.extend(String.prototype.escapeHTML, {
+  div:  document.createElement('div'),
+  text: document.createTextNode('')
+});
+
+String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text);
+
+var Template = Class.create({
+  initialize: function(template, pattern) {
+    this.template = template.toString();
+    this.pattern = pattern || Template.Pattern;
+  },
+
+  evaluate: function(object) {
+    if (Object.isFunction(object.toTemplateReplacements))
+      object = object.toTemplateReplacements();
+
+    return this.template.gsub(this.pattern, function(match) {
+      if (object == null) return '';
+
+      var before = match[1] || '';
+      if (before == '\\') return match[2];
+
+      var ctx = object, expr = match[3];
+      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
+      match = pattern.exec(expr);
+      if (match == null) return before;
+
+      while (match != null) {
+        var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1];
+        ctx = ctx[comp];
+        if (null == ctx || '' == match[3]) break;
+        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
+        match = pattern.exec(expr);
+      }
+
+      return before + String.interpret(ctx);
+    });
+  }
+});
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+
+var $break = { };
+
+var Enumerable = {
+  each: function(iterator, context) {
+    var index = 0;
+    try {
+      this._each(function(value) {
+        iterator.call(context, value, index++);
+      });
+    } catch (e) {
+      if (e != $break) throw e;
+    }
+    return this;
+  },
+
+  eachSlice: function(number, iterator, context) {
+    var index = -number, slices = [], array = this.toArray();
+    if (number < 1) return array;
+    while ((index += number) < array.length)
+      slices.push(array.slice(index, index+number));
+    return slices.collect(iterator, context);
+  },
+
+  all: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result = true;
+    this.each(function(value, index) {
+      result = result && !!iterator.call(context, value, index);
+      if (!result) throw $break;
+    });
+    return result;
+  },
+
+  any: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result = false;
+    this.each(function(value, index) {
+      if (result = !!iterator.call(context, value, index))
+        throw $break;
+    });
+    return result;
+  },
+
+  collect: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var results = [];
+    this.each(function(value, index) {
+      results.push(iterator.call(context, value, index));
+    });
+    return results;
+  },
+
+  detect: function(iterator, context) {
+    var result;
+    this.each(function(value, index) {
+      if (iterator.call(context, value, index)) {
+        result = value;
+        throw $break;
+      }
+    });
+    return result;
+  },
+
+  findAll: function(iterator, context) {
+    var results = [];
+    this.each(function(value, index) {
+      if (iterator.call(context, value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  grep: function(filter, iterator, context) {
+    iterator = iterator || Prototype.K;
+    var results = [];
+
+    if (Object.isString(filter))
+      filter = new RegExp(filter);
+
+    this.each(function(value, index) {
+      if (filter.match(value))
+        results.push(iterator.call(context, value, index));
+    });
+    return results;
+  },
+
+  include: function(object) {
+    if (Object.isFunction(this.indexOf))
+      if (this.indexOf(object) != -1) return true;
+
+    var found = false;
+    this.each(function(value) {
+      if (value == object) {
+        found = true;
+        throw $break;
+      }
+    });
+    return found;
+  },
+
+  inGroupsOf: function(number, fillWith) {
+    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
+    return this.eachSlice(number, function(slice) {
+      while(slice.length < number) slice.push(fillWith);
+      return slice;
+    });
+  },
+
+  inject: function(memo, iterator, context) {
+    this.each(function(value, index) {
+      memo = iterator.call(context, memo, value, index);
+    });
+    return memo;
+  },
+
+  invoke: function(method) {
+    var args = $A(arguments).slice(1);
+    return this.map(function(value) {
+      return value[method].apply(value, args);
+    });
+  },
+
+  max: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator.call(context, value, index);
+      if (result == null || value >= result)
+        result = value;
+    });
+    return result;
+  },
+
+  min: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var result;
+    this.each(function(value, index) {
+      value = iterator.call(context, value, index);
+      if (result == null || value < result)
+        result = value;
+    });
+    return result;
+  },
+
+  partition: function(iterator, context) {
+    iterator = iterator || Prototype.K;
+    var trues = [], falses = [];
+    this.each(function(value, index) {
+      (iterator.call(context, value, index) ?
+        trues : falses).push(value);
+    });
+    return [trues, falses];
+  },
+
+  pluck: function(property) {
+    var results = [];
+    this.each(function(value) {
+      results.push(value[property]);
+    });
+    return results;
+  },
+
+  reject: function(iterator, context) {
+    var results = [];
+    this.each(function(value, index) {
+      if (!iterator.call(context, value, index))
+        results.push(value);
+    });
+    return results;
+  },
+
+  sortBy: function(iterator, context) {
+    return this.map(function(value, index) {
+      return {
+        value: value,
+        criteria: iterator.call(context, value, index)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a < b ? -1 : a > b ? 1 : 0;
+    }).pluck('value');
+  },
+
+  toArray: function() {
+    return this.map();
+  },
+
+  zip: function() {
+    var iterator = Prototype.K, args = $A(arguments);
+    if (Object.isFunction(args.last()))
+      iterator = args.pop();
+
+    var collections = [this].concat(args).map($A);
+    return this.map(function(value, index) {
+      return iterator(collections.pluck(index));
+    });
+  },
+
+  size: function() {
+    return this.toArray().length;
+  },
+
+  inspect: function() {
+    return '#<Enumerable:' + this.toArray().inspect() + '>';
+  }
+};
+
+Object.extend(Enumerable, {
+  map:     Enumerable.collect,
+  find:    Enumerable.detect,
+  select:  Enumerable.findAll,
+  filter:  Enumerable.findAll,
+  member:  Enumerable.include,
+  entries: Enumerable.toArray,
+  every:   Enumerable.all,
+  some:    Enumerable.any
+});
+function $A(iterable) {
+  if (!iterable) return [];
+  if (iterable.toArray) return iterable.toArray();
+  var length = iterable.length || 0, results = new Array(length);
+  while (length--) results[length] = iterable[length];
+  return results;
+}
+
+if (Prototype.Browser.WebKit) {
+  $A = function(iterable) {
+    if (!iterable) return [];
+    // In Safari, only use the `toArray` method if it's not a NodeList.
+    // A NodeList is a function, has an function `item` property, and a numeric
+    // `length` property. Adapted from Google Doctype.
+    if (!(typeof iterable === 'function' && typeof iterable.length ===
+        'number' && typeof iterable.item === 'function') && iterable.toArray)
+      return iterable.toArray();
+    var length = iterable.length || 0, results = new Array(length);
+    while (length--) results[length] = iterable[length];
+    return results;
+  };
+}
+
+Array.from = $A;
+
+Object.extend(Array.prototype, Enumerable);
+
+if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse;
+
+Object.extend(Array.prototype, {
+  _each: function(iterator) {
+    for (var i = 0, length = this.length; i < length; i++)
+      iterator(this[i]);
+  },
+
+  clear: function() {
+    this.length = 0;
+    return this;
+  },
+
+  first: function() {
+    return this[0];
+  },
+
+  last: function() {
+    return this[this.length - 1];
+  },
+
+  compact: function() {
+    return this.select(function(value) {
+      return value != null;
+    });
+  },
+
+  flatten: function() {
+    return this.inject([], function(array, value) {
+      return array.concat(Object.isArray(value) ?
+        value.flatten() : [value]);
+    });
+  },
+
+  without: function() {
+    var values = $A(arguments);
+    return this.select(function(value) {
+      return !values.include(value);
+    });
+  },
+
+  reverse: function(inline) {
+    return (inline !== false ? this : this.toArray())._reverse();
+  },
+
+  reduce: function() {
+    return this.length > 1 ? this : this[0];
+  },
+
+  uniq: function(sorted) {
+    return this.inject([], function(array, value, index) {
+      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
+        array.push(value);
+      return array;
+    });
+  },
+
+  intersect: function(array) {
+    return this.uniq().findAll(function(item) {
+      return array.detect(function(value) { return item === value });
+    });
+  },
+
+  clone: function() {
+    return [].concat(this);
+  },
+
+  size: function() {
+    return this.length;
+  },
+
+  inspect: function() {
+    return '[' + this.map(Object.inspect).join(', ') + ']';
+  },
+
+  toJSON: function() {
+    var results = [];
+    this.each(function(object) {
+      var value = Object.toJSON(object);
+      if (!Object.isUndefined(value)) results.push(value);
+    });
+    return '[' + results.join(', ') + ']';
+  }
+});
+
+// use native browser JS 1.6 implementation if available
+if (Object.isFunction(Array.prototype.forEach))
+  Array.prototype._each = Array.prototype.forEach;
+
+if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) {
+  i || (i = 0);
+  var length = this.length;
+  if (i < 0) i = length + i;
+  for (; i < length; i++)
+    if (this[i] === item) return i;
+  return -1;
+};
+
+if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) {
+  i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
+  var n = this.slice(0, i).reverse().indexOf(item);
+  return (n < 0) ? n : i - n - 1;
+};
+
+Array.prototype.toArray = Array.prototype.clone;
+
+function $w(string) {
+  if (!Object.isString(string)) return [];
+  string = string.strip();
+  return string ? string.split(/\s+/) : [];
+}
+
+if (Prototype.Browser.Opera){
+  Array.prototype.concat = function() {
+    var array = [];
+    for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
+    for (var i = 0, length = arguments.length; i < length; i++) {
+      if (Object.isArray(arguments[i])) {
+        for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
+          array.push(arguments[i][j]);
+      } else {
+        array.push(arguments[i]);
+      }
+    }
+    return array;
+  };
+}
+Object.extend(Number.prototype, {
+  toColorPart: function() {
+    return this.toPaddedString(2, 16);
+  },
+
+  succ: function() {
+    return this + 1;
+  },
+
+  times: function(iterator, context) {
+    $R(0, this, true).each(iterator, context);
+    return this;
+  },
+
+  toPaddedString: function(length, radix) {
+    var string = this.toString(radix || 10);
+    return '0'.times(length - string.length) + string;
+  },
+
+  toJSON: function() {
+    return isFinite(this) ? this.toString() : 'null';
+  }
+});
+
+$w('abs round ceil floor').each(function(method){
+  Number.prototype[method] = Math[method].methodize();
+});
+function $H(object) {
+  return new Hash(object);
+};
+
+var Hash = Class.create(Enumerable, (function() {
+
+  function toQueryPair(key, value) {
+    if (Object.isUndefined(value)) return key;
+    return key + '=' + encodeURIComponent(String.interpret(value));
+  }
+
+  return {
+    initialize: function(object) {
+      this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
+    },
+
+    _each: function(iterator) {
+      for (var key in this._object) {
+        var value = this._object[key], pair = [key, value];
+        pair.key = key;
+        pair.value = value;
+        iterator(pair);
+      }
+    },
+
+    set: function(key, value) {
+      return this._object[key] = value;
+    },
+
+    get: function(key) {
+      // simulating poorly supported hasOwnProperty
+      if (this._object[key] !== Object.prototype[key])
+        return this._object[key];
+    },
+
+    unset: function(key) {
+      var value = this._object[key];
+      delete this._object[key];
+      return value;
+    },
+
+    toObject: function() {
+      return Object.clone(this._object);
+    },
+
+    keys: function() {
+      return this.pluck('key');
+    },
+
+    values: function() {
+      return this.pluck('value');
+    },
+
+    index: function(value) {
+      var match = this.detect(function(pair) {
+        return pair.value === value;
+      });
+      return match && match.key;
+    },
+
+    merge: function(object) {
+      return this.clone().update(object);
+    },
+
+    update: function(object) {
+      return new Hash(object).inject(this, function(result, pair) {
+        result.set(pair.key, pair.value);
+        return result;
+      });
+    },
+
+    toQueryString: function() {
+      return this.inject([], function(results, pair) {
+        var key = encodeURIComponent(pair.key), values = pair.value;
+
+        if (values && typeof values == 'object') {
+          if (Object.isArray(values))
+            return results.concat(values.map(toQueryPair.curry(key)));
+        } else results.push(toQueryPair(key, values));
+        return results;
+      }).join('&');
+    },
+
+    inspect: function() {
+      return '#<Hash:{' + this.map(function(pair) {
+        return pair.map(Object.inspect).join(': ');
+      }).join(', ') + '}>';
+    },
+
+    toJSON: function() {
+      return Object.toJSON(this.toObject());
+    },
+
+    clone: function() {
+      return new Hash(this);
+    }
+  }
+})());
+
+Hash.prototype.toTemplateReplacements = Hash.prototype.toObject;
+Hash.from = $H;
+var ObjectRange = Class.create(Enumerable, {
+  initialize: function(start, end, exclusive) {
+    this.start = start;
+    this.end = end;
+    this.exclusive = exclusive;
+  },
+
+  _each: function(iterator) {
+    var value = this.start;
+    while (this.include(value)) {
+      iterator(value);
+      value = value.succ();
+    }
+  },
+
+  include: function(value) {
+    if (value < this.start)
+      return false;
+    if (this.exclusive)
+      return value < this.end;
+    return value <= this.end;
+  }
+});
+
+var $R = function(start, end, exclusive) {
+  return new ObjectRange(start, end, exclusive);
+};
+
+var Ajax = {
+  getTransport: function() {
+    return Try.these(
+      function() {return new XMLHttpRequest()},
+      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
+      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
+    ) || false;
+  },
+
+  activeRequestCount: 0
+};
+
+Ajax.Responders = {
+  responders: [],
+
+  _each: function(iterator) {
+    this.responders._each(iterator);
+  },
+
+  register: function(responder) {
+    if (!this.include(responder))
+      this.responders.push(responder);
+  },
+
+  unregister: function(responder) {
+    this.responders = this.responders.without(responder);
+  },
+
+  dispatch: function(callback, request, transport, json) {
+    this.each(function(responder) {
+      if (Object.isFunction(responder[callback])) {
+        try {
+          responder[callback].apply(responder, [request, transport, json]);
+        } catch (e) { }
+      }
+    });
+  }
+};
+
+Object.extend(Ajax.Responders, Enumerable);
+
+Ajax.Responders.register({
+  onCreate:   function() { Ajax.activeRequestCount++ },
+  onComplete: function() { Ajax.activeRequestCount-- }
+});
+
+Ajax.Base = Class.create({
+  initialize: function(options) {
+    this.options = {
+      method:       'post',
+      asynchronous: true,
+      contentType:  'application/x-www-form-urlencoded',
+      encoding:     'UTF-8',
+      parameters:   '',
+      evalJSON:     true,
+      evalJS:       true
+    };
+    Object.extend(this.options, options || { });
+
+    this.options.method = this.options.method.toLowerCase();
+
+    if (Object.isString(this.options.parameters))
+      this.options.parameters = this.options.parameters.toQueryParams();
+    else if (Object.isHash(this.options.parameters))
+      this.options.parameters = this.options.parameters.toObject();
+  }
+});
+
+Ajax.Request = Class.create(Ajax.Base, {
+  _complete: false,
+
+  initialize: function($super, url, options) {
+    $super(options);
+    this.transport = Ajax.getTransport();
+    this.request(url);
+  },
+
+  request: function(url) {
+    this.url = url;
+    this.method = this.options.method;
+    var params = Object.clone(this.options.parameters);
+
+    if (!['get', 'post'].include(this.method)) {
+      // simulate other verbs over post
+      params['_method'] = this.method;
+      this.method = 'post';
+    }
+
+    this.parameters = params;
+
+    if (params = Object.toQueryString(params)) {
+      // when GET, append parameters to URL
+      if (this.method == 'get')
+        this.url += (this.url.include('?') ? '&' : '?') + params;
+      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
+        params += '&_=';
+    }
+
+    try {
+      var response = new Ajax.Response(this);
+      if (this.options.onCreate) this.options.onCreate(response);
+      Ajax.Responders.dispatch('onCreate', this, response);
+
+      this.transport.open(this.method.toUpperCase(), this.url,
+        this.options.asynchronous);
+
+      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);
+
+      this.transport.onreadystatechange = this.onStateChange.bind(this);
+      this.setRequestHeaders();
+
+      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
+      this.transport.send(this.body);
+
+      /* Force Firefox to handle ready state 4 for synchronous requests */
+      if (!this.options.asynchronous && this.transport.overrideMimeType)
+        this.onStateChange();
+
+    }
+    catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  onStateChange: function() {
+    var readyState = this.transport.readyState;
+    if (readyState > 1 && !((readyState == 4) && this._complete))
+      this.respondToReadyState(this.transport.readyState);
+  },
+
+  setRequestHeaders: function() {
+    var headers = {
+      'X-Requested-With': 'XMLHttpRequest',
+      'X-Prototype-Version': Prototype.Version,
+      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
+    };
+
+    if (this.method == 'post') {
+      headers['Content-type'] = this.options.contentType +
+        (this.options.encoding ? '; charset=' + this.options.encoding : '');
+
+      /* Force "Connection: close" for older Mozilla browsers to work
+       * around a bug where XMLHttpRequest sends an incorrect
+       * Content-length header. See Mozilla Bugzilla #246651.
+       */
+      if (this.transport.overrideMimeType &&
+          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
+            headers['Connection'] = 'close';
+    }
+
+    // user-defined headers
+    if (typeof this.options.requestHeaders == 'object') {
+      var extras = this.options.requestHeaders;
+
+      if (Object.isFunction(extras.push))
+        for (var i = 0, length = extras.length; i < length; i += 2)
+          headers[extras[i]] = extras[i+1];
+      else
+        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
+    }
+
+    for (var name in headers)
+      this.transport.setRequestHeader(name, headers[name]);
+  },
+
+  success: function() {
+    var status = this.getStatus();
+    return !status || (status >= 200 && status < 300);
+  },
+
+  getStatus: function() {
+    try {
+      return this.transport.status || 0;
+    } catch (e) { return 0 }
+  },
+
+  respondToReadyState: function(readyState) {
+    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);
+
+    if (state == 'Complete') {
+      try {
+        this._complete = true;
+        (this.options['on' + response.status]
+         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
+         || Prototype.emptyFunction)(response, response.headerJSON);
+      } catch (e) {
+        this.dispatchException(e);
+      }
+
+      var contentType = response.getHeader('Content-type');
+      if (this.options.evalJS == 'force'
+          || (this.options.evalJS && this.isSameOrigin() && contentType
+          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
+        this.evalResponse();
+    }
+
+    try {
+      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
+      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
+    } catch (e) {
+      this.dispatchException(e);
+    }
+
+    if (state == 'Complete') {
+      // avoid memory leak in MSIE: clean up
+      this.transport.onreadystatechange = Prototype.emptyFunction;
+    }
+  },
+
+  isSameOrigin: function() {
+    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
+    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
+      protocol: location.protocol,
+      domain: document.domain,
+      port: location.port ? ':' + location.port : ''
+    }));
+  },
+
+  getHeader: function(name) {
+    try {
+      return this.transport.getResponseHeader(name) || null;
+    } catch (e) { return null }
+  },
+
+  evalResponse: function() {
+    try {
+      return eval((this.transport.responseText || '').unfilterJSON());
+    } catch (e) {
+      this.dispatchException(e);
+    }
+  },
+
+  dispatchException: function(exception) {
+    (this.options.onException || Prototype.emptyFunction)(this, exception);
+    Ajax.Responders.dispatch('onException', this, exception);
+  }
+});
+
+Ajax.Request.Events =
+  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+
+Ajax.Response = Class.create({
+  initialize: function(request){
+    this.request = request;
+    var transport  = this.transport  = request.transport,
+        readyState = this.readyState = transport.readyState;
+
+    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
+      this.status       = this.getStatus();
+      this.statusText   = this.getStatusText();
+      this.responseText = String.interpret(transport.responseText);
+      this.headerJSON   = this._getHeaderJSON();
+    }
+
+    if(readyState == 4) {
+      var xml = transport.responseXML;
+      this.responseXML  = Object.isUndefined(xml) ? null : xml;
+      this.responseJSON = this._getResponseJSON();
+    }
+  },
+
+  status:      0,
+  statusText: '',
+
+  getStatus: Ajax.Request.prototype.getStatus,
+
+  getStatusText: function() {
+    try {
+      return this.transport.statusText || '';
+    } catch (e) { return '' }
+  },
+
+  getHeader: Ajax.Request.prototype.getHeader,
+
+  getAllHeaders: function() {
+    try {
+      return this.getAllResponseHeaders();
+    } catch (e) { return null }
+  },
+
+  getResponseHeader: function(name) {
+    return this.transport.getResponseHeader(name);
+  },
+
+  getAllResponseHeaders: function() {
+    return this.transport.getAllResponseHeaders();
+  },
+
+  _getHeaderJSON: function() {
+    var json = this.getHeader('X-JSON');
+    if (!json) return null;
+    json = decodeURIComponent(escape(json));
+    try {
+      return json.evalJSON(this.request.options.sanitizeJSON ||
+        !this.request.isSameOrigin());
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  },
+
+  _getResponseJSON: function() {
+    var options = this.request.options;
+    if (!options.evalJSON || (options.evalJSON != 'force' &&
+      !(this.getHeader('Content-type') || '').include('application/json')) ||
+        this.responseText.blank())
+          return null;
+    try {
+      return this.responseText.evalJSON(options.sanitizeJSON ||
+        !this.request.isSameOrigin());
+    } catch (e) {
+      this.request.dispatchException(e);
+    }
+  }
+});
+
+Ajax.Updater = Class.create(Ajax.Request, {
+  initialize: function($super, container, url, options) {
+    this.container = {
+      success: (container.success || container),
+      failure: (container.failure || (container.success ? null : container))
+    };
+
+    options = Object.clone(options);
+    var onComplete = options.onComplete;
+    options.onComplete = (function(response, json) {
+      this.updateContent(response.responseText);
+      if (Object.isFunction(onComplete)) onComplete(response, json);
+    }).bind(this);
+
+    $super(url, options);
+  },
+
+  updateContent: function(responseText) {
+    var receiver = this.container[this.success() ? 'success' : 'failure'],
+        options = this.options;
+
+    if (!options.evalScripts) responseText = responseText.stripScripts();
+
+    if (receiver = $(receiver)) {
+      if (options.insertion) {
+        if (Object.isString(options.insertion)) {
+          var insertion = { }; insertion[options.insertion] = responseText;
+          receiver.insert(insertion);
+        }
+        else options.insertion(receiver, responseText);
+      }
+      else receiver.update(responseText);
+    }
+  }
+});
+
+Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
+  initialize: function($super, container, url, options) {
+    $super(options);
+    this.onComplete = this.options.onComplete;
+
+    this.frequency = (this.options.frequency || 2);
+    this.decay = (this.options.decay || 1);
+
+    this.updater = { };
+    this.container = container;
+    this.url = url;
+
+    this.start();
+  },
+
+  start: function() {
+    this.options.onComplete = this.updateComplete.bind(this);
+    this.onTimerEvent();
+  },
+
+  stop: function() {
+    this.updater.options.onComplete = undefined;
+    clearTimeout(this.timer);
+    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
+  },
+
+  updateComplete: function(response) {
+    if (this.options.decay) {
+      this.decay = (response.responseText == this.lastText ?
+        this.decay * this.options.decay : 1);
+
+      this.lastText = response.responseText;
+    }
+    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
+  },
+
+  onTimerEvent: function() {
+    this.updater = new Ajax.Updater(this.container, this.url, this.options);
+  }
+});
+function $(element) {
+  if (arguments.length > 1) {
+    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
+      elements.push($(arguments[i]));
+    return elements;
+  }
+  if (Object.isString(element))
+    element = document.getElementById(element);
+  return Element.extend(element);
+}
+
+if (Prototype.BrowserFeatures.XPath) {
+  document._getElementsByXPath = function(expression, parentElement) {
+    var results = [];
+    var query = document.evaluate(expression, $(parentElement) || document,
+      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+    for (var i = 0, length = query.snapshotLength; i < length; i++)
+      results.push(Element.extend(query.snapshotItem(i)));
+    return results;
+  };
+}
+
+/*--------------------------------------------------------------------------*/
+
+if (!window.Node) var Node = { };
+
+if (!Node.ELEMENT_NODE) {
+  // DOM level 2 ECMAScript Language Binding
+  Object.extend(Node, {
+    ELEMENT_NODE: 1,
+    ATTRIBUTE_NODE: 2,
+    TEXT_NODE: 3,
+    CDATA_SECTION_NODE: 4,
+    ENTITY_REFERENCE_NODE: 5,
+    ENTITY_NODE: 6,
+    PROCESSING_INSTRUCTION_NODE: 7,
+    COMMENT_NODE: 8,
+    DOCUMENT_NODE: 9,
+    DOCUMENT_TYPE_NODE: 10,
+    DOCUMENT_FRAGMENT_NODE: 11,
+    NOTATION_NODE: 12
+  });
+}
+
+(function() {
+  var element = this.Element;
+  this.Element = function(tagName, attributes) {
+    attributes = attributes || { };
+    tagName = tagName.toLowerCase();
+    var cache = Element.cache;
+    if (Prototype.Browser.IE && attributes.name) {
+      tagName = '<' + tagName + ' name="' + attributes.name + '">';
+      delete attributes.name;
+      return Element.writeAttribute(document.createElement(tagName), attributes);
+    }
+    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
+    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
+  };
+  Object.extend(this.Element, element || { });
+  if (element) this.Element.prototype = element.prototype;
+}).call(window);
+
+Element.cache = { };
+
+Element.Methods = {
+  visible: function(element) {
+    return $(element).style.display != 'none';
+  },
+
+  toggle: function(element) {
+    element = $(element);
+    Element[Element.visible(element) ? 'hide' : 'show'](element);
+    return element;
+  },
+
+  hide: function(element) {
+    element = $(element);
+    element.style.display = 'none';
+    return element;
+  },
+
+  show: function(element) {
+    element = $(element);
+    element.style.display = '';
+    return element;
+  },
+
+  remove: function(element) {
+    element = $(element);
+    element.parentNode.removeChild(element);
+    return element;
+  },
+
+  update: function(element, content) {
+    element = $(element);
+    if (content && content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+    content = Object.toHTML(content);
+    element.innerHTML = content.stripScripts();
+    content.evalScripts.bind(content).defer();
+    return element;
+  },
+
+  replace: function(element, content) {
+    element = $(element);
+    if (content && content.toElement) content = content.toElement();
+    else if (!Object.isElement(content)) {
+      content = Object.toHTML(content);
+      var range = element.ownerDocument.createRange();
+      range.selectNode(element);
+      content.evalScripts.bind(content).defer();
+      content = range.createContextualFragment(content.stripScripts());
+    }
+    element.parentNode.replaceChild(content, element);
+    return element;
+  },
+
+  insert: function(element, insertions) {
+    element = $(element);
+
+    if (Object.isString(insertions) || Object.isNumber(insertions) ||
+        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
+          insertions = {bottom:insertions};
+
+    var content, insert, tagName, childNodes;
+
+    for (var position in insertions) {
+      content  = insertions[position];
+      position = position.toLowerCase();
+      insert = Element._insertionTranslations[position];
+
+      if (content && content.toElement) content = content.toElement();
+      if (Object.isElement(content)) {
+        insert(element, content);
+        continue;
+      }
+
+      content = Object.toHTML(content);
+
+      tagName = ((position == 'before' || position == 'after')
+        ? element.parentNode : element).tagName.toUpperCase();
+
+      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+
+      if (position == 'top' || position == 'after') childNodes.reverse();
+      childNodes.each(insert.curry(element));
+
+      content.evalScripts.bind(content).defer();
+    }
+
+    return element;
+  },
+
+  wrap: function(element, wrapper, attributes) {
+    element = $(element);
+    if (Object.isElement(wrapper))
+      $(wrapper).writeAttribute(attributes || { });
+    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
+    else wrapper = new Element('div', wrapper);
+    if (element.parentNode)
+      element.parentNode.replaceChild(wrapper, element);
+    wrapper.appendChild(element);
+    return wrapper;
+  },
+
+  inspect: function(element) {
+    element = $(element);
+    var result = '<' + element.tagName.toLowerCase();
+    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
+      var property = pair.first(), attribute = pair.last();
+      var value = (element[property] || '').toString();
+      if (value) result += ' ' + attribute + '=' + value.inspect(true);
+    });
+    return result + '>';
+  },
+
+  recursivelyCollect: function(element, property) {
+    element = $(element);
+    var elements = [];
+    while (element = element[property])
+      if (element.nodeType == 1)
+        elements.push(Element.extend(element));
+    return elements;
+  },
+
+  ancestors: function(element) {
+    return $(element).recursivelyCollect('parentNode');
+  },
+
+  descendants: function(element) {
+    return $(element).select("*");
+  },
+
+  firstDescendant: function(element) {
+    element = $(element).firstChild;
+    while (element && element.nodeType != 1) element = element.nextSibling;
+    return $(element);
+  },
+
+  immediateDescendants: function(element) {
+    if (!(element = $(element).firstChild)) return [];
+    while (element && element.nodeType != 1) element = element.nextSibling;
+    if (element) return [element].concat($(element).nextSiblings());
+    return [];
+  },
+
+  previousSiblings: function(element) {
+    return $(element).recursivelyCollect('previousSibling');
+  },
+
+  nextSiblings: function(element) {
+    return $(element).recursivelyCollect('nextSibling');
+  },
+
+  siblings: function(element) {
+    element = $(element);
+    return element.previousSiblings().reverse().concat(element.nextSiblings());
+  },
+
+  match: function(element, selector) {
+    if (Object.isString(selector))
+      selector = new Selector(selector);
+    return selector.match($(element));
+  },
+
+  up: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(element.parentNode);
+    var ancestors = element.ancestors();
+    return Object.isNumber(expression) ? ancestors[expression] :
+      Selector.findElement(ancestors, expression, index);
+  },
+
+  down: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return element.firstDescendant();
+    return Object.isNumber(expression) ? element.descendants()[expression] :
+      Element.select(element, expression)[index || 0];
+  },
+
+  previous: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
+    var previousSiblings = element.previousSiblings();
+    return Object.isNumber(expression) ? previousSiblings[expression] :
+      Selector.findElement(previousSiblings, expression, index);
+  },
+
+  next: function(element, expression, index) {
+    element = $(element);
+    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
+    var nextSiblings = element.nextSiblings();
+    return Object.isNumber(expression) ? nextSiblings[expression] :
+      Selector.findElement(nextSiblings, expression, index);
+  },
+
+  select: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element, args);
+  },
+
+  adjacent: function() {
+    var args = $A(arguments), element = $(args.shift());
+    return Selector.findChildElements(element.parentNode, args).without(element);
+  },
+
+  identify: function(element) {
+    element = $(element);
+    var id = element.readAttribute('id'), self = arguments.callee;
+    if (id) return id;
+    do { id = 'anonymous_element_' + self.counter++ } while ($(id));
+    element.writeAttribute('id', id);
+    return id;
+  },
+
+  readAttribute: function(element, name) {
+    element = $(element);
+    if (Prototype.Browser.IE) {
+      var t = Element._attributeTranslations.read;
+      if (t.values[name]) return t.values[name](element, name);
+      if (t.names[name]) name = t.names[name];
+      if (name.include(':')) {
+        return (!element.attributes || !element.attributes[name]) ? null :
+         element.attributes[name].value;
+      }
+    }
+    return element.getAttribute(name);
+  },
+
+  writeAttribute: function(element, name, value) {
+    element = $(element);
+    var attributes = { }, t = Element._attributeTranslations.write;
+
+    if (typeof name == 'object') attributes = name;
+    else attributes[name] = Object.isUndefined(value) ? true : value;
+
+    for (var attr in attributes) {
+      name = t.names[attr] || attr;
+      value = attributes[attr];
+      if (t.values[attr]) name = t.values[attr](element, value);
+      if (value === false || value === null)
+        element.removeAttribute(name);
+      else if (value === true)
+        element.setAttribute(name, name);
+      else element.setAttribute(name, value);
+    }
+    return element;
+  },
+
+  getHeight: function(element) {
+    return $(element).getDimensions().height;
+  },
+
+  getWidth: function(element) {
+    return $(element).getDimensions().width;
+  },
+
+  classNames: function(element) {
+    return new Element.ClassNames(element);
+  },
+
+  hasClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    var elementClassName = element.className;
+    return (elementClassName.length > 0 && (elementClassName == className ||
+      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
+  },
+
+  addClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    if (!element.hasClassName(className))
+      element.className += (element.className ? ' ' : '') + className;
+    return element;
+  },
+
+  removeClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    element.className = element.className.replace(
+      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
+    return element;
+  },
+
+  toggleClassName: function(element, className) {
+    if (!(element = $(element))) return;
+    return element[element.hasClassName(className) ?
+      'removeClassName' : 'addClassName'](className);
+  },
+
+  // removes whitespace-only text node children
+  cleanWhitespace: function(element) {
+    element = $(element);
+    var node = element.firstChild;
+    while (node) {
+      var nextNode = node.nextSibling;
+      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
+        element.removeChild(node);
+      node = nextNode;
+    }
+    return element;
+  },
+
+  empty: function(element) {
+    return $(element).innerHTML.blank();
+  },
+
+  descendantOf: function(element, ancestor) {
+    element = $(element), ancestor = $(ancestor);
+
+    if (element.compareDocumentPosition)
+      return (element.compareDocumentPosition(ancestor) & 8) === 8;
+
+    if (ancestor.contains)
+      return ancestor.contains(element) && ancestor !== element;
+
+    while (element = element.parentNode)
+      if (element == ancestor) return true;
+
+    return false;
+  },
+
+  scrollTo: function(element) {
+    element = $(element);
+    var pos = element.cumulativeOffset();
+    window.scrollTo(pos[0], pos[1]);
+    return element;
+  },
+
+  getStyle: function(element, style) {
+    element = $(element);
+    style = style == 'float' ? 'cssFloat' : style.camelize();
+    var value = element.style[style];
+    if (!value || value == 'auto') {
+      var css = document.defaultView.getComputedStyle(element, null);
+      value = css ? css[style] : null;
+    }
+    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
+    return value == 'auto' ? null : value;
+  },
+
+  getOpacity: function(element) {
+    return $(element).getStyle('opacity');
+  },
+
+  setStyle: function(element, styles) {
+    element = $(element);
+    var elementStyle = element.style, match;
+    if (Object.isString(styles)) {
+      element.style.cssText += ';' + styles;
+      return styles.include('opacity') ?
+        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
+    }
+    for (var property in styles)
+      if (property == 'opacity') element.setOpacity(styles[property]);
+      else
+        elementStyle[(property == 'float' || property == 'cssFloat') ?
+          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
+            property] = styles[property];
+
+    return element;
+  },
+
+  setOpacity: function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === '') ? '' :
+      (value < 0.00001) ? 0 : value;
+    return element;
+  },
+
+  getDimensions: function(element) {
+    element = $(element);
+    var display = element.getStyle('display');
+    if (display != 'none' && display != null) // Safari bug
+      return {width: element.offsetWidth, height: element.offsetHeight};
+
+    // All *Width and *Height properties give 0 on elements with display none,
+    // so enable the element temporarily
+    var els = element.style;
+    var originalVisibility = els.visibility;
+    var originalPosition = els.position;
+    var originalDisplay = els.display;
+    els.visibility = 'hidden';
+    els.position = 'absolute';
+    els.display = 'block';
+    var originalWidth = element.clientWidth;
+    var originalHeight = element.clientHeight;
+    els.display = originalDisplay;
+    els.position = originalPosition;
+    els.visibility = originalVisibility;
+    return {width: originalWidth, height: originalHeight};
+  },
+
+  makePositioned: function(element) {
+    element = $(element);
+    var pos = Element.getStyle(element, 'position');
+    if (pos == 'static' || !pos) {
+      element._madePositioned = true;
+      element.style.position = 'relative';
+      // Opera returns the offset relative to the positioning context, when an
+      // element is position relative but top and left have not been defined
+      if (Prototype.Browser.Opera) {
+        element.style.top = 0;
+        element.style.left = 0;
+      }
+    }
+    return element;
+  },
+
+  undoPositioned: function(element) {
+    element = $(element);
+    if (element._madePositioned) {
+      element._madePositioned = undefined;
+      element.style.position =
+        element.style.top =
+        element.style.left =
+        element.style.bottom =
+        element.style.right = '';
+    }
+    return element;
+  },
+
+  makeClipping: function(element) {
+    element = $(element);
+    if (element._overflow) return element;
+    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
+    if (element._overflow !== 'hidden')
+      element.style.overflow = 'hidden';
+    return element;
+  },
+
+  undoClipping: function(element) {
+    element = $(element);
+    if (!element._overflow) return element;
+    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
+    element._overflow = null;
+    return element;
+  },
+
+  cumulativeOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  positionedOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      element = element.offsetParent;
+      if (element) {
+        if (element.tagName.toUpperCase() == 'BODY') break;
+        var p = Element.getStyle(element, 'position');
+        if (p !== 'static') break;
+      }
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  absolutize: function(element) {
+    element = $(element);
+    if (element.getStyle('position') == 'absolute') return element;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    var offsets = element.positionedOffset();
+    var top     = offsets[1];
+    var left    = offsets[0];
+    var width   = element.clientWidth;
+    var height  = element.clientHeight;
+
+    element._originalLeft   = left - parseFloat(element.style.left  || 0);
+    element._originalTop    = top  - parseFloat(element.style.top || 0);
+    element._originalWidth  = element.style.width;
+    element._originalHeight = element.style.height;
+
+    element.style.position = 'absolute';
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.width  = width + 'px';
+    element.style.height = height + 'px';
+    return element;
+  },
+
+  relativize: function(element) {
+    element = $(element);
+    if (element.getStyle('position') == 'relative') return element;
+    // Position.prepare(); // To be done manually by Scripty when it needs it.
+
+    element.style.position = 'relative';
+    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
+    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+
+    element.style.top    = top + 'px';
+    element.style.left   = left + 'px';
+    element.style.height = element._originalHeight;
+    element.style.width  = element._originalWidth;
+    return element;
+  },
+
+  cumulativeScrollOffset: function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.scrollTop  || 0;
+      valueL += element.scrollLeft || 0;
+      element = element.parentNode;
+    } while (element);
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  getOffsetParent: function(element) {
+    if (element.offsetParent) return $(element.offsetParent);
+    if (element == document.body) return $(element);
+
+    while ((element = element.parentNode) && element != document.body)
+      if (Element.getStyle(element, 'position') != 'static')
+        return $(element);
+
+    return $(document.body);
+  },
+
+  viewportOffset: function(forElement) {
+    var valueT = 0, valueL = 0;
+
+    var element = forElement;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+
+      // Safari fix
+      if (element.offsetParent == document.body &&
+        Element.getStyle(element, 'position') == 'absolute') break;
+
+    } while (element = element.offsetParent);
+
+    element = forElement;
+    do {
+      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
+        valueT -= element.scrollTop  || 0;
+        valueL -= element.scrollLeft || 0;
+      }
+    } while (element = element.parentNode);
+
+    return Element._returnOffset(valueL, valueT);
+  },
+
+  clonePosition: function(element, source) {
+    var options = Object.extend({
+      setLeft:    true,
+      setTop:     true,
+      setWidth:   true,
+      setHeight:  true,
+      offsetTop:  0,
+      offsetLeft: 0
+    }, arguments[2] || { });
+
+    // find page position of source
+    source = $(source);
+    var p = source.viewportOffset();
+
+    // find coordinate system to use
+    element = $(element);
+    var delta = [0, 0];
+    var parent = null;
+    // delta [0,0] will do fine with position: fixed elements,
+    // position:absolute needs offsetParent deltas
+    if (Element.getStyle(element, 'position') == 'absolute') {
+      parent = element.getOffsetParent();
+      delta = parent.viewportOffset();
+    }
+
+    // correct by body offsets (fixes Safari)
+    if (parent == document.body) {
+      delta[0] -= document.body.offsetLeft;
+      delta[1] -= document.body.offsetTop;
+    }
+
+    // set position
+    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
+    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
+    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
+    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
+    return element;
+  }
+};
+
+Element.Methods.identify.counter = 1;
+
+Object.extend(Element.Methods, {
+  getElementsBySelector: Element.Methods.select,
+  childElements: Element.Methods.immediateDescendants
+});
+
+Element._attributeTranslations = {
+  write: {
+    names: {
+      className: 'class',
+      htmlFor:   'for'
+    },
+    values: { }
+  }
+};
+
+if (Prototype.Browser.Opera) {
+  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
+    function(proceed, element, style) {
+      switch (style) {
+        case 'left': case 'top': case 'right': case 'bottom':
+          if (proceed(element, 'position') === 'static') return null;
+        case 'height': case 'width':
+          // returns '0px' for hidden elements; we want it to return null
+          if (!Element.visible(element)) return null;
+
+          // returns the border-box dimensions rather than the content-box
+          // dimensions, so we subtract padding and borders from the value
+          var dim = parseInt(proceed(element, style), 10);
+
+          if (dim !== element['offset' + style.capitalize()])
+            return dim + 'px';
+
+          var properties;
+          if (style === 'height') {
+            properties = ['border-top-width', 'padding-top',
+             'padding-bottom', 'border-bottom-width'];
+          }
+          else {
+            properties = ['border-left-width', 'padding-left',
+             'padding-right', 'border-right-width'];
+          }
+          return properties.inject(dim, function(memo, property) {
+            var val = proceed(element, property);
+            return val === null ? memo : memo - parseInt(val, 10);
+          }) + 'px';
+        default: return proceed(element, style);
+      }
+    }
+  );
+
+  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
+    function(proceed, element, attribute) {
+      if (attribute === 'title') return element.title;
+      return proceed(element, attribute);
+    }
+  );
+}
+
+else if (Prototype.Browser.IE) {
+  // IE doesn't report offsets correctly for static elements, so we change them
+  // to "relative" to get the values, then change them back.
+  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
+    function(proceed, element) {
+      element = $(element);
+      // IE throws an error if element is not in document
+      try { element.offsetParent }
+      catch(e) { return $(document.body) }
+      var position = element.getStyle('position');
+      if (position !== 'static') return proceed(element);
+      element.setStyle({ position: 'relative' });
+      var value = proceed(element);
+      element.setStyle({ position: position });
+      return value;
+    }
+  );
+
+  $w('positionedOffset viewportOffset').each(function(method) {
+    Element.Methods[method] = Element.Methods[method].wrap(
+      function(proceed, element) {
+        element = $(element);
+        try { element.offsetParent }
+        catch(e) { return Element._returnOffset(0,0) }
+        var position = element.getStyle('position');
+        if (position !== 'static') return proceed(element);
+        // Trigger hasLayout on the offset parent so that IE6 reports
+        // accurate offsetTop and offsetLeft values for position: fixed.
+        var offsetParent = element.getOffsetParent();
+        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
+          offsetParent.setStyle({ zoom: 1 });
+        element.setStyle({ position: 'relative' });
+        var value = proceed(element);
+        element.setStyle({ position: position });
+        return value;
+      }
+    );
+  });
+
+  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
+    function(proceed, element) {
+      try { element.offsetParent }
+      catch(e) { return Element._returnOffset(0,0) }
+      return proceed(element);
+    }
+  );
+
+  Element.Methods.getStyle = function(element, style) {
+    element = $(element);
+    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
+    var value = element.style[style];
+    if (!value && element.currentStyle) value = element.currentStyle[style];
+
+    if (style == 'opacity') {
+      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
+        if (value[1]) return parseFloat(value[1]) / 100;
+      return 1.0;
+    }
+
+    if (value == 'auto') {
+      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
+        return element['offset' + style.capitalize()] + 'px';
+      return null;
+    }
+    return value;
+  };
+
+  Element.Methods.setOpacity = function(element, value) {
+    function stripAlpha(filter){
+      return filter.replace(/alpha\([^\)]*\)/gi,'');
+    }
+    element = $(element);
+    var currentStyle = element.currentStyle;
+    if ((currentStyle && !currentStyle.hasLayout) ||
+      (!currentStyle && element.style.zoom == 'normal'))
+        element.style.zoom = 1;
+
+    var filter = element.getStyle('filter'), style = element.style;
+    if (value == 1 || value === '') {
+      (filter = stripAlpha(filter)) ?
+        style.filter = filter : style.removeAttribute('filter');
+      return element;
+    } else if (value < 0.00001) value = 0;
+    style.filter = stripAlpha(filter) +
+      'alpha(opacity=' + (value * 100) + ')';
+    return element;
+  };
+
+  Element._attributeTranslations = {
+    read: {
+      names: {
+        'class': 'className',
+        'for':   'htmlFor'
+      },
+      values: {
+        _getAttr: function(element, attribute) {
+          return element.getAttribute(attribute, 2);
+        },
+        _getAttrNode: function(element, attribute) {
+          var node = element.getAttributeNode(attribute);
+          return node ? node.value : "";
+        },
+        _getEv: function(element, attribute) {
+          attribute = element.getAttribute(attribute);
+          return attribute ? attribute.toString().slice(23, -2) : null;
+        },
+        _flag: function(element, attribute) {
+          return $(element).hasAttribute(attribute) ? attribute : null;
+        },
+        style: function(element) {
+          return element.style.cssText.toLowerCase();
+        },
+        title: function(element) {
+          return element.title;
+        }
+      }
+    }
+  };
+
+  Element._attributeTranslations.write = {
+    names: Object.extend({
+      cellpadding: 'cellPadding',
+      cellspacing: 'cellSpacing'
+    }, Element._attributeTranslations.read.names),
+    values: {
+      checked: function(element, value) {
+        element.checked = !!value;
+      },
+
+      style: function(element, value) {
+        element.style.cssText = value ? value : '';
+      }
+    }
+  };
+
+  Element._attributeTranslations.has = {};
+
+  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
+      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
+    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
+    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
+  });
+
+  (function(v) {
+    Object.extend(v, {
+      href:        v._getAttr,
+      src:         v._getAttr,
+      type:        v._getAttr,
+      action:      v._getAttrNode,
+      disabled:    v._flag,
+      checked:     v._flag,
+      readonly:    v._flag,
+      multiple:    v._flag,
+      onload:      v._getEv,
+      onunload:    v._getEv,
+      onclick:     v._getEv,
+      ondblclick:  v._getEv,
+      onmousedown: v._getEv,
+      onmouseup:   v._getEv,
+      onmouseover: v._getEv,
+      onmousemove: v._getEv,
+      onmouseout:  v._getEv,
+      onfocus:     v._getEv,
+      onblur:      v._getEv,
+      onkeypress:  v._getEv,
+      onkeydown:   v._getEv,
+      onkeyup:     v._getEv,
+      onsubmit:    v._getEv,
+      onreset:     v._getEv,
+      onselect:    v._getEv,
+      onchange:    v._getEv
+    });
+  })(Element._attributeTranslations.read.values);
+}
+
+else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1) ? 0.999999 :
+      (value === '') ? '' : (value < 0.00001) ? 0 : value;
+    return element;
+  };
+}
+
+else if (Prototype.Browser.WebKit) {
+  Element.Methods.setOpacity = function(element, value) {
+    element = $(element);
+    element.style.opacity = (value == 1 || value === '') ? '' :
+      (value < 0.00001) ? 0 : value;
+
+    if (value == 1)
+      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
+        element.width++; element.width--;
+      } else try {
+        var n = document.createTextNode(' ');
+        element.appendChild(n);
+        element.removeChild(n);
+      } catch (e) { }
+
+    return element;
+  };
+
+  // Safari returns margins on body which is incorrect if the child is absolutely
+  // positioned.  For performance reasons, redefine Element#cumulativeOffset for
+  // KHTML/WebKit only.
+  Element.Methods.cumulativeOffset = function(element) {
+    var valueT = 0, valueL = 0;
+    do {
+      valueT += element.offsetTop  || 0;
+      valueL += element.offsetLeft || 0;
+      if (element.offsetParent == document.body)
+        if (Element.getStyle(element, 'position') == 'absolute') break;
+
+      element = element.offsetParent;
+    } while (element);
+
+    return Element._returnOffset(valueL, valueT);
+  };
+}
+
+if (Prototype.Browser.IE || Prototype.Browser.Opera) {
+  // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements
+  Element.Methods.update = function(element, content) {
+    element = $(element);
+
+    if (content && content.toElement) content = content.toElement();
+    if (Object.isElement(content)) return element.update().insert(content);
+
+    content = Object.toHTML(content);
+    var tagName = element.tagName.toUpperCase();
+
+    if (tagName in Element._insertionTranslations.tags) {
+      $A(element.childNodes).each(function(node) { element.removeChild(node) });
+      Element._getContentFromAnonymousElement(tagName, content.stripScripts())
+        .each(function(node) { element.appendChild(node) });
+    }
+    else element.innerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+if ('outerHTML' in document.createElement('div')) {
+  Element.Methods.replace = function(element, content) {
+    element = $(element);
+
+    if (content && content.toElement) content = content.toElement();
+    if (Object.isElement(content)) {
+      element.parentNode.replaceChild(content, element);
+      return element;
+    }
+
+    content = Object.toHTML(content);
+    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();
+
+    if (Element._insertionTranslations.tags[tagName]) {
+      var nextSibling = element.next();
+      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
+      parent.removeChild(element);
+      if (nextSibling)
+        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
+      else
+        fragments.each(function(node) { parent.appendChild(node) });
+    }
+    else element.outerHTML = content.stripScripts();
+
+    content.evalScripts.bind(content).defer();
+    return element;
+  };
+}
+
+Element._returnOffset = function(l, t) {
+  var result = [l, t];
+  result.left = l;
+  result.top = t;
+  return result;
+};
+
+Element._getContentFromAnonymousElement = function(tagName, html) {
+  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
+  if (t) {
+    div.innerHTML = t[0] + html + t[1];
+    t[2].times(function() { div = div.firstChild });
+  } else div.innerHTML = html;
+  return $A(div.childNodes);
+};
+
+Element._insertionTranslations = {
+  before: function(element, node) {
+    element.parentNode.insertBefore(node, element);
+  },
+  top: function(element, node) {
+    element.insertBefore(node, element.firstChild);
+  },
+  bottom: function(element, node) {
+    element.appendChild(node);
+  },
+  after: function(element, node) {
+    element.parentNode.insertBefore(node, element.nextSibling);
+  },
+  tags: {
+    TABLE:  ['<table>',                '</table>',                   1],
+    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
+    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
+    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
+    SELECT: ['<select>',               '</select>',                  1]
+  }
+};
+
+(function() {
+  Object.extend(this.tags, {
+    THEAD: this.tags.TBODY,
+    TFOOT: this.tags.TBODY,
+    TH:    this.tags.TD
+  });
+}).call(Element._insertionTranslations);
+
+Element.Methods.Simulated = {
+  hasAttribute: function(element, attribute) {
+    attribute = Element._attributeTranslations.has[attribute] || attribute;
+    var node = $(element).getAttributeNode(attribute);
+    return !!(node && node.specified);
+  }
+};
+
+Element.Methods.ByTag = { };
+
+Object.extend(Element, Element.Methods);
+
+if (!Prototype.BrowserFeatures.ElementExtensions &&
+    document.createElement('div')['__proto__']) {
+  window.HTMLElement = { };
+  window.HTMLElement.prototype = document.createElement('div')['__proto__'];
+  Prototype.BrowserFeatures.ElementExtensions = true;
+}
+
+Element.extend = (function() {
+  if (Prototype.BrowserFeatures.SpecificElementExtensions)
+    return Prototype.K;
+
+  var Methods = { }, ByTag = Element.Methods.ByTag;
+
+  var extend = Object.extend(function(element) {
+    if (!element || element._extendedByPrototype ||
+        element.nodeType != 1 || element == window) return element;
+
+    var methods = Object.clone(Methods),
+      tagName = element.tagName.toUpperCase(), property, value;
+
+    // extend methods for specific tags
+    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);
+
+    for (property in methods) {
+      value = methods[property];
+      if (Object.isFunction(value) && !(property in element))
+        element[property] = value.methodize();
+    }
+
+    element._extendedByPrototype = Prototype.emptyFunction;
+    return element;
+
+  }, {
+    refresh: function() {
+      // extend methods for all tags (Safari doesn't need this)
+      if (!Prototype.BrowserFeatures.ElementExtensions) {
+        Object.extend(Methods, Element.Methods);
+        Object.extend(Methods, Element.Methods.Simulated);
+      }
+    }
+  });
+
+  extend.refresh();
+  return extend;
+})();
+
+Element.hasAttribute = function(element, attribute) {
+  if (element.hasAttribute) return element.hasAttribute(attribute);
+  return Element.Methods.Simulated.hasAttribute(element, attribute);
+};
+
+Element.addMethods = function(methods) {
+  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
+
+  if (!methods) {
+    Object.extend(Form, Form.Methods);
+    Object.extend(Form.Element, Form.Element.Methods);
+    Object.extend(Element.Methods.ByTag, {
+      "FORM":     Object.clone(Form.Methods),
+      "INPUT":    Object.clone(Form.Element.Methods),
+      "SELECT":   Object.clone(Form.Element.Methods),
+      "TEXTAREA": Object.clone(Form.Element.Methods)
+    });
+  }
+
+  if (arguments.length == 2) {
+    var tagName = methods;
+    methods = arguments[1];
+  }
+
+  if (!tagName) Object.extend(Element.Methods, methods || { });
+  else {
+    if (Object.isArray(tagName)) tagName.each(extend);
+    else extend(tagName);
+  }
+
+  function extend(tagName) {
+    tagName = tagName.toUpperCase();
+    if (!Element.Methods.ByTag[tagName])
+      Element.Methods.ByTag[tagName] = { };
+    Object.extend(Element.Methods.ByTag[tagName], methods);
+  }
+
+  function copy(methods, destination, onlyIfAbsent) {
+    onlyIfAbsent = onlyIfAbsent || false;
+    for (var property in methods) {
+      var value = methods[property];
+      if (!Object.isFunction(value)) continue;
+      if (!onlyIfAbsent || !(property in destination))
+        destination[property] = value.methodize();
+    }
+  }
+
+  function findDOMClass(tagName) {
+    var klass;
+    var trans = {
+      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
+      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
+      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
+      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
+      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
+      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
+      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
+      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
+      "FrameSet", "IFRAME": "IFrame"
+    };
+    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
+    if (window[klass]) return window[klass];
+    klass = 'HTML' + tagName + 'Element';
+    if (window[klass]) return window[klass];
+    klass = 'HTML' + tagName.capitalize() + 'Element';
+    if (window[klass]) return window[klass];
+
+    window[klass] = { };
+    window[klass].prototype = document.createElement(tagName)['__proto__'];
+    return window[klass];
+  }
+
+  if (F.ElementExtensions) {
+    copy(Element.Methods, HTMLElement.prototype);
+    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
+  }
+
+  if (F.SpecificElementExtensions) {
+    for (var tag in Element.Methods.ByTag) {
+      var klass = findDOMClass(tag);
+      if (Object.isUndefined(klass)) continue;
+      copy(T[tag], klass.prototype);
+    }
+  }
+
+  Object.extend(Element, Element.Methods);
+  delete Element.ByTag;
+
+  if (Element.extend.refresh) Element.extend.refresh();
+  Element.cache = { };
+};
+
+document.viewport = {
+  getDimensions: function() {
+    var dimensions = { }, B = Prototype.Browser;
+    $w('width height').each(function(d) {
+      var D = d.capitalize();
+      if (B.WebKit && !document.evaluate) {
+        // Safari <3.0 needs self.innerWidth/Height
+        dimensions[d] = self['inner' + D];
+      } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) {
+        // Opera <9.5 needs document.body.clientWidth/Height
+        dimensions[d] = document.body['client' + D]
+      } else {
+        dimensions[d] = document.documentElement['client' + D];
+      }
+    });
+    return dimensions;
+  },
+
+  getWidth: function() {
+    return this.getDimensions().width;
+  },
+
+  getHeight: function() {
+    return this.getDimensions().height;
+  },
+
+  getScrollOffsets: function() {
+    return Element._returnOffset(
+      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
+      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
+  }
+};
+/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
+ * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
+ * license.  Please see http://www.yui-ext.com/ for more information. */
+
+var Selector = Class.create({
+  initialize: function(expression) {
+    this.expression = expression.strip();
+
+    if (this.shouldUseSelectorsAPI()) {
+      this.mode = 'selectorsAPI';
+    } else if (this.shouldUseXPath()) {
+      this.mode = 'xpath';
+      this.compileXPathMatcher();
+    } else {
+      this.mode = "normal";
+      this.compileMatcher();
+    }
+
+  },
+
+  shouldUseXPath: function() {
+    if (!Prototype.BrowserFeatures.XPath) return false;
+
+    var e = this.expression;
+
+    // Safari 3 chokes on :*-of-type and :empty
+    if (Prototype.Browser.WebKit &&
+     (e.include("-of-type") || e.include(":empty")))
+      return false;
+
+    // XPath can't do namespaced attributes, nor can it read
+    // the "checked" property from DOM nodes
+    if ((/(\[[\w-]*?:|:checked)/).test(e))
+      return false;
+
+    return true;
+  },
+
+  shouldUseSelectorsAPI: function() {
+    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;
+
+    if (!Selector._div) Selector._div = new Element('div');
+
+    // Make sure the browser treats the selector as valid. Test on an
+    // isolated element to minimize cost of this check.
+    try {
+      Selector._div.querySelector(this.expression);
+    } catch(e) {
+      return false;
+    }
+
+    return true;
+  },
+
+  compileMatcher: function() {
+    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
+        c = Selector.criteria, le, p, m;
+
+    if (Selector._cache[e]) {
+      this.matcher = Selector._cache[e];
+      return;
+    }
+
+    this.matcher = ["this.matcher = function(root) {",
+                    "var r = root, h = Selector.handlers, c = false, n;"];
+
+    while (e && le != e && (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          this.matcher.push(Object.isFunction(c[i]) ? c[i](m) :
+            new Template(c[i]).evaluate(m));
+          e = e.replace(m[0], '');
+          break;
+        }
+      }
+    }
+
+    this.matcher.push("return h.unique(n);\n}");
+    eval(this.matcher.join('\n'));
+    Selector._cache[this.expression] = this.matcher;
+  },
+
+  compileXPathMatcher: function() {
+    var e = this.expression, ps = Selector.patterns,
+        x = Selector.xpath, le, m;
+
+    if (Selector._cache[e]) {
+      this.xpath = Selector._cache[e]; return;
+    }
+
+    this.matcher = ['.//*'];
+    while (e && le != e && (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        if (m = e.match(ps[i])) {
+          this.matcher.push(Object.isFunction(x[i]) ? x[i](m) :
+            new Template(x[i]).evaluate(m));
+          e = e.replace(m[0], '');
+          break;
+        }
+      }
+    }
+
+    this.xpath = this.matcher.join('');
+    Selector._cache[this.expression] = this.xpath;
+  },
+
+  findElements: function(root) {
+    root = root || document;
+    var e = this.expression, results;
+
+    switch (this.mode) {
+      case 'selectorsAPI':
+        // querySelectorAll queries document-wide, then filters to descendants
+        // of the context element. That's not what we want.
+        // Add an explicit context to the selector if necessary.
+        if (root !== document) {
+          var oldId = root.id, id = $(root).identify();
+          e = "#" + id + " " + e;
+        }
+
+        results = $A(root.querySelectorAll(e)).map(Element.extend);
+        root.id = oldId;
+
+        return results;
+      case 'xpath':
+        return document._getElementsByXPath(this.xpath, root);
+      default:
+       return this.matcher(root);
+    }
+  },
+
+  match: function(element) {
+    this.tokens = [];
+
+    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
+    var le, p, m;
+
+    while (e && le !== e && (/\S/).test(e)) {
+      le = e;
+      for (var i in ps) {
+        p = ps[i];
+        if (m = e.match(p)) {
+          // use the Selector.assertions methods unless the selector
+          // is too complex.
+          if (as[i]) {
+            this.tokens.push([i, Object.clone(m)]);
+            e = e.replace(m[0], '');
+          } else {
+            // reluctantly do a document-wide search
+            // and look for a match in the array
+            return this.findElements(document).include(element);
+          }
+        }
+      }
+    }
+
+    var match = true, name, matches;
+    for (var i = 0, token; token = this.tokens[i]; i++) {
+      name = token[0], matches = token[1];
+      if (!Selector.assertions[name](element, matches)) {
+        match = false; break;
+      }
+    }
+
+    return match;
+  },
+
+  toString: function() {
+    return this.expression;
+  },
+
+  inspect: function() {
+    return "#<Selector:" + this.expression.inspect() + ">";
+  }
+});
+
+Object.extend(Selector, {
+  _cache: { },
+
+  xpath: {
+    descendant:   "//*",
+    child:        "/*",
+    adjacent:     "/following-sibling::*[1]",
+    laterSibling: '/following-sibling::*',
+    tagName:      function(m) {
+      if (m[1] == '*') return '';
+      return "[local-name()='" + m[1].toLowerCase() +
+             "' or local-name()='" + m[1].toUpperCase() + "']";
+    },
+    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
+    id:           "[@id='#{1}']",
+    attrPresence: function(m) {
+      m[1] = m[1].toLowerCase();
+      return new Template("[@#{1}]").evaluate(m);
+    },
+    attr: function(m) {
+      m[1] = m[1].toLowerCase();
+      m[3] = m[5] || m[6];
+      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
+    },
+    pseudo: function(m) {
+      var h = Selector.xpath.pseudos[m[1]];
+      if (!h) return '';
+      if (Object.isFunction(h)) return h(m);
+      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
+    },
+    operators: {
+      '=':  "[@#{1}='#{3}']",
+      '!=': "[@#{1}!='#{3}']",
+      '^=': "[starts-with(@#{1}, '#{3}')]",
+      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
+      '*=': "[contains(@#{1}, '#{3}')]",
+      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
+      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
+    },
+    pseudos: {
+      'first-child': '[not(preceding-sibling::*)]',
+      'last-child':  '[not(following-sibling::*)]',
+      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
+      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
+      'checked':     "[@checked]",
+      'disabled':    "[(@disabled) and (@type!='hidden')]",
+      'enabled':     "[not(@disabled) and (@type!='hidden')]",
+      'not': function(m) {
+        var e = m[6], p = Selector.patterns,
+            x = Selector.xpath, le, v;
+
+        var exclusion = [];
+        while (e && le != e && (/\S/).test(e)) {
+          le = e;
+          for (var i in p) {
+            if (m = e.match(p[i])) {
+              v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m);
+              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
+              e = e.replace(m[0], '');
+              break;
+            }
+          }
+        }
+        return "[not(" + exclusion.join(" and ") + ")]";
+      },
+      'nth-child':      function(m) {
+        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
+      },
+      'nth-last-child': function(m) {
+        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
+      },
+      'nth-of-type':    function(m) {
+        return Selector.xpath.pseudos.nth("position() ", m);
+      },
+      'nth-last-of-type': function(m) {
+        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
+      },
+      'first-of-type':  function(m) {
+        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
+      },
+      'last-of-type':   function(m) {
+        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
+      },
+      'only-of-type':   function(m) {
+        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
+      },
+      nth: function(fragment, m) {
+        var mm, formula = m[6], predicate;
+        if (formula == 'even') formula = '2n+0';
+        if (formula == 'odd')  formula = '2n+1';
+        if (mm = formula.match(/^(\d+)$/)) // digit only
+          return '[' + fragment + "= " + mm[1] + ']';
+        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+          if (mm[1] == "-") mm[1] = -1;
+          var a = mm[1] ? Number(mm[1]) : 1;
+          var b = mm[2] ? Number(mm[2]) : 0;
+          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
+          "((#{fragment} - #{b}) div #{a} >= 0)]";
+          return new Template(predicate).evaluate({
+            fragment: fragment, a: a, b: b });
+        }
+      }
+    }
+  },
+
+  criteria: {
+    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
+    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
+    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
+    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
+    attr: function(m) {
+      m[3] = (m[5] || m[6]);
+      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
+    },
+    pseudo: function(m) {
+      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
+      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
+    },
+    descendant:   'c = "descendant";',
+    child:        'c = "child";',
+    adjacent:     'c = "adjacent";',
+    laterSibling: 'c = "laterSibling";'
+  },
+
+  patterns: {
+    // combinators must be listed first
+    // (and descendant needs to be last combinator)
+    laterSibling: /^\s*~\s*/,
+    child:        /^\s*>\s*/,
+    adjacent:     /^\s*\+\s*/,
+    descendant:   /^\s/,
+
+    // selectors follow
+    tagName:      /^\s*(\*|[\w\-]+)(\b|$)?/,
+    id:           /^#([\w\-\*]+)(\b|$)/,
+    className:    /^\.([\w\-\*]+)(\b|$)/,
+    pseudo:
+/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,
+    attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/,
+    attr:         /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/
+  },
+
+  // for Selector.match and Element#match
+  assertions: {
+    tagName: function(element, matches) {
+      return matches[1].toUpperCase() == element.tagName.toUpperCase();
+    },
+
+    className: function(element, matches) {
+      return Element.hasClassName(element, matches[1]);
+    },
+
+    id: function(element, matches) {
+      return element.id === matches[1];
+    },
+
+    attrPresence: function(element, matches) {
+      return Element.hasAttribute(element, matches[1]);
+    },
+
+    attr: function(element, matches) {
+      var nodeValue = Element.readAttribute(element, matches[1]);
+      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
+    }
+  },
+
+  handlers: {
+    // UTILITY FUNCTIONS
+    // joins two collections
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        a.push(node);
+      return a;
+    },
+
+    // marks an array of nodes for counting
+    mark: function(nodes) {
+      var _true = Prototype.emptyFunction;
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._countedByPrototype = _true;
+      return nodes;
+    },
+
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node._countedByPrototype = undefined;
+      return nodes;
+    },
+
+    // mark each child node with its position (for nth calls)
+    // "ofType" flag indicates whether we're indexing for nth-of-type
+    // rather than nth-child
+    index: function(parentNode, reverse, ofType) {
+      parentNode._countedByPrototype = Prototype.emptyFunction;
+      if (reverse) {
+        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
+          var node = nodes[i];
+          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+        }
+      } else {
+        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
+          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
+      }
+    },
+
+    // filters out duplicates and extends all nodes
+    unique: function(nodes) {
+      if (nodes.length == 0) return nodes;
+      var results = [], n;
+      for (var i = 0, l = nodes.length; i < l; i++)
+        if (!(n = nodes[i])._countedByPrototype) {
+          n._countedByPrototype = Prototype.emptyFunction;
+          results.push(Element.extend(n));
+        }
+      return Selector.handlers.unmark(results);
+    },
+
+    // COMBINATOR FUNCTIONS
+    descendant: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, node.getElementsByTagName('*'));
+      return results;
+    },
+
+    child: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        for (var j = 0, child; child = node.childNodes[j]; j++)
+          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
+      }
+      return results;
+    },
+
+    adjacent: function(nodes) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        var next = this.nextElementSibling(node);
+        if (next) results.push(next);
+      }
+      return results;
+    },
+
+    laterSibling: function(nodes) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        h.concat(results, Element.nextSiblings(node));
+      return results;
+    },
+
+    nextElementSibling: function(node) {
+      while (node = node.nextSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    previousElementSibling: function(node) {
+      while (node = node.previousSibling)
+        if (node.nodeType == 1) return node;
+      return null;
+    },
+
+    // TOKEN FUNCTIONS
+    tagName: function(nodes, root, tagName, combinator) {
+      var uTagName = tagName.toUpperCase();
+      var results = [], h = Selector.handlers;
+      if (nodes) {
+        if (combinator) {
+          // fastlane for ordinary descendant combinators
+          if (combinator == "descendant") {
+            for (var i = 0, node; node = nodes[i]; i++)
+              h.concat(results, node.getElementsByTagName(tagName));
+            return results;
+          } else nodes = this[combinator](nodes);
+          if (tagName == "*") return nodes;
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.tagName.toUpperCase() === uTagName) results.push(node);
+        return results;
+      } else return root.getElementsByTagName(tagName);
+    },
+
+    id: function(nodes, root, id, combinator) {
+      var targetNode = $(id), h = Selector.handlers;
+      if (!targetNode) return [];
+      if (!nodes && root == document) return [targetNode];
+      if (nodes) {
+        if (combinator) {
+          if (combinator == 'child') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (targetNode.parentNode == node) return [targetNode];
+          } else if (combinator == 'descendant') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Element.descendantOf(targetNode, node)) return [targetNode];
+          } else if (combinator == 'adjacent') {
+            for (var i = 0, node; node = nodes[i]; i++)
+              if (Selector.handlers.previousElementSibling(targetNode) == node)
+                return [targetNode];
+          } else nodes = h[combinator](nodes);
+        }
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node == targetNode) return [targetNode];
+        return [];
+      }
+      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
+    },
+
+    className: function(nodes, root, className, combinator) {
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      return Selector.handlers.byClassName(nodes, root, className);
+    },
+
+    byClassName: function(nodes, root, className) {
+      if (!nodes) nodes = Selector.handlers.descendant([root]);
+      var needle = ' ' + className + ' ';
+      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
+        nodeClassName = node.className;
+        if (nodeClassName.length == 0) continue;
+        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
+          results.push(node);
+      }
+      return results;
+    },
+
+    attrPresence: function(nodes, root, attr, combinator) {
+      if (!nodes) nodes = root.getElementsByTagName("*");
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      var results = [];
+      for (var i = 0, node; node = nodes[i]; i++)
+        if (Element.hasAttribute(node, attr)) results.push(node);
+      return results;
+    },
+
+    attr: function(nodes, root, attr, value, operator, combinator) {
+      if (!nodes) nodes = root.getElementsByTagName("*");
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      var handler = Selector.operators[operator], results = [];
+      for (var i = 0, node; node = nodes[i]; i++) {
+        var nodeValue = Element.readAttribute(node, attr);
+        if (nodeValue === null) continue;
+        if (handler(nodeValue, value)) results.push(node);
+      }
+      return results;
+    },
+
+    pseudo: function(nodes, name, value, root, combinator) {
+      if (nodes && combinator) nodes = this[combinator](nodes);
+      if (!nodes) nodes = root.getElementsByTagName("*");
+      return Selector.pseudos[name](nodes, value, root);
+    }
+  },
+
+  pseudos: {
+    'first-child': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.previousElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    'last-child': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        if (Selector.handlers.nextElementSibling(node)) continue;
+          results.push(node);
+      }
+      return results;
+    },
+    'only-child': function(nodes, value, root) {
+      var h = Selector.handlers;
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
+          results.push(node);
+      return results;
+    },
+    'nth-child':        function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root);
+    },
+    'nth-last-child':   function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true);
+    },
+    'nth-of-type':      function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, false, true);
+    },
+    'nth-last-of-type': function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, formula, root, true, true);
+    },
+    'first-of-type':    function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, "1", root, false, true);
+    },
+    'last-of-type':     function(nodes, formula, root) {
+      return Selector.pseudos.nth(nodes, "1", root, true, true);
+    },
+    'only-of-type':     function(nodes, formula, root) {
+      var p = Selector.pseudos;
+      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
+    },
+
+    // handles the an+b logic
+    getIndices: function(a, b, total) {
+      if (a == 0) return b > 0 ? [b] : [];
+      return $R(1, total).inject([], function(memo, i) {
+        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
+        return memo;
+      });
+    },
+
+    // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type
+    nth: function(nodes, formula, root, reverse, ofType) {
+      if (nodes.length == 0) return [];
+      if (formula == 'even') formula = '2n+0';
+      if (formula == 'odd')  formula = '2n+1';
+      var h = Selector.handlers, results = [], indexed = [], m;
+      h.mark(nodes);
+      for (var i = 0, node; node = nodes[i]; i++) {
+        if (!node.parentNode._countedByPrototype) {
+          h.index(node.parentNode, reverse, ofType);
+          indexed.push(node.parentNode);
+        }
+      }
+      if (formula.match(/^\d+$/)) { // just a number
+        formula = Number(formula);
+        for (var i = 0, node; node = nodes[i]; i++)
+          if (node.nodeIndex == formula) results.push(node);
+      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
+        if (m[1] == "-") m[1] = -1;
+        var a = m[1] ? Number(m[1]) : 1;
+        var b = m[2] ? Number(m[2]) : 0;
+        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
+        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
+          for (var j = 0; j < l; j++)
+            if (node.nodeIndex == indices[j]) results.push(node);
+        }
+      }
+      h.unmark(nodes);
+      h.unmark(indexed);
+      return results;
+    },
+
+    'empty': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++) {
+        // IE treats comments as element nodes
+        if (node.tagName == '!' || node.firstChild) continue;
+        results.push(node);
+      }
+      return results;
+    },
+
+    'not': function(nodes, selector, root) {
+      var h = Selector.handlers, selectorType, m;
+      var exclusions = new Selector(selector).findElements(root);
+      h.mark(exclusions);
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node._countedByPrototype) results.push(node);
+      h.unmark(exclusions);
+      return results;
+    },
+
+    'enabled': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (!node.disabled && (!node.type || node.type !== 'hidden'))
+          results.push(node);
+      return results;
+    },
+
+    'disabled': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.disabled) results.push(node);
+      return results;
+    },
+
+    'checked': function(nodes, value, root) {
+      for (var i = 0, results = [], node; node = nodes[i]; i++)
+        if (node.checked) results.push(node);
+      return results;
+    }
+  },
+
+  operators: {
+    '=':  function(nv, v) { return nv == v; },
+    '!=': function(nv, v) { return nv != v; },
+    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
+    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
+    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
+    '$=': function(nv, v) { return nv.endsWith(v); },
+    '*=': function(nv, v) { return nv.include(v); },
+    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
+    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
+     '-').include('-' + (v || "").toUpperCase() + '-'); }
+  },
+
+  split: function(expression) {
+    var expressions = [];
+    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
+      expressions.push(m[1].strip());
+    });
+    return expressions;
+  },
+
+  matchElements: function(elements, expression) {
+    var matches = $$(expression), h = Selector.handlers;
+    h.mark(matches);
+    for (var i = 0, results = [], element; element = elements[i]; i++)
+      if (element._countedByPrototype) results.push(element);
+    h.unmark(matches);
+    return results;
+  },
+
+  findElement: function(elements, expression, index) {
+    if (Object.isNumber(expression)) {
+      index = expression; expression = false;
+    }
+    return Selector.matchElements(elements, expression || '*')[index || 0];
+  },
+
+  findChildElements: function(element, expressions) {
+    expressions = Selector.split(expressions.join(','));
+    var results = [], h = Selector.handlers;
+    for (var i = 0, l = expressions.length, selector; i < l; i++) {
+      selector = new Selector(expressions[i].strip());
+      h.concat(results, selector.findElements(element));
+    }
+    return (l > 1) ? h.unique(results) : results;
+  }
+});
+
+if (Prototype.Browser.IE) {
+  Object.extend(Selector.handlers, {
+    // IE returns comment nodes on getElementsByTagName("*").
+    // Filter them out.
+    concat: function(a, b) {
+      for (var i = 0, node; node = b[i]; i++)
+        if (node.tagName !== "!") a.push(node);
+      return a;
+    },
+
+    // IE improperly serializes _countedByPrototype in (inner|outer)HTML.
+    unmark: function(nodes) {
+      for (var i = 0, node; node = nodes[i]; i++)
+        node.removeAttribute('_countedByPrototype');
+      return nodes;
+    }
+  });
+}
+
+function $$() {
+  return Selector.findChildElements(document, $A(arguments));
+}
+var Form = {
+  reset: function(form) {
+    $(form).reset();
+    return form;
+  },
+
+  serializeElements: function(elements, options) {
+    if (typeof options != 'object') options = { hash: !!options };
+    else if (Object.isUndefined(options.hash)) options.hash = true;
+    var key, value, submitted = false, submit = options.submit;
+
+    var data = elements.inject({ }, function(result, element) {
+      if (!element.disabled && element.name) {
+        key = element.name; value = $(element).getValue();
+        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
+            submit !== false && (!submit || key == submit) && (submitted = true)))) {
+          if (key in result) {
+            // a key is already present; construct an array of values
+            if (!Object.isArray(result[key])) result[key] = [result[key]];
+            result[key].push(value);
+          }
+          else result[key] = value;
+        }
+      }
+      return result;
+    });
+
+    return options.hash ? data : Object.toQueryString(data);
+  }
+};
+
+Form.Methods = {
+  serialize: function(form, options) {
+    return Form.serializeElements(Form.getElements(form), options);
+  },
+
+  getElements: function(form) {
+    return $A($(form).getElementsByTagName('*')).inject([],
+      function(elements, child) {
+        if (Form.Element.Serializers[child.tagName.toLowerCase()])
+          elements.push(Element.extend(child));
+        return elements;
+      }
+    );
+  },
+
+  getInputs: function(form, typeName, name) {
+    form = $(form);
+    var inputs = form.getElementsByTagName('input');
+
+    if (!typeName && !name) return $A(inputs).map(Element.extend);
+
+    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
+      var input = inputs[i];
+      if ((typeName && input.type != typeName) || (name && input.name != name))
+        continue;
+      matchingInputs.push(Element.extend(input));
+    }
+
+    return matchingInputs;
+  },
+
+  disable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke('disable');
+    return form;
+  },
+
+  enable: function(form) {
+    form = $(form);
+    Form.getElements(form).invoke('enable');
+    return form;
+  },
+
+  findFirstElement: function(form) {
+    var elements = $(form).getElements().findAll(function(element) {
+      return 'hidden' != element.type && !element.disabled;
+    });
+    var firstByIndex = elements.findAll(function(element) {
+      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
+    }).sortBy(function(element) { return element.tabIndex }).first();
+
+    return firstByIndex ? firstByIndex : elements.find(function(element) {
+      return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
+    });
+  },
+
+  focusFirstElement: function(form) {
+    form = $(form);
+    form.findFirstElement().activate();
+    return form;
+  },
+
+  request: function(form, options) {
+    form = $(form), options = Object.clone(options || { });
+
+    var params = options.parameters, action = form.readAttribute('action') || '';
+    if (action.blank()) action = window.location.href;
+    options.parameters = form.serialize(true);
+
+    if (params) {
+      if (Object.isString(params)) params = params.toQueryParams();
+      Object.extend(options.parameters, params);
+    }
+
+    if (form.hasAttribute('method') && !options.method)
+      options.method = form.method;
+
+    return new Ajax.Request(action, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element = {
+  focus: function(element) {
+    $(element).focus();
+    return element;
+  },
+
+  select: function(element) {
+    $(element).select();
+    return element;
+  }
+};
+
+Form.Element.Methods = {
+  serialize: function(element) {
+    element = $(element);
+    if (!element.disabled && element.name) {
+      var value = element.getValue();
+      if (value != undefined) {
+        var pair = { };
+        pair[element.name] = value;
+        return Object.toQueryString(pair);
+      }
+    }
+    return '';
+  },
+
+  getValue: function(element) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    return Form.Element.Serializers[method](element);
+  },
+
+  setValue: function(element, value) {
+    element = $(element);
+    var method = element.tagName.toLowerCase();
+    Form.Element.Serializers[method](element, value);
+    return element;
+  },
+
+  clear: function(element) {
+    $(element).value = '';
+    return element;
+  },
+
+  present: function(element) {
+    return $(element).value != '';
+  },
+
+  activate: function(element) {
+    element = $(element);
+    try {
+      element.focus();
+      if (element.select && (element.tagName.toLowerCase() != 'input' ||
+          !['button', 'reset', 'submit'].include(element.type)))
+        element.select();
+    } catch (e) { }
+    return element;
+  },
+
+  disable: function(element) {
+    element = $(element);
+    element.disabled = true;
+    return element;
+  },
+
+  enable: function(element) {
+    element = $(element);
+    element.disabled = false;
+    return element;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Field = Form.Element;
+var $F = Form.Element.Methods.getValue;
+
+/*--------------------------------------------------------------------------*/
+
+Form.Element.Serializers = {
+  input: function(element, value) {
+    switch (element.type.toLowerCase()) {
+      case 'checkbox':
+      case 'radio':
+        return Form.Element.Serializers.inputSelector(element, value);
+      default:
+        return Form.Element.Serializers.textarea(element, value);
+    }
+  },
+
+  inputSelector: function(element, value) {
+    if (Object.isUndefined(value)) return element.checked ? element.value : null;
+    else element.checked = !!value;
+  },
+
+  textarea: function(element, value) {
+    if (Object.isUndefined(value)) return element.value;
+    else element.value = value;
+  },
+
+  select: function(element, value) {
+    if (Object.isUndefined(value))
+      return this[element.type == 'select-one' ?
+        'selectOne' : 'selectMany'](element);
+    else {
+      var opt, currentValue, single = !Object.isArray(value);
+      for (var i = 0, length = element.length; i < length; i++) {
+        opt = element.options[i];
+        currentValue = this.optionValue(opt);
+        if (single) {
+          if (currentValue == value) {
+            opt.selected = true;
+            return;
+          }
+        }
+        else opt.selected = value.include(currentValue);
+      }
+    }
+  },
+
+  selectOne: function(element) {
+    var index = element.selectedIndex;
+    return index >= 0 ? this.optionValue(element.options[index]) : null;
+  },
+
+  selectMany: function(element) {
+    var values, length = element.length;
+    if (!length) return null;
+
+    for (var i = 0, values = []; i < length; i++) {
+      var opt = element.options[i];
+      if (opt.selected) values.push(this.optionValue(opt));
+    }
+    return values;
+  },
+
+  optionValue: function(opt) {
+    // extend element because hasAttribute may not be native
+    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
+  initialize: function($super, element, frequency, callback) {
+    $super(callback, frequency);
+    this.element   = $(element);
+    this.lastValue = this.getValue();
+  },
+
+  execute: function() {
+    var value = this.getValue();
+    if (Object.isString(this.lastValue) && Object.isString(value) ?
+        this.lastValue != value : String(this.lastValue) != String(value)) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  }
+});
+
+Form.Element.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.Observer = Class.create(Abstract.TimedObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+
+/*--------------------------------------------------------------------------*/
+
+Abstract.EventObserver = Class.create({
+  initialize: function(element, callback) {
+    this.element  = $(element);
+    this.callback = callback;
+
+    this.lastValue = this.getValue();
+    if (this.element.tagName.toLowerCase() == 'form')
+      this.registerFormCallbacks();
+    else
+      this.registerCallback(this.element);
+  },
+
+  onElementEvent: function() {
+    var value = this.getValue();
+    if (this.lastValue != value) {
+      this.callback(this.element, value);
+      this.lastValue = value;
+    }
+  },
+
+  registerFormCallbacks: function() {
+    Form.getElements(this.element).each(this.registerCallback, this);
+  },
+
+  registerCallback: function(element) {
+    if (element.type) {
+      switch (element.type.toLowerCase()) {
+        case 'checkbox':
+        case 'radio':
+          Event.observe(element, 'click', this.onElementEvent.bind(this));
+          break;
+        default:
+          Event.observe(element, 'change', this.onElementEvent.bind(this));
+          break;
+      }
+    }
+  }
+});
+
+Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.Element.getValue(this.element);
+  }
+});
+
+Form.EventObserver = Class.create(Abstract.EventObserver, {
+  getValue: function() {
+    return Form.serialize(this.element);
+  }
+});
+if (!window.Event) var Event = { };
+
+Object.extend(Event, {
+  KEY_BACKSPACE: 8,
+  KEY_TAB:       9,
+  KEY_RETURN:   13,
+  KEY_ESC:      27,
+  KEY_LEFT:     37,
+  KEY_UP:       38,
+  KEY_RIGHT:    39,
+  KEY_DOWN:     40,
+  KEY_DELETE:   46,
+  KEY_HOME:     36,
+  KEY_END:      35,
+  KEY_PAGEUP:   33,
+  KEY_PAGEDOWN: 34,
+  KEY_INSERT:   45,
+
+  cache: { },
+
+  relatedTarget: function(event) {
+    var element;
+    switch(event.type) {
+      case 'mouseover': element = event.fromElement; break;
+      case 'mouseout':  element = event.toElement;   break;
+      default: return null;
+    }
+    return Element.extend(element);
+  }
+});
+
+Event.Methods = (function() {
+  var isButton;
+
+  if (Prototype.Browser.IE) {
+    var buttonMap = { 0: 1, 1: 4, 2: 2 };
+    isButton = function(event, code) {
+      return event.button == buttonMap[code];
+    };
+
+  } else if (Prototype.Browser.WebKit) {
+    isButton = function(event, code) {
+      switch (code) {
+        case 0: return event.which == 1 && !event.metaKey;
+        case 1: return event.which == 1 && event.metaKey;
+        default: return false;
+      }
+    };
+
+  } else {
+    isButton = function(event, code) {
+      return event.which ? (event.which === code + 1) : (event.button === code);
+    };
+  }
+
+  return {
+    isLeftClick:   function(event) { return isButton(event, 0) },
+    isMiddleClick: function(event) { return isButton(event, 1) },
+    isRightClick:  function(event) { return isButton(event, 2) },
+
+    element: function(event) {
+      event = Event.extend(event);
+
+      var node          = event.target,
+          type          = event.type,
+          currentTarget = event.currentTarget;
+
+      if (currentTarget && currentTarget.tagName) {
+        // Firefox screws up the "click" event when moving between radio buttons
+        // via arrow keys. It also screws up the "load" and "error" events on images,
+        // reporting the document as the target instead of the original image.
+        if (type === 'load' || type === 'error' ||
+          (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
+            && currentTarget.type === 'radio'))
+              node = currentTarget;
+      }
+      if (node.nodeType == Node.TEXT_NODE) node = node.parentNode;
+      return Element.extend(node);
+    },
+
+    findElement: function(event, expression) {
+      var element = Event.element(event);
+      if (!expression) return element;
+      var elements = [element].concat(element.ancestors());
+      return Selector.findElement(elements, expression, 0);
+    },
+
+    pointer: function(event) {
+      var docElement = document.documentElement,
+      body = document.body || { scrollLeft: 0, scrollTop: 0 };
+      return {
+        x: event.pageX || (event.clientX +
+          (docElement.scrollLeft || body.scrollLeft) -
+          (docElement.clientLeft || 0)),
+        y: event.pageY || (event.clientY +
+          (docElement.scrollTop || body.scrollTop) -
+          (docElement.clientTop || 0))
+      };
+    },
+
+    pointerX: function(event) { return Event.pointer(event).x },
+    pointerY: function(event) { return Event.pointer(event).y },
+
+    stop: function(event) {
+      Event.extend(event);
+      event.preventDefault();
+      event.stopPropagation();
+      event.stopped = true;
+    }
+  };
+})();
+
+Event.extend = (function() {
+  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
+    m[name] = Event.Methods[name].methodize();
+    return m;
+  });
+
+  if (Prototype.Browser.IE) {
+    Object.extend(methods, {
+      stopPropagation: function() { this.cancelBubble = true },
+      preventDefault:  function() { this.returnValue = false },
+      inspect: function() { return "[object Event]" }
+    });
+
+    return function(event) {
+      if (!event) return false;
+      if (event._extendedByPrototype) return event;
+
+      event._extendedByPrototype = Prototype.emptyFunction;
+      var pointer = Event.pointer(event);
+      Object.extend(event, {
+        target: event.srcElement,
+        relatedTarget: Event.relatedTarget(event),
+        pageX:  pointer.x,
+        pageY:  pointer.y
+      });
+      return Object.extend(event, methods);
+    };
+
+  } else {
+    Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__'];
+    Object.extend(Event.prototype, methods);
+    return Prototype.K;
+  }
+})();
+
+Object.extend(Event, (function() {
+  var cache = Event.cache;
+
+  function getEventID(element) {
+    if (element._prototypeEventID) return element._prototypeEventID[0];
+    arguments.callee.id = arguments.callee.id || 1;
+    return element._prototypeEventID = [++arguments.callee.id];
+  }
+
+  function getDOMEventName(eventName) {
+    if (eventName && eventName.include(':')) return "dataavailable";
+    return eventName;
+  }
+
+  function getCacheForID(id) {
+    return cache[id] = cache[id] || { };
+  }
+
+  function getWrappersForEventName(id, eventName) {
+    var c = getCacheForID(id);
+    return c[eventName] = c[eventName] || [];
+  }
+
+  function createWrapper(element, eventName, handler) {
+    var id = getEventID(element);
+    var c = getWrappersForEventName(id, eventName);
+    if (c.pluck("handler").include(handler)) return false;
+
+    var wrapper = function(event) {
+      if (!Event || !Event.extend ||
+        (event.eventName && event.eventName != eventName))
+          return false;
+
+      Event.extend(event);
+      handler.call(element, event);
+    };
+
+    wrapper.handler = handler;
+    c.push(wrapper);
+    return wrapper;
+  }
+
+  function findWrapper(id, eventName, handler) {
+    var c = getWrappersForEventName(id, eventName);
+    return c.find(function(wrapper) { return wrapper.handler == handler });
+  }
+
+  function destroyWrapper(id, eventName, handler) {
+    var c = getCacheForID(id);
+    if (!c[eventName]) return false;
+    c[eventName] = c[eventName].without(findWrapper(id, eventName, handler));
+  }
+
+  function destroyCache() {
+    for (var id in cache)
+      for (var eventName in cache[id])
+        cache[id][eventName] = null;
+  }
+
+
+  // Internet Explorer needs to remove event handlers on page unload
+  // in order to avoid memory leaks.
+  if (window.attachEvent) {
+    window.attachEvent("onunload", destroyCache);
+  }
+
+  // Safari has a dummy event handler on page unload so that it won't
+  // use its bfcache. Safari <= 3.1 has an issue with restoring the "document"
+  // object when page is returned to via the back button using its bfcache.
+  if (Prototype.Browser.WebKit) {
+    window.addEventListener('unload', Prototype.emptyFunction, false);
+  }
+
+  return {
+    observe: function(element, eventName, handler) {
+      element = $(element);
+      var name = getDOMEventName(eventName);
+
+      var wrapper = createWrapper(element, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.addEventListener) {
+        element.addEventListener(name, wrapper, false);
+      } else {
+        element.attachEvent("on" + name, wrapper);
+      }
+
+      return element;
+    },
+
+    stopObserving: function(element, eventName, handler) {
+      element = $(element);
+      var id = getEventID(element), name = getDOMEventName(eventName);
+
+      if (!handler && eventName) {
+        getWrappersForEventName(id, eventName).each(function(wrapper) {
+          element.stopObserving(eventName, wrapper.handler);
+        });
+        return element;
+
+      } else if (!eventName) {
+        Object.keys(getCacheForID(id)).each(function(eventName) {
+          element.stopObserving(eventName);
+        });
+        return element;
+      }
+
+      var wrapper = findWrapper(id, eventName, handler);
+      if (!wrapper) return element;
+
+      if (element.removeEventListener) {
+        element.removeEventListener(name, wrapper, false);
+      } else {
+        element.detachEvent("on" + name, wrapper);
+      }
+
+      destroyWrapper(id, eventName, handler);
+
+      return element;
+    },
+
+    fire: function(element, eventName, memo) {
+      element = $(element);
+      if (element == document && document.createEvent && !element.dispatchEvent)
+        element = document.documentElement;
+
+      var event;
+      if (document.createEvent) {
+        event = document.createEvent("HTMLEvents");
+        event.initEvent("dataavailable", true, true);
+      } else {
+        event = document.createEventObject();
+        event.eventType = "ondataavailable";
+      }
+
+      event.eventName = eventName;
+      event.memo = memo || { };
+
+      if (document.createEvent) {
+        element.dispatchEvent(event);
+      } else {
+        element.fireEvent(event.eventType, event);
+      }
+
+      return Event.extend(event);
+    }
+  };
+})());
+
+Object.extend(Event, Event.Methods);
+
+Element.addMethods({
+  fire:          Event.fire,
+  observe:       Event.observe,
+  stopObserving: Event.stopObserving
+});
+
+Object.extend(document, {
+  fire:          Element.Methods.fire.methodize(),
+  observe:       Element.Methods.observe.methodize(),
+  stopObserving: Element.Methods.stopObserving.methodize(),
+  loaded:        false
+});
+
+(function() {
+  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
+     Matthias Miller, Dean Edwards and John Resig. */
+
+  var timer;
+
+  function fireContentLoadedEvent() {
+    if (document.loaded) return;
+    if (timer) window.clearInterval(timer);
+    document.fire("dom:loaded");
+    document.loaded = true;
+  }
+
+  if (document.addEventListener) {
+    if (Prototype.Browser.WebKit) {
+      timer = window.setInterval(function() {
+        if (/loaded|complete/.test(document.readyState))
+          fireContentLoadedEvent();
+      }, 0);
+
+      Event.observe(window, "load", fireContentLoadedEvent);
+
+    } else {
+      document.addEventListener("DOMContentLoaded",
+        fireContentLoadedEvent, false);
+    }
+
+  } else {
+    document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
+    $("__onDOMContentLoaded").onreadystatechange = function() {
+      if (this.readyState == "complete") {
+        this.onreadystatechange = null;
+        fireContentLoadedEvent();
+      }
+    };
+  }
+})();
+/*------------------------------- DEPRECATED -------------------------------*/
+
+Hash.toQueryString = Object.toQueryString;
+
+var Toggle = { display: Element.toggle };
+
+Element.Methods.childOf = Element.Methods.descendantOf;
+
+var Insertion = {
+  Before: function(element, content) {
+    return Element.insert(element, {before:content});
+  },
+
+  Top: function(element, content) {
+    return Element.insert(element, {top:content});
+  },
+
+  Bottom: function(element, content) {
+    return Element.insert(element, {bottom:content});
+  },
+
+  After: function(element, content) {
+    return Element.insert(element, {after:content});
+  }
+};
+
+var $continue = new Error('"throw $continue" is deprecated, use "return" instead');
+
+// This should be moved to script.aculo.us; notice the deprecated methods
+// further below, that map to the newer Element methods.
+var Position = {
+  // set to true if needed, warning: firefox performance problems
+  // NOT neeeded for page scrolling, only if draggable contained in
+  // scrollable elements
+  includeScrollOffsets: false,
+
+  // must be called before calling withinIncludingScrolloffset, every time the
+  // page is scrolled
+  prepare: function() {
+    this.deltaX =  window.pageXOffset
+                || document.documentElement.scrollLeft
+                || document.body.scrollLeft
+                || 0;
+    this.deltaY =  window.pageYOffset
+                || document.documentElement.scrollTop
+                || document.body.scrollTop
+                || 0;
+  },
+
+  // caches x/y coordinate pair to use with overlap
+  within: function(element, x, y) {
+    if (this.includeScrollOffsets)
+      return this.withinIncludingScrolloffsets(element, x, y);
+    this.xcomp = x;
+    this.ycomp = y;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (y >= this.offset[1] &&
+            y <  this.offset[1] + element.offsetHeight &&
+            x >= this.offset[0] &&
+            x <  this.offset[0] + element.offsetWidth);
+  },
+
+  withinIncludingScrolloffsets: function(element, x, y) {
+    var offsetcache = Element.cumulativeScrollOffset(element);
+
+    this.xcomp = x + offsetcache[0] - this.deltaX;
+    this.ycomp = y + offsetcache[1] - this.deltaY;
+    this.offset = Element.cumulativeOffset(element);
+
+    return (this.ycomp >= this.offset[1] &&
+            this.ycomp <  this.offset[1] + element.offsetHeight &&
+            this.xcomp >= this.offset[0] &&
+            this.xcomp <  this.offset[0] + element.offsetWidth);
+  },
+
+  // within must be called directly before
+  overlap: function(mode, element) {
+    if (!mode) return 0;
+    if (mode == 'vertical')
+      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+        element.offsetHeight;
+    if (mode == 'horizontal')
+      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+        element.offsetWidth;
+  },
+
+  // Deprecation layer -- use newer Element methods now (1.5.2).
+
+  cumulativeOffset: Element.Methods.cumulativeOffset,
+
+  positionedOffset: Element.Methods.positionedOffset,
+
+  absolutize: function(element) {
+    Position.prepare();
+    return Element.absolutize(element);
+  },
+
+  relativize: function(element) {
+    Position.prepare();
+    return Element.relativize(element);
+  },
+
+  realOffset: Element.Methods.cumulativeScrollOffset,
+
+  offsetParent: Element.Methods.getOffsetParent,
+
+  page: Element.Methods.viewportOffset,
+
+  clone: function(source, target, options) {
+    options = options || { };
+    return Element.clonePosition(target, source, options);
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
+  function iter(name) {
+    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
+  }
+
+  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
+  function(element, className) {
+    className = className.toString().strip();
+    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
+    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
+  } : function(element, className) {
+    className = className.toString().strip();
+    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
+    if (!classNames && !className) return elements;
+
+    var nodes = $(element).getElementsByTagName('*');
+    className = ' ' + className + ' ';
+
+    for (var i = 0, child, cn; child = nodes[i]; i++) {
+      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
+          (classNames && classNames.all(function(name) {
+            return !name.toString().blank() && cn.include(' ' + name + ' ');
+          }))))
+        elements.push(Element.extend(child));
+    }
+    return elements;
+  };
+
+  return function(className, parentElement) {
+    return $(parentElement || document.body).getElementsByClassName(className);
+  };
+}(Element.Methods);
+
+/*--------------------------------------------------------------------------*/
+
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+  initialize: function(element) {
+    this.element = $(element);
+  },
+
+  _each: function(iterator) {
+    this.element.className.split(/\s+/).select(function(name) {
+      return name.length > 0;
+    })._each(iterator);
+  },
+
+  set: function(className) {
+    this.element.className = className;
+  },
+
+  add: function(classNameToAdd) {
+    if (this.include(classNameToAdd)) return;
+    this.set($A(this).concat(classNameToAdd).join(' '));
+  },
+
+  remove: function(classNameToRemove) {
+    if (!this.include(classNameToRemove)) return;
+    this.set($A(this).without(classNameToRemove).join(' '));
+  },
+
+  toString: function() {
+    return $A(this).join(' ');
+  }
+};
+
+Object.extend(Element.ClassNames.prototype, Enumerable);
+
+/*--------------------------------------------------------------------------*/
+
+Element.addMethods();
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js
new file mode 100644
index 0000000..dba8bec
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/builder.js
@@ -0,0 +1,136 @@
+// script.aculo.us builder.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Builder = {
+  NODEMAP: {
+    AREA: 'map',
+    CAPTION: 'table',
+    COL: 'table',
+    COLGROUP: 'table',
+    LEGEND: 'fieldset',
+    OPTGROUP: 'select',
+    OPTION: 'select',
+    PARAM: 'object',
+    TBODY: 'table',
+    TD: 'table',
+    TFOOT: 'table',
+    TH: 'table',
+    THEAD: 'table',
+    TR: 'table'
+  },
+  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
+  //       due to a Firefox bug
+  node: function(elementName) {
+    elementName = elementName.toUpperCase();
+
+    // try innerHTML approach
+    var parentTag = this.NODEMAP[elementName] || 'div';
+    var parentElement = document.createElement(parentTag);
+    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+    } catch(e) {}
+    var element = parentElement.firstChild || null;
+
+    // see if browser added wrapping tags
+    if(element && (element.tagName.toUpperCase() != elementName))
+      element = element.getElementsByTagName(elementName)[0];
+
+    // fallback to createElement approach
+    if(!element) element = document.createElement(elementName);
+
+    // abort if nothing could be created
+    if(!element) return;
+
+    // attributes (or text)
+    if(arguments[1])
+      if(this._isStringOrNumber(arguments[1]) ||
+        (arguments[1] instanceof Array) ||
+        arguments[1].tagName) {
+          this._children(element, arguments[1]);
+        } else {
+          var attrs = this._attributes(arguments[1]);
+          if(attrs.length) {
+            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
+              parentElement.innerHTML = "<" +elementName + " " +
+                attrs + "></" + elementName + ">";
+            } catch(e) {}
+            element = parentElement.firstChild || null;
+            // workaround firefox 1.0.X bug
+            if(!element) {
+              element = document.createElement(elementName);
+              for(attr in arguments[1])
+                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+            }
+            if(element.tagName.toUpperCase() != elementName)
+              element = parentElement.getElementsByTagName(elementName)[0];
+          }
+        }
+
+    // text, or array of children
+    if(arguments[2])
+      this._children(element, arguments[2]);
+
+     return $(element);
+  },
+  _text: function(text) {
+     return document.createTextNode(text);
+  },
+
+  ATTR_MAP: {
+    'className': 'class',
+    'htmlFor': 'for'
+  },
+
+  _attributes: function(attributes) {
+    var attrs = [];
+    for(attribute in attributes)
+      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
+          '="' + attributes[attribute].toString().escapeHTML().gsub(/"/,'&quot;') + '"');
+    return attrs.join(" ");
+  },
+  _children: function(element, children) {
+    if(children.tagName) {
+      element.appendChild(children);
+      return;
+    }
+    if(typeof children=='object') { // array can hold nodes and text
+      children.flatten().each( function(e) {
+        if(typeof e=='object')
+          element.appendChild(e);
+        else
+          if(Builder._isStringOrNumber(e))
+            element.appendChild(Builder._text(e));
+      });
+    } else
+      if(Builder._isStringOrNumber(children))
+        element.appendChild(Builder._text(children));
+  },
+  _isStringOrNumber: function(param) {
+    return(typeof param=='string' || typeof param=='number');
+  },
+  build: function(html) {
+    var element = this.node('div');
+    $(element).update(html.strip());
+    return element.down();
+  },
+  dump: function(scope) {
+    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope
+
+    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
+      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
+      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
+      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
+      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
+      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
+
+    tags.each( function(tag){
+      scope[tag] = function() {
+        return Builder.node.apply(Builder, [tag].concat($A(arguments)));
+      };
+    });
+  }
+};
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js
new file mode 100644
index 0000000..c56ccb7
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/controls.js
@@ -0,0 +1,965 @@
+// script.aculo.us controls.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//           (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
+//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
+// Contributors:
+//  Richard Livsey
+//  Rahul Bhargava
+//  Rob Wills
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// Autocompleter.Base handles all the autocompletion functionality
+// that's independent of the data source for autocompletion. This
+// includes drawing the autocompletion menu, observing keyboard
+// and mouse events, and similar.
+//
+// Specific autocompleters need to provide, at the very least,
+// a getUpdatedChoices function that will be invoked every time
+// the text inside the monitored textbox changes. This method
+// should get the text for which to provide autocompletion by
+// invoking this.getToken(), NOT by directly accessing
+// this.element.value. This is to allow incremental tokenized
+// autocompletion. Specific auto-completion logic (AJAX, etc)
+// belongs in getUpdatedChoices.
+//
+// Tokenized incremental autocompletion is enabled automatically
+// when an autocompleter is instantiated with the 'tokens' option
+// in the options parameter, e.g.:
+// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
+// will incrementally autocomplete with a comma as the token.
+// Additionally, ',' in the above example can be replaced with
+// a token array, e.g. { tokens: [',', '\n'] } which
+// enables autocompletion on multiple tokens. This is most
+// useful when one of the tokens is \n (a newline), as it
+// allows smart autocompletion after linebreaks.
+
+if(typeof Effect == 'undefined')
+  throw("controls.js requires including script.aculo.us' effects.js library");
+
+var Autocompleter = { };
+Autocompleter.Base = Class.create({
+  baseInitialize: function(element, update, options) {
+    element          = $(element);
+    this.element     = element;
+    this.update      = $(update);
+    this.hasFocus    = false;
+    this.changed     = false;
+    this.active      = false;
+    this.index       = 0;
+    this.entryCount  = 0;
+    this.oldElementValue = this.element.value;
+
+    if(this.setOptions)
+      this.setOptions(options);
+    else
+      this.options = options || { };
+
+    this.options.paramName    = this.options.paramName || this.element.name;
+    this.options.tokens       = this.options.tokens || [];
+    this.options.frequency    = this.options.frequency || 0.4;
+    this.options.minChars     = this.options.minChars || 1;
+    this.options.onShow       = this.options.onShow ||
+      function(element, update){
+        if(!update.style.position || update.style.position=='absolute') {
+          update.style.position = 'absolute';
+          Position.clone(element, update, {
+            setHeight: false,
+            offsetTop: element.offsetHeight
+          });
+        }
+        Effect.Appear(update,{duration:0.15});
+      };
+    this.options.onHide = this.options.onHide ||
+      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+
+    if(typeof(this.options.tokens) == 'string')
+      this.options.tokens = new Array(this.options.tokens);
+    // Force carriage returns as token delimiters anyway
+    if (!this.options.tokens.include('\n'))
+      this.options.tokens.push('\n');
+
+    this.observer = null;
+
+    this.element.setAttribute('autocomplete','off');
+
+    Element.hide(this.update);
+
+    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
+    Event.observe(this.element, 'keydown', this.onKeyPress.bindAsEventListener(this));
+  },
+
+  show: function() {
+    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+    if(!this.iefix &&
+      (Prototype.Browser.IE) &&
+      (Element.getStyle(this.update, 'position')=='absolute')) {
+      new Insertion.After(this.update,
+       '<iframe id="' + this.update.id + '_iefix" '+
+       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+      this.iefix = $(this.update.id+'_iefix');
+    }
+    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+  },
+
+  fixIEOverlapping: function() {
+    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
+    this.iefix.style.zIndex = 1;
+    this.update.style.zIndex = 2;
+    Element.show(this.iefix);
+  },
+
+  hide: function() {
+    this.stopIndicator();
+    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+    if(this.iefix) Element.hide(this.iefix);
+  },
+
+  startIndicator: function() {
+    if(this.options.indicator) Element.show(this.options.indicator);
+  },
+
+  stopIndicator: function() {
+    if(this.options.indicator) Element.hide(this.options.indicator);
+  },
+
+  onKeyPress: function(event) {
+    if(this.active)
+      switch(event.keyCode) {
+       case Event.KEY_TAB:
+       case Event.KEY_RETURN:
+         this.selectEntry();
+         Event.stop(event);
+       case Event.KEY_ESC:
+         this.hide();
+         this.active = false;
+         Event.stop(event);
+         return;
+       case Event.KEY_LEFT:
+       case Event.KEY_RIGHT:
+         return;
+       case Event.KEY_UP:
+         this.markPrevious();
+         this.render();
+         Event.stop(event);
+         return;
+       case Event.KEY_DOWN:
+         this.markNext();
+         this.render();
+         Event.stop(event);
+         return;
+      }
+     else
+       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;
+
+    this.changed = true;
+    this.hasFocus = true;
+
+    if(this.observer) clearTimeout(this.observer);
+      this.observer =
+        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+  },
+
+  activate: function() {
+    this.changed = false;
+    this.hasFocus = true;
+    this.getUpdatedChoices();
+  },
+
+  onHover: function(event) {
+    var element = Event.findElement(event, 'LI');
+    if(this.index != element.autocompleteIndex)
+    {
+        this.index = element.autocompleteIndex;
+        this.render();
+    }
+    Event.stop(event);
+  },
+
+  onClick: function(event) {
+    var element = Event.findElement(event, 'LI');
+    this.index = element.autocompleteIndex;
+    this.selectEntry();
+    this.hide();
+  },
+
+  onBlur: function(event) {
+    // needed to make click events working
+    setTimeout(this.hide.bind(this), 250);
+    this.hasFocus = false;
+    this.active = false;
+  },
+
+  render: function() {
+    if(this.entryCount > 0) {
+      for (var i = 0; i < this.entryCount; i++)
+        this.index==i ?
+          Element.addClassName(this.getEntry(i),"selected") :
+          Element.removeClassName(this.getEntry(i),"selected");
+      if(this.hasFocus) {
+        this.show();
+        this.active = true;
+      }
+    } else {
+      this.active = false;
+      this.hide();
+    }
+  },
+
+  markPrevious: function() {
+    if(this.index > 0) this.index--;
+      else this.index = this.entryCount-1;
+    this.getEntry(this.index).scrollIntoView(true);
+  },
+
+  markNext: function() {
+    if(this.index < this.entryCount-1) this.index++;
+      else this.index = 0;
+    this.getEntry(this.index).scrollIntoView(false);
+  },
+
+  getEntry: function(index) {
+    return this.update.firstChild.childNodes[index];
+  },
+
+  getCurrentEntry: function() {
+    return this.getEntry(this.index);
+  },
+
+  selectEntry: function() {
+    this.active = false;
+    this.updateElement(this.getCurrentEntry());
+  },
+
+  updateElement: function(selectedElement) {
+    if (this.options.updateElement) {
+      this.options.updateElement(selectedElement);
+      return;
+    }
+    var value = '';
+    if (this.options.select) {
+      var nodes = $(selectedElement).select('.' + this.options.select) || [];
+      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+    } else
+      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+
+    var bounds = this.getTokenBounds();
+    if (bounds[0] != -1) {
+      var newValue = this.element.value.substr(0, bounds[0]);
+      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
+      if (whitespace)
+        newValue += whitespace[0];
+      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
+    } else {
+      this.element.value = value;
+    }
+    this.oldElementValue = this.element.value;
+    this.element.focus();
+
+    if (this.options.afterUpdateElement)
+      this.options.afterUpdateElement(this.element, selectedElement);
+  },
+
+  updateChoices: function(choices) {
+    if(!this.changed && this.hasFocus) {
+      this.update.innerHTML = choices;
+      Element.cleanWhitespace(this.update);
+      Element.cleanWhitespace(this.update.down());
+
+      if(this.update.firstChild && this.update.down().childNodes) {
+        this.entryCount =
+          this.update.down().childNodes.length;
+        for (var i = 0; i < this.entryCount; i++) {
+          var entry = this.getEntry(i);
+          entry.autocompleteIndex = i;
+          this.addObservers(entry);
+        }
+      } else {
+        this.entryCount = 0;
+      }
+
+      this.stopIndicator();
+      this.index = 0;
+
+      if(this.entryCount==1 && this.options.autoSelect) {
+        this.selectEntry();
+        this.hide();
+      } else {
+        this.render();
+      }
+    }
+  },
+
+  addObservers: function(element) {
+    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+  },
+
+  onObserverEvent: function() {
+    this.changed = false;
+    this.tokenBounds = null;
+    if(this.getToken().length>=this.options.minChars) {
+      this.getUpdatedChoices();
+    } else {
+      this.active = false;
+      this.hide();
+    }
+    this.oldElementValue = this.element.value;
+  },
+
+  getToken: function() {
+    var bounds = this.getTokenBounds();
+    return this.element.value.substring(bounds[0], bounds[1]).strip();
+  },
+
+  getTokenBounds: function() {
+    if (null != this.tokenBounds) return this.tokenBounds;
+    var value = this.element.value;
+    if (value.strip().empty()) return [-1, 0];
+    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
+    var offset = (diff == this.oldElementValue.length ? 1 : 0);
+    var prevTokenPos = -1, nextTokenPos = value.length;
+    var tp;
+    for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
+      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
+      if (tp > prevTokenPos) prevTokenPos = tp;
+      tp = value.indexOf(this.options.tokens[index], diff + offset);
+      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
+    }
+    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
+  }
+});
+
+Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
+  var boundary = Math.min(newS.length, oldS.length);
+  for (var index = 0; index < boundary; ++index)
+    if (newS[index] != oldS[index])
+      return index;
+  return boundary;
+};
+
+Ajax.Autocompleter = Class.create(Autocompleter.Base, {
+  initialize: function(element, update, url, options) {
+    this.baseInitialize(element, update, options);
+    this.options.asynchronous  = true;
+    this.options.onComplete    = this.onComplete.bind(this);
+    this.options.defaultParams = this.options.parameters || null;
+    this.url                   = url;
+  },
+
+  getUpdatedChoices: function() {
+    this.startIndicator();
+
+    var entry = encodeURIComponent(this.options.paramName) + '=' +
+      encodeURIComponent(this.getToken());
+
+    this.options.parameters = this.options.callback ?
+      this.options.callback(this.element, entry) : entry;
+
+    if(this.options.defaultParams)
+      this.options.parameters += '&' + this.options.defaultParams;
+
+    new Ajax.Request(this.url, this.options);
+  },
+
+  onComplete: function(request) {
+    this.updateChoices(request.responseText);
+  }
+});
+
+// The local array autocompleter. Used when you'd prefer to
+// inject an array of autocompletion options into the page, rather
+// than sending out Ajax queries, which can be quite slow sometimes.
+//
+// The constructor takes four parameters. The first two are, as usual,
+// the id of the monitored textbox, and id of the autocompletion menu.
+// The third is the array you want to autocomplete from, and the fourth
+// is the options block.
+//
+// Extra local autocompletion options:
+// - choices - How many autocompletion choices to offer
+//
+// - partialSearch - If false, the autocompleter will match entered
+//                    text only at the beginning of strings in the
+//                    autocomplete array. Defaults to true, which will
+//                    match text at the beginning of any *word* in the
+//                    strings in the autocomplete array. If you want to
+//                    search anywhere in the string, additionally set
+//                    the option fullSearch to true (default: off).
+//
+// - fullSsearch - Search anywhere in autocomplete array strings.
+//
+// - partialChars - How many characters to enter before triggering
+//                   a partial match (unlike minChars, which defines
+//                   how many characters are required to do any match
+//                   at all). Defaults to 2.
+//
+// - ignoreCase - Whether to ignore case when autocompleting.
+//                 Defaults to true.
+//
+// It's possible to pass in a custom function as the 'selector'
+// option, if you prefer to write your own autocompletion logic.
+// In that case, the other options above will not apply unless
+// you support them.
+
+Autocompleter.Local = Class.create(Autocompleter.Base, {
+  initialize: function(element, update, array, options) {
+    this.baseInitialize(element, update, options);
+    this.options.array = array;
+  },
+
+  getUpdatedChoices: function() {
+    this.updateChoices(this.options.selector(this));
+  },
+
+  setOptions: function(options) {
+    this.options = Object.extend({
+      choices: 10,
+      partialSearch: true,
+      partialChars: 2,
+      ignoreCase: true,
+      fullSearch: false,
+      selector: function(instance) {
+        var ret       = []; // Beginning matches
+        var partial   = []; // Inside matches
+        var entry     = instance.getToken();
+        var count     = 0;
+
+        for (var i = 0; i < instance.options.array.length &&
+          ret.length < instance.options.choices ; i++) {
+
+          var elem = instance.options.array[i];
+          var foundPos = instance.options.ignoreCase ?
+            elem.toLowerCase().indexOf(entry.toLowerCase()) :
+            elem.indexOf(entry);
+
+          while (foundPos != -1) {
+            if (foundPos == 0 && elem.length != entry.length) {
+              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+                elem.substr(entry.length) + "</li>");
+              break;
+            } else if (entry.length >= instance.options.partialChars &&
+              instance.options.partialSearch && foundPos != -1) {
+              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+                  foundPos + entry.length) + "</li>");
+                break;
+              }
+            }
+
+            foundPos = instance.options.ignoreCase ?
+              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+              elem.indexOf(entry, foundPos + 1);
+
+          }
+        }
+        if (partial.length)
+          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length));
+        return "<ul>" + ret.join('') + "</ul>";
+      }
+    }, options || { });
+  }
+});
+
+// AJAX in-place editor and collection editor
+// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).
+
+// Use this if you notice weird scrolling problems on some browsers,
+// the DOM might be a bit confused when this gets called so do this
+// waits 1 ms (with setTimeout) until it does the activation
+Field.scrollFreeActivate = function(field) {
+  setTimeout(function() {
+    Field.activate(field);
+  }, 1);
+};
+
+Ajax.InPlaceEditor = Class.create({
+  initialize: function(element, url, options) {
+    this.url = url;
+    this.element = element = $(element);
+    this.prepareOptions();
+    this._controls = { };
+    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
+    Object.extend(this.options, options || { });
+    if (!this.options.formId && this.element.id) {
+      this.options.formId = this.element.id + '-inplaceeditor';
+      if ($(this.options.formId))
+        this.options.formId = '';
+    }
+    if (this.options.externalControl)
+      this.options.externalControl = $(this.options.externalControl);
+    if (!this.options.externalControl)
+      this.options.externalControlOnly = false;
+    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
+    this.element.title = this.options.clickToEditText;
+    this._boundCancelHandler = this.handleFormCancellation.bind(this);
+    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
+    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
+    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
+    this._boundWrapperHandler = this.wrapUp.bind(this);
+    this.registerListeners();
+  },
+  checkForEscapeOrReturn: function(e) {
+    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
+    if (Event.KEY_ESC == e.keyCode)
+      this.handleFormCancellation(e);
+    else if (Event.KEY_RETURN == e.keyCode)
+      this.handleFormSubmission(e);
+  },
+  createControl: function(mode, handler, extraClasses) {
+    var control = this.options[mode + 'Control'];
+    var text = this.options[mode + 'Text'];
+    if ('button' == control) {
+      var btn = document.createElement('input');
+      btn.type = 'submit';
+      btn.value = text;
+      btn.className = 'editor_' + mode + '_button';
+      if ('cancel' == mode)
+        btn.onclick = this._boundCancelHandler;
+      this._form.appendChild(btn);
+      this._controls[mode] = btn;
+    } else if ('link' == control) {
+      var link = document.createElement('a');
+      link.href = '#';
+      link.appendChild(document.createTextNode(text));
+      link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
+      link.className = 'editor_' + mode + '_link';
+      if (extraClasses)
+        link.className += ' ' + extraClasses;
+      this._form.appendChild(link);
+      this._controls[mode] = link;
+    }
+  },
+  createEditField: function() {
+    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
+    var fld;
+    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
+      fld = document.createElement('input');
+      fld.type = 'text';
+      var size = this.options.size || this.options.cols || 0;
+      if (0 < size) fld.size = size;
+    } else {
+      fld = document.createElement('textarea');
+      fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
+      fld.cols = this.options.cols || 40;
+    }
+    fld.name = this.options.paramName;
+    fld.value = text; // No HTML breaks conversion anymore
+    fld.className = 'editor_field';
+    if (this.options.submitOnBlur)
+      fld.onblur = this._boundSubmitHandler;
+    this._controls.editor = fld;
+    if (this.options.loadTextURL)
+      this.loadExternalText();
+    this._form.appendChild(this._controls.editor);
+  },
+  createForm: function() {
+    var ipe = this;
+    function addText(mode, condition) {
+      var text = ipe.options['text' + mode + 'Controls'];
+      if (!text || condition === false) return;
+      ipe._form.appendChild(document.createTextNode(text));
+    };
+    this._form = $(document.createElement('form'));
+    this._form.id = this.options.formId;
+    this._form.addClassName(this.options.formClassName);
+    this._form.onsubmit = this._boundSubmitHandler;
+    this.createEditField();
+    if ('textarea' == this._controls.editor.tagName.toLowerCase())
+      this._form.appendChild(document.createElement('br'));
+    if (this.options.onFormCustomization)
+      this.options.onFormCustomization(this, this._form);
+    addText('Before', this.options.okControl || this.options.cancelControl);
+    this.createControl('ok', this._boundSubmitHandler);
+    addText('Between', this.options.okControl && this.options.cancelControl);
+    this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
+    addText('After', this.options.okControl || this.options.cancelControl);
+  },
+  destroy: function() {
+    if (this._oldInnerHTML)
+      this.element.innerHTML = this._oldInnerHTML;
+    this.leaveEditMode();
+    this.unregisterListeners();
+  },
+  enterEditMode: function(e) {
+    if (this._saving || this._editing) return;
+    this._editing = true;
+    this.triggerCallback('onEnterEditMode');
+    if (this.options.externalControl)
+      this.options.externalControl.hide();
+    this.element.hide();
+    this.createForm();
+    this.element.parentNode.insertBefore(this._form, this.element);
+    if (!this.options.loadTextURL)
+      this.postProcessEditField();
+    if (e) Event.stop(e);
+  },
+  enterHover: function(e) {
+    if (this.options.hoverClassName)
+      this.element.addClassName(this.options.hoverClassName);
+    if (this._saving) return;
+    this.triggerCallback('onEnterHover');
+  },
+  getText: function() {
+    return this.element.innerHTML.unescapeHTML();
+  },
+  handleAJAXFailure: function(transport) {
+    this.triggerCallback('onFailure', transport);
+    if (this._oldInnerHTML) {
+      this.element.innerHTML = this._oldInnerHTML;
+      this._oldInnerHTML = null;
+    }
+  },
+  handleFormCancellation: function(e) {
+    this.wrapUp();
+    if (e) Event.stop(e);
+  },
+  handleFormSubmission: function(e) {
+    var form = this._form;
+    var value = $F(this._controls.editor);
+    this.prepareSubmission();
+    var params = this.options.callback(form, value) || '';
+    if (Object.isString(params))
+      params = params.toQueryParams();
+    params.editorId = this.element.id;
+    if (this.options.htmlResponse) {
+      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
+      Object.extend(options, {
+        parameters: params,
+        onComplete: this._boundWrapperHandler,
+        onFailure: this._boundFailureHandler
+      });
+      new Ajax.Updater({ success: this.element }, this.url, options);
+    } else {
+      var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+      Object.extend(options, {
+        parameters: params,
+        onComplete: this._boundWrapperHandler,
+        onFailure: this._boundFailureHandler
+      });
+      new Ajax.Request(this.url, options);
+    }
+    if (e) Event.stop(e);
+  },
+  leaveEditMode: function() {
+    this.element.removeClassName(this.options.savingClassName);
+    this.removeForm();
+    this.leaveHover();
+    this.element.style.backgroundColor = this._originalBackground;
+    this.element.show();
+    if (this.options.externalControl)
+      this.options.externalControl.show();
+    this._saving = false;
+    this._editing = false;
+    this._oldInnerHTML = null;
+    this.triggerCallback('onLeaveEditMode');
+  },
+  leaveHover: function(e) {
+    if (this.options.hoverClassName)
+      this.element.removeClassName(this.options.hoverClassName);
+    if (this._saving) return;
+    this.triggerCallback('onLeaveHover');
+  },
+  loadExternalText: function() {
+    this._form.addClassName(this.options.loadingClassName);
+    this._controls.editor.disabled = true;
+    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+    Object.extend(options, {
+      parameters: 'editorId=' + encodeURIComponent(this.element.id),
+      onComplete: Prototype.emptyFunction,
+      onSuccess: function(transport) {
+        this._form.removeClassName(this.options.loadingClassName);
+        var text = transport.responseText;
+        if (this.options.stripLoadedTextTags)
+          text = text.stripTags();
+        this._controls.editor.value = text;
+        this._controls.editor.disabled = false;
+        this.postProcessEditField();
+      }.bind(this),
+      onFailure: this._boundFailureHandler
+    });
+    new Ajax.Request(this.options.loadTextURL, options);
+  },
+  postProcessEditField: function() {
+    var fpc = this.options.fieldPostCreation;
+    if (fpc)
+      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
+  },
+  prepareOptions: function() {
+    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
+    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
+    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
+      Object.extend(this.options, defs);
+    }.bind(this));
+  },
+  prepareSubmission: function() {
+    this._saving = true;
+    this.removeForm();
+    this.leaveHover();
+    this.showSaving();
+  },
+  registerListeners: function() {
+    this._listeners = { };
+    var listener;
+    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
+      listener = this[pair.value].bind(this);
+      this._listeners[pair.key] = listener;
+      if (!this.options.externalControlOnly)
+        this.element.observe(pair.key, listener);
+      if (this.options.externalControl)
+        this.options.externalControl.observe(pair.key, listener);
+    }.bind(this));
+  },
+  removeForm: function() {
+    if (!this._form) return;
+    this._form.remove();
+    this._form = null;
+    this._controls = { };
+  },
+  showSaving: function() {
+    this._oldInnerHTML = this.element.innerHTML;
+    this.element.innerHTML = this.options.savingText;
+    this.element.addClassName(this.options.savingClassName);
+    this.element.style.backgroundColor = this._originalBackground;
+    this.element.show();
+  },
+  triggerCallback: function(cbName, arg) {
+    if ('function' == typeof this.options[cbName]) {
+      this.options[cbName](this, arg);
+    }
+  },
+  unregisterListeners: function() {
+    $H(this._listeners).each(function(pair) {
+      if (!this.options.externalControlOnly)
+        this.element.stopObserving(pair.key, pair.value);
+      if (this.options.externalControl)
+        this.options.externalControl.stopObserving(pair.key, pair.value);
+    }.bind(this));
+  },
+  wrapUp: function(transport) {
+    this.leaveEditMode();
+    // Can't use triggerCallback due to backward compatibility: requires
+    // binding + direct element
+    this._boundComplete(transport, this.element);
+  }
+});
+
+Object.extend(Ajax.InPlaceEditor.prototype, {
+  dispose: Ajax.InPlaceEditor.prototype.destroy
+});
+
+Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
+  initialize: function($super, element, url, options) {
+    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
+    $super(element, url, options);
+  },
+
+  createEditField: function() {
+    var list = document.createElement('select');
+    list.name = this.options.paramName;
+    list.size = 1;
+    this._controls.editor = list;
+    this._collection = this.options.collection || [];
+    if (this.options.loadCollectionURL)
+      this.loadCollection();
+    else
+      this.checkForExternalText();
+    this._form.appendChild(this._controls.editor);
+  },
+
+  loadCollection: function() {
+    this._form.addClassName(this.options.loadingClassName);
+    this.showLoadingText(this.options.loadingCollectionText);
+    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+    Object.extend(options, {
+      parameters: 'editorId=' + encodeURIComponent(this.element.id),
+      onComplete: Prototype.emptyFunction,
+      onSuccess: function(transport) {
+        var js = transport.responseText.strip();
+        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
+          throw('Server returned an invalid collection representation.');
+        this._collection = eval(js);
+        this.checkForExternalText();
+      }.bind(this),
+      onFailure: this.onFailure
+    });
+    new Ajax.Request(this.options.loadCollectionURL, options);
+  },
+
+  showLoadingText: function(text) {
+    this._controls.editor.disabled = true;
+    var tempOption = this._controls.editor.firstChild;
+    if (!tempOption) {
+      tempOption = document.createElement('option');
+      tempOption.value = '';
+      this._controls.editor.appendChild(tempOption);
+      tempOption.selected = true;
+    }
+    tempOption.update((text || '').stripScripts().stripTags());
+  },
+
+  checkForExternalText: function() {
+    this._text = this.getText();
+    if (this.options.loadTextURL)
+      this.loadExternalText();
+    else
+      this.buildOptionList();
+  },
+
+  loadExternalText: function() {
+    this.showLoadingText(this.options.loadingText);
+    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
+    Object.extend(options, {
+      parameters: 'editorId=' + encodeURIComponent(this.element.id),
+      onComplete: Prototype.emptyFunction,
+      onSuccess: function(transport) {
+        this._text = transport.responseText.strip();
+        this.buildOptionList();
+      }.bind(this),
+      onFailure: this.onFailure
+    });
+    new Ajax.Request(this.options.loadTextURL, options);
+  },
+
+  buildOptionList: function() {
+    this._form.removeClassName(this.options.loadingClassName);
+    this._collection = this._collection.map(function(entry) {
+      return 2 === entry.length ? entry : [entry, entry].flatten();
+    });
+    var marker = ('value' in this.options) ? this.options.value : this._text;
+    var textFound = this._collection.any(function(entry) {
+      return entry[0] == marker;
+    }.bind(this));
+    this._controls.editor.update('');
+    var option;
+    this._collection.each(function(entry, index) {
+      option = document.createElement('option');
+      option.value = entry[0];
+      option.selected = textFound ? entry[0] == marker : 0 == index;
+      option.appendChild(document.createTextNode(entry[1]));
+      this._controls.editor.appendChild(option);
+    }.bind(this));
+    this._controls.editor.disabled = false;
+    Field.scrollFreeActivate(this._controls.editor);
+  }
+});
+
+//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
+//**** This only  exists for a while,  in order to  let ****
+//**** users adapt to  the new API.  Read up on the new ****
+//**** API and convert your code to it ASAP!            ****
+
+Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
+  if (!options) return;
+  function fallback(name, expr) {
+    if (name in options || expr === undefined) return;
+    options[name] = expr;
+  };
+  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
+    options.cancelLink == options.cancelButton == false ? false : undefined)));
+  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
+    options.okLink == options.okButton == false ? false : undefined)));
+  fallback('highlightColor', options.highlightcolor);
+  fallback('highlightEndColor', options.highlightendcolor);
+};
+
+Object.extend(Ajax.InPlaceEditor, {
+  DefaultOptions: {
+    ajaxOptions: { },
+    autoRows: 3,                                // Use when multi-line w/ rows == 1
+    cancelControl: 'link',                      // 'link'|'button'|false
+    cancelText: 'cancel',
+    clickToEditText: 'Click to edit',
+    externalControl: null,                      // id|elt
+    externalControlOnly: false,
+    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
+    formClassName: 'inplaceeditor-form',
+    formId: null,                               // id|elt
+    highlightColor: '#ffff99',
+    highlightEndColor: '#ffffff',
+    hoverClassName: '',
+    htmlResponse: true,
+    loadingClassName: 'inplaceeditor-loading',
+    loadingText: 'Loading...',
+    okControl: 'button',                        // 'link'|'button'|false
+    okText: 'ok',
+    paramName: 'value',
+    rows: 1,                                    // If 1 and multi-line, uses autoRows
+    savingClassName: 'inplaceeditor-saving',
+    savingText: 'Saving...',
+    size: 0,
+    stripLoadedTextTags: false,
+    submitOnBlur: false,
+    textAfterControls: '',
+    textBeforeControls: '',
+    textBetweenControls: ''
+  },
+  DefaultCallbacks: {
+    callback: function(form) {
+      return Form.serialize(form);
+    },
+    onComplete: function(transport, element) {
+      // For backward compatibility, this one is bound to the IPE, and passes
+      // the element directly.  It was too often customized, so we don't break it.
+      new Effect.Highlight(element, {
+        startcolor: this.options.highlightColor, keepBackgroundImage: true });
+    },
+    onEnterEditMode: null,
+    onEnterHover: function(ipe) {
+      ipe.element.style.backgroundColor = ipe.options.highlightColor;
+      if (ipe._effect)
+        ipe._effect.cancel();
+    },
+    onFailure: function(transport, ipe) {
+      alert('Error communication with the server: ' + transport.responseText.stripTags());
+    },
+    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
+    onLeaveEditMode: null,
+    onLeaveHover: function(ipe) {
+      ipe._effect = new Effect.Highlight(ipe.element, {
+        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
+        restorecolor: ipe._originalBackground, keepBackgroundImage: true
+      });
+    }
+  },
+  Listeners: {
+    click: 'enterEditMode',
+    keydown: 'checkForEscapeOrReturn',
+    mouseover: 'enterHover',
+    mouseout: 'leaveHover'
+  }
+});
+
+Ajax.InPlaceCollectionEditor.DefaultOptions = {
+  loadingCollectionText: 'Loading options...'
+};
+
+// Delayed observer, like Form.Element.Observer,
+// but waits for delay after last key input
+// Ideal for live-search fields
+
+Form.Element.DelayedObserver = Class.create({
+  initialize: function(element, delay, callback) {
+    this.delay     = delay || 0.5;
+    this.element   = $(element);
+    this.callback  = callback;
+    this.timer     = null;
+    this.lastValue = $F(this.element);
+    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+  },
+  delayedListener: function(event) {
+    if(this.lastValue == $F(this.element)) return;
+    if(this.timer) clearTimeout(this.timer);
+    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+    this.lastValue = $F(this.element);
+  },
+  onTimerEvent: function() {
+    this.timer = null;
+    this.callback(this.element, $F(this.element));
+  }
+});
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js
new file mode 100644
index 0000000..07c98e2
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/dragdrop.js
@@ -0,0 +1,975 @@
+// script.aculo.us dragdrop.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//           (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if(Object.isUndefined(Effect))
+  throw("dragdrop.js requires including script.aculo.us' effects.js library");
+
+var Droppables = {
+  drops: [],
+
+  remove: function(element) {
+    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
+  },
+
+  add: function(element) {
+    element = $(element);
+    var options = Object.extend({
+      greedy:     true,
+      hoverclass: null,
+      tree:       false
+    }, arguments[1] || { });
+
+    // cache containers
+    if(options.containment) {
+      options._containers = [];
+      var containment = options.containment;
+      if(Object.isArray(containment)) {
+        containment.each( function(c) { options._containers.push($(c)) });
+      } else {
+        options._containers.push($(containment));
+      }
+    }
+
+    if(options.accept) options.accept = [options.accept].flatten();
+
+    Element.makePositioned(element); // fix IE
+    options.element = element;
+
+    this.drops.push(options);
+  },
+
+  findDeepestChild: function(drops) {
+    deepest = drops[0];
+
+    for (i = 1; i < drops.length; ++i)
+      if (Element.isParent(drops[i].element, deepest.element))
+        deepest = drops[i];
+
+    return deepest;
+  },
+
+  isContained: function(element, drop) {
+    var containmentNode;
+    if(drop.tree) {
+      containmentNode = element.treeNode;
+    } else {
+      containmentNode = element.parentNode;
+    }
+    return drop._containers.detect(function(c) { return containmentNode == c });
+  },
+
+  isAffected: function(point, element, drop) {
+    return (
+      (drop.element!=element) &&
+      ((!drop._containers) ||
+        this.isContained(element, drop)) &&
+      ((!drop.accept) ||
+        (Element.classNames(element).detect(
+          function(v) { return drop.accept.include(v) } ) )) &&
+      Position.within(drop.element, point[0], point[1]) );
+  },
+
+  deactivate: function(drop) {
+    if(drop.hoverclass)
+      Element.removeClassName(drop.element, drop.hoverclass);
+    this.last_active = null;
+  },
+
+  activate: function(drop) {
+    if(drop.hoverclass)
+      Element.addClassName(drop.element, drop.hoverclass);
+    this.last_active = drop;
+  },
+
+  show: function(point, element) {
+    if(!this.drops.length) return;
+    var drop, affected = [];
+
+    this.drops.each( function(drop) {
+      if(Droppables.isAffected(point, element, drop))
+        affected.push(drop);
+    });
+
+    if(affected.length>0)
+      drop = Droppables.findDeepestChild(affected);
+
+    if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
+    if (drop) {
+      Position.within(drop.element, point[0], point[1]);
+      if(drop.onHover)
+        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+
+      if (drop != this.last_active) Droppables.activate(drop);
+    }
+  },
+
+  fire: function(event, element) {
+    if(!this.last_active) return;
+    Position.prepare();
+
+    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+      if (this.last_active.onDrop) {
+        this.last_active.onDrop(element, this.last_active.element, event);
+        return true;
+      }
+  },
+
+  reset: function() {
+    if(this.last_active)
+      this.deactivate(this.last_active);
+  }
+};
+
+var Draggables = {
+  drags: [],
+  observers: [],
+
+  register: function(draggable) {
+    if(this.drags.length == 0) {
+      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
+      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
+
+      Event.observe(document, "mouseup", this.eventMouseUp);
+      Event.observe(document, "mousemove", this.eventMouseMove);
+      Event.observe(document, "keypress", this.eventKeypress);
+    }
+    this.drags.push(draggable);
+  },
+
+  unregister: function(draggable) {
+    this.drags = this.drags.reject(function(d) { return d==draggable });
+    if(this.drags.length == 0) {
+      Event.stopObserving(document, "mouseup", this.eventMouseUp);
+      Event.stopObserving(document, "mousemove", this.eventMouseMove);
+      Event.stopObserving(document, "keypress", this.eventKeypress);
+    }
+  },
+
+  activate: function(draggable) {
+    if(draggable.options.delay) {
+      this._timeout = setTimeout(function() {
+        Draggables._timeout = null;
+        window.focus();
+        Draggables.activeDraggable = draggable;
+      }.bind(this), draggable.options.delay);
+    } else {
+      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
+      this.activeDraggable = draggable;
+    }
+  },
+
+  deactivate: function() {
+    this.activeDraggable = null;
+  },
+
+  updateDrag: function(event) {
+    if(!this.activeDraggable) return;
+    var pointer = [Event.pointerX(event), Event.pointerY(event)];
+    // Mozilla-based browsers fire successive mousemove events with
+    // the same coordinates, prevent needless redrawing (moz bug?)
+    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+    this._lastPointer = pointer;
+
+    this.activeDraggable.updateDrag(event, pointer);
+  },
+
+  endDrag: function(event) {
+    if(this._timeout) {
+      clearTimeout(this._timeout);
+      this._timeout = null;
+    }
+    if(!this.activeDraggable) return;
+    this._lastPointer = null;
+    this.activeDraggable.endDrag(event);
+    this.activeDraggable = null;
+  },
+
+  keyPress: function(event) {
+    if(this.activeDraggable)
+      this.activeDraggable.keyPress(event);
+  },
+
+  addObserver: function(observer) {
+    this.observers.push(observer);
+    this._cacheObserverCallbacks();
+  },
+
+  removeObserver: function(element) {  // element instead of observer fixes mem leaks
+    this.observers = this.observers.reject( function(o) { return o.element==element });
+    this._cacheObserverCallbacks();
+  },
+
+  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
+    if(this[eventName+'Count'] > 0)
+      this.observers.each( function(o) {
+        if(o[eventName]) o[eventName](eventName, draggable, event);
+      });
+    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
+  },
+
+  _cacheObserverCallbacks: function() {
+    ['onStart','onEnd','onDrag'].each( function(eventName) {
+      Draggables[eventName+'Count'] = Draggables.observers.select(
+        function(o) { return o[eventName]; }
+      ).length;
+    });
+  }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Draggable = Class.create({
+  initialize: function(element) {
+    var defaults = {
+      handle: false,
+      reverteffect: function(element, top_offset, left_offset) {
+        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
+          queue: {scope:'_draggable', position:'end'}
+        });
+      },
+      endeffect: function(element) {
+        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
+        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
+          queue: {scope:'_draggable', position:'end'},
+          afterFinish: function(){
+            Draggable._dragging[element] = false
+          }
+        });
+      },
+      zindex: 1000,
+      revert: false,
+      quiet: false,
+      scroll: false,
+      scrollSensitivity: 20,
+      scrollSpeed: 15,
+      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
+      delay: 0
+    };
+
+    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
+      Object.extend(defaults, {
+        starteffect: function(element) {
+          element._opacity = Element.getOpacity(element);
+          Draggable._dragging[element] = true;
+          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+        }
+      });
+
+    var options = Object.extend(defaults, arguments[1] || { });
+
+    this.element = $(element);
+
+    if(options.handle && Object.isString(options.handle))
+      this.handle = this.element.down('.'+options.handle, 0);
+
+    if(!this.handle) this.handle = $(options.handle);
+    if(!this.handle) this.handle = this.element;
+
+    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
+      options.scroll = $(options.scroll);
+      this._isScrollChild = Element.childOf(this.element, options.scroll);
+    }
+
+    Element.makePositioned(this.element); // fix IE
+
+    this.options  = options;
+    this.dragging = false;
+
+    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+    Event.observe(this.handle, "mousedown", this.eventMouseDown);
+
+    Draggables.register(this);
+  },
+
+  destroy: function() {
+    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
+    Draggables.unregister(this);
+  },
+
+  currentDelta: function() {
+    return([
+      parseInt(Element.getStyle(this.element,'left') || '0'),
+      parseInt(Element.getStyle(this.element,'top') || '0')]);
+  },
+
+  initDrag: function(event) {
+    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
+      Draggable._dragging[this.element]) return;
+    if(Event.isLeftClick(event)) {
+      // abort on form elements, fixes a Firefox issue
+      var src = Event.element(event);
+      if((tag_name = src.tagName.toUpperCase()) && (
+        tag_name=='INPUT' ||
+        tag_name=='SELECT' ||
+        tag_name=='OPTION' ||
+        tag_name=='BUTTON' ||
+        tag_name=='TEXTAREA')) return;
+
+      var pointer = [Event.pointerX(event), Event.pointerY(event)];
+      var pos     = Position.cumulativeOffset(this.element);
+      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
+
+      Draggables.activate(this);
+      Event.stop(event);
+    }
+  },
+
+  startDrag: function(event) {
+    this.dragging = true;
+    if(!this.delta)
+      this.delta = this.currentDelta();
+
+    if(this.options.zindex) {
+      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+      this.element.style.zIndex = this.options.zindex;
+    }
+
+    if(this.options.ghosting) {
+      this._clone = this.element.cloneNode(true);
+      this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
+      if (!this._originallyAbsolute)
+        Position.absolutize(this.element);
+      this.element.parentNode.insertBefore(this._clone, this.element);
+    }
+
+    if(this.options.scroll) {
+      if (this.options.scroll == window) {
+        var where = this._getWindowScroll(this.options.scroll);
+        this.originalScrollLeft = where.left;
+        this.originalScrollTop = where.top;
+      } else {
+        this.originalScrollLeft = this.options.scroll.scrollLeft;
+        this.originalScrollTop = this.options.scroll.scrollTop;
+      }
+    }
+
+    Draggables.notify('onStart', this, event);
+
+    if(this.options.starteffect) this.options.starteffect(this.element);
+  },
+
+  updateDrag: function(event, pointer) {
+    if(!this.dragging) this.startDrag(event);
+
+    if(!this.options.quiet){
+      Position.prepare();
+      Droppables.show(pointer, this.element);
+    }
+
+    Draggables.notify('onDrag', this, event);
+
+    this.draw(pointer);
+    if(this.options.change) this.options.change(this);
+
+    if(this.options.scroll) {
+      this.stopScrolling();
+
+      var p;
+      if (this.options.scroll == window) {
+        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+      } else {
+        p = Position.page(this.options.scroll);
+        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
+        p[1] += this.options.scroll.scrollTop + Position.deltaY;
+        p.push(p[0]+this.options.scroll.offsetWidth);
+        p.push(p[1]+this.options.scroll.offsetHeight);
+      }
+      var speed = [0,0];
+      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+      this.startScrolling(speed);
+    }
+
+    // fix AppleWebKit rendering
+    if(Prototype.Browser.WebKit) window.scrollBy(0,0);
+
+    Event.stop(event);
+  },
+
+  finishDrag: function(event, success) {
+    this.dragging = false;
+
+    if(this.options.quiet){
+      Position.prepare();
+      var pointer = [Event.pointerX(event), Event.pointerY(event)];
+      Droppables.show(pointer, this.element);
+    }
+
+    if(this.options.ghosting) {
+      if (!this._originallyAbsolute)
+        Position.relativize(this.element);
+      delete this._originallyAbsolute;
+      Element.remove(this._clone);
+      this._clone = null;
+    }
+
+    var dropped = false;
+    if(success) {
+      dropped = Droppables.fire(event, this.element);
+      if (!dropped) dropped = false;
+    }
+    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
+    Draggables.notify('onEnd', this, event);
+
+    var revert = this.options.revert;
+    if(revert && Object.isFunction(revert)) revert = revert(this.element);
+
+    var d = this.currentDelta();
+    if(revert && this.options.reverteffect) {
+      if (dropped == 0 || revert != 'failure')
+        this.options.reverteffect(this.element,
+          d[1]-this.delta[1], d[0]-this.delta[0]);
+    } else {
+      this.delta = d;
+    }
+
+    if(this.options.zindex)
+      this.element.style.zIndex = this.originalZ;
+
+    if(this.options.endeffect)
+      this.options.endeffect(this.element);
+
+    Draggables.deactivate(this);
+    Droppables.reset();
+  },
+
+  keyPress: function(event) {
+    if(event.keyCode!=Event.KEY_ESC) return;
+    this.finishDrag(event, false);
+    Event.stop(event);
+  },
+
+  endDrag: function(event) {
+    if(!this.dragging) return;
+    this.stopScrolling();
+    this.finishDrag(event, true);
+    Event.stop(event);
+  },
+
+  draw: function(point) {
+    var pos = Position.cumulativeOffset(this.element);
+    if(this.options.ghosting) {
+      var r   = Position.realOffset(this.element);
+      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
+    }
+
+    var d = this.currentDelta();
+    pos[0] -= d[0]; pos[1] -= d[1];
+
+    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
+      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+    }
+
+    var p = [0,1].map(function(i){
+      return (point[i]-pos[i]-this.offset[i])
+    }.bind(this));
+
+    if(this.options.snap) {
+      if(Object.isFunction(this.options.snap)) {
+        p = this.options.snap(p[0],p[1],this);
+      } else {
+      if(Object.isArray(this.options.snap)) {
+        p = p.map( function(v, i) {
+          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
+      } else {
+        p = p.map( function(v) {
+          return (v/this.options.snap).round()*this.options.snap }.bind(this));
+      }
+    }}
+
+    var style = this.element.style;
+    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+      style.left = p[0] + "px";
+    if((!this.options.constraint) || (this.options.constraint=='vertical'))
+      style.top  = p[1] + "px";
+
+    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
+  },
+
+  stopScrolling: function() {
+    if(this.scrollInterval) {
+      clearInterval(this.scrollInterval);
+      this.scrollInterval = null;
+      Draggables._lastScrollPointer = null;
+    }
+  },
+
+  startScrolling: function(speed) {
+    if(!(speed[0] || speed[1])) return;
+    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+    this.lastScrolled = new Date();
+    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+  },
+
+  scroll: function() {
+    var current = new Date();
+    var delta = current - this.lastScrolled;
+    this.lastScrolled = current;
+    if(this.options.scroll == window) {
+      with (this._getWindowScroll(this.options.scroll)) {
+        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+          var d = delta / 1000;
+          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+        }
+      }
+    } else {
+      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
+    }
+
+    Position.prepare();
+    Droppables.show(Draggables._lastPointer, this.element);
+    Draggables.notify('onDrag', this);
+    if (this._isScrollChild) {
+      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+      if (Draggables._lastScrollPointer[0] < 0)
+        Draggables._lastScrollPointer[0] = 0;
+      if (Draggables._lastScrollPointer[1] < 0)
+        Draggables._lastScrollPointer[1] = 0;
+      this.draw(Draggables._lastScrollPointer);
+    }
+
+    if(this.options.change) this.options.change(this);
+  },
+
+  _getWindowScroll: function(w) {
+    var T, L, W, H;
+    with (w.document) {
+      if (w.document.documentElement && documentElement.scrollTop) {
+        T = documentElement.scrollTop;
+        L = documentElement.scrollLeft;
+      } else if (w.document.body) {
+        T = body.scrollTop;
+        L = body.scrollLeft;
+      }
+      if (w.innerWidth) {
+        W = w.innerWidth;
+        H = w.innerHeight;
+      } else if (w.document.documentElement && documentElement.clientWidth) {
+        W = documentElement.clientWidth;
+        H = documentElement.clientHeight;
+      } else {
+        W = body.offsetWidth;
+        H = body.offsetHeight;
+      }
+    }
+    return { top: T, left: L, width: W, height: H };
+  }
+});
+
+Draggable._dragging = { };
+
+/*--------------------------------------------------------------------------*/
+
+var SortableObserver = Class.create({
+  initialize: function(element, observer) {
+    this.element   = $(element);
+    this.observer  = observer;
+    this.lastValue = Sortable.serialize(this.element);
+  },
+
+  onStart: function() {
+    this.lastValue = Sortable.serialize(this.element);
+  },
+
+  onEnd: function() {
+    Sortable.unmark();
+    if(this.lastValue != Sortable.serialize(this.element))
+      this.observer(this.element)
+  }
+});
+
+var Sortable = {
+  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
+
+  sortables: { },
+
+  _findRootElement: function(element) {
+    while (element.tagName.toUpperCase() != "BODY") {
+      if(element.id && Sortable.sortables[element.id]) return element;
+      element = element.parentNode;
+    }
+  },
+
+  options: function(element) {
+    element = Sortable._findRootElement($(element));
+    if(!element) return;
+    return Sortable.sortables[element.id];
+  },
+
+  destroy: function(element){
+    element = $(element);
+    var s = Sortable.sortables[element.id];
+
+    if(s) {
+      Draggables.removeObserver(s.element);
+      s.droppables.each(function(d){ Droppables.remove(d) });
+      s.draggables.invoke('destroy');
+
+      delete Sortable.sortables[s.element.id];
+    }
+  },
+
+  create: function(element) {
+    element = $(element);
+    var options = Object.extend({
+      element:     element,
+      tag:         'li',       // assumes li children, override with tag: 'tagname'
+      dropOnEmpty: false,
+      tree:        false,
+      treeTag:     'ul',
+      overlap:     'vertical', // one of 'vertical', 'horizontal'
+      constraint:  'vertical', // one of 'vertical', 'horizontal', false
+      containment: element,    // also takes array of elements (or id's); or false
+      handle:      false,      // or a CSS class
+      only:        false,
+      delay:       0,
+      hoverclass:  null,
+      ghosting:    false,
+      quiet:       false,
+      scroll:      false,
+      scrollSensitivity: 20,
+      scrollSpeed: 15,
+      format:      this.SERIALIZE_RULE,
+
+      // these take arrays of elements or ids and can be
+      // used for better initialization performance
+      elements:    false,
+      handles:     false,
+
+      onChange:    Prototype.emptyFunction,
+      onUpdate:    Prototype.emptyFunction
+    }, arguments[1] || { });
+
+    // clear any old sortable with same element
+    this.destroy(element);
+
+    // build options for the draggables
+    var options_for_draggable = {
+      revert:      true,
+      quiet:       options.quiet,
+      scroll:      options.scroll,
+      scrollSpeed: options.scrollSpeed,
+      scrollSensitivity: options.scrollSensitivity,
+      delay:       options.delay,
+      ghosting:    options.ghosting,
+      constraint:  options.constraint,
+      handle:      options.handle };
+
+    if(options.starteffect)
+      options_for_draggable.starteffect = options.starteffect;
+
+    if(options.reverteffect)
+      options_for_draggable.reverteffect = options.reverteffect;
+    else
+      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+        element.style.top  = 0;
+        element.style.left = 0;
+      };
+
+    if(options.endeffect)
+      options_for_draggable.endeffect = options.endeffect;
+
+    if(options.zindex)
+      options_for_draggable.zindex = options.zindex;
+
+    // build options for the droppables
+    var options_for_droppable = {
+      overlap:     options.overlap,
+      containment: options.containment,
+      tree:        options.tree,
+      hoverclass:  options.hoverclass,
+      onHover:     Sortable.onHover
+    };
+
+    var options_for_tree = {
+      onHover:      Sortable.onEmptyHover,
+      overlap:      options.overlap,
+      containment:  options.containment,
+      hoverclass:   options.hoverclass
+    };
+
+    // fix for gecko engine
+    Element.cleanWhitespace(element);
+
+    options.draggables = [];
+    options.droppables = [];
+
+    // drop on empty handling
+    if(options.dropOnEmpty || options.tree) {
+      Droppables.add(element, options_for_tree);
+      options.droppables.push(element);
+    }
+
+    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
+      var handle = options.handles ? $(options.handles[i]) :
+        (options.handle ? $(e).select('.' + options.handle)[0] : e);
+      options.draggables.push(
+        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+      Droppables.add(e, options_for_droppable);
+      if(options.tree) e.treeNode = element;
+      options.droppables.push(e);
+    });
+
+    if(options.tree) {
+      (Sortable.findTreeElements(element, options) || []).each( function(e) {
+        Droppables.add(e, options_for_tree);
+        e.treeNode = element;
+        options.droppables.push(e);
+      });
+    }
+
+    // keep reference
+    this.sortables[element.id] = options;
+
+    // for onupdate
+    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+
+  },
+
+  // return all suitable-for-sortable elements in a guaranteed order
+  findElements: function(element, options) {
+    return Element.findChildren(
+      element, options.only, options.tree ? true : false, options.tag);
+  },
+
+  findTreeElements: function(element, options) {
+    return Element.findChildren(
+      element, options.only, options.tree ? true : false, options.treeTag);
+  },
+
+  onHover: function(element, dropon, overlap) {
+    if(Element.isParent(dropon, element)) return;
+
+    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+      return;
+    } else if(overlap>0.5) {
+      Sortable.mark(dropon, 'before');
+      if(dropon.previousSibling != element) {
+        var oldParentNode = element.parentNode;
+        element.style.visibility = "hidden"; // fix gecko rendering
+        dropon.parentNode.insertBefore(element, dropon);
+        if(dropon.parentNode!=oldParentNode)
+          Sortable.options(oldParentNode).onChange(element);
+        Sortable.options(dropon.parentNode).onChange(element);
+      }
+    } else {
+      Sortable.mark(dropon, 'after');
+      var nextElement = dropon.nextSibling || null;
+      if(nextElement != element) {
+        var oldParentNode = element.parentNode;
+        element.style.visibility = "hidden"; // fix gecko rendering
+        dropon.parentNode.insertBefore(element, nextElement);
+        if(dropon.parentNode!=oldParentNode)
+          Sortable.options(oldParentNode).onChange(element);
+        Sortable.options(dropon.parentNode).onChange(element);
+      }
+    }
+  },
+
+  onEmptyHover: function(element, dropon, overlap) {
+    var oldParentNode = element.parentNode;
+    var droponOptions = Sortable.options(dropon);
+
+    if(!Element.isParent(dropon, element)) {
+      var index;
+
+      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
+      var child = null;
+
+      if(children) {
+        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+
+        for (index = 0; index < children.length; index += 1) {
+          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+            offset -= Element.offsetSize (children[index], droponOptions.overlap);
+          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+            child = index + 1 < children.length ? children[index + 1] : null;
+            break;
+          } else {
+            child = children[index];
+            break;
+          }
+        }
+      }
+
+      dropon.insertBefore(element, child);
+
+      Sortable.options(oldParentNode).onChange(element);
+      droponOptions.onChange(element);
+    }
+  },
+
+  unmark: function() {
+    if(Sortable._marker) Sortable._marker.hide();
+  },
+
+  mark: function(dropon, position) {
+    // mark on ghosting only
+    var sortable = Sortable.options(dropon.parentNode);
+    if(sortable && !sortable.ghosting) return;
+
+    if(!Sortable._marker) {
+      Sortable._marker =
+        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
+          hide().addClassName('dropmarker').setStyle({position:'absolute'});
+      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
+    }
+    var offsets = Position.cumulativeOffset(dropon);
+    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
+
+    if(position=='after')
+      if(sortable.overlap == 'horizontal')
+        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
+      else
+        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
+
+    Sortable._marker.show();
+  },
+
+  _tree: function(element, options, parent) {
+    var children = Sortable.findElements(element, options) || [];
+
+    for (var i = 0; i < children.length; ++i) {
+      var match = children[i].id.match(options.format);
+
+      if (!match) continue;
+
+      var child = {
+        id: encodeURIComponent(match ? match[1] : null),
+        element: element,
+        parent: parent,
+        children: [],
+        position: parent.children.length,
+        container: $(children[i]).down(options.treeTag)
+      };
+
+      /* Get the element containing the children and recurse over it */
+      if (child.container)
+        this._tree(child.container, options, child);
+
+      parent.children.push (child);
+    }
+
+    return parent;
+  },
+
+  tree: function(element) {
+    element = $(element);
+    var sortableOptions = this.options(element);
+    var options = Object.extend({
+      tag: sortableOptions.tag,
+      treeTag: sortableOptions.treeTag,
+      only: sortableOptions.only,
+      name: element.id,
+      format: sortableOptions.format
+    }, arguments[1] || { });
+
+    var root = {
+      id: null,
+      parent: null,
+      children: [],
+      container: element,
+      position: 0
+    };
+
+    return Sortable._tree(element, options, root);
+  },
+
+  /* Construct a [i] index for a particular node */
+  _constructIndex: function(node) {
+    var index = '';
+    do {
+      if (node.id) index = '[' + node.position + ']' + index;
+    } while ((node = node.parent) != null);
+    return index;
+  },
+
+  sequence: function(element) {
+    element = $(element);
+    var options = Object.extend(this.options(element), arguments[1] || { });
+
+    return $(this.findElements(element, options) || []).map( function(item) {
+      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
+    });
+  },
+
+  setSequence: function(element, new_sequence) {
+    element = $(element);
+    var options = Object.extend(this.options(element), arguments[2] || { });
+
+    var nodeMap = { };
+    this.findElements(element, options).each( function(n) {
+        if (n.id.match(options.format))
+            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+        n.parentNode.removeChild(n);
+    });
+
+    new_sequence.each(function(ident) {
+      var n = nodeMap[ident];
+      if (n) {
+        n[1].appendChild(n[0]);
+        delete nodeMap[ident];
+      }
+    });
+  },
+
+  serialize: function(element) {
+    element = $(element);
+    var options = Object.extend(Sortable.options(element), arguments[1] || { });
+    var name = encodeURIComponent(
+      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+
+    if (options.tree) {
+      return Sortable.tree(element, arguments[1]).children.map( function (item) {
+        return [name + Sortable._constructIndex(item) + "[id]=" +
+                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+      }).flatten().join('&');
+    } else {
+      return Sortable.sequence(element, arguments[1]).map( function(item) {
+        return name + "[]=" + encodeURIComponent(item);
+      }).join('&');
+    }
+  }
+};
+
+// Returns true if child is contained within element
+Element.isParent = function(child, element) {
+  if (!child.parentNode || child == element) return false;
+  if (child.parentNode == element) return true;
+  return Element.isParent(child.parentNode, element);
+};
+
+Element.findChildren = function(element, only, recursive, tagName) {
+  if(!element.hasChildNodes()) return null;
+  tagName = tagName.toUpperCase();
+  if(only) only = [only].flatten();
+  var elements = [];
+  $A(element.childNodes).each( function(e) {
+    if(e.tagName && e.tagName.toUpperCase()==tagName &&
+      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+        elements.push(e);
+    if(recursive) {
+      var grandchildren = Element.findChildren(e, only, recursive, tagName);
+      if(grandchildren) elements.push(grandchildren);
+    }
+  });
+
+  return (elements.length>0 ? elements.flatten() : []);
+};
+
+Element.offsetSize = function (element, type) {
+  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
+};
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js
new file mode 100644
index 0000000..f31a81a
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/effects.js
@@ -0,0 +1,1130 @@
+// script.aculo.us effects.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+// Contributors:
+//  Justin Palmer (http://encytemedia.com/)
+//  Mark Pilgrim (http://diveintomark.org/)
+//  Martin Bialasinki
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// converts rgb() and #xxx to #xxxxxx format,
+// returns self (or first argument) if not convertable
+String.prototype.parseColor = function() {
+  var color = '#';
+  if (this.slice(0,4) == 'rgb(') {
+    var cols = this.slice(4,this.length-1).split(',');
+    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+  } else {
+    if (this.slice(0,1) == '#') {
+      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+      if (this.length==7) color = this.toLowerCase();
+    }
+  }
+  return (color.length==7 ? color : (arguments[0] || this));
+};
+
+/*--------------------------------------------------------------------------*/
+
+Element.collectTextNodes = function(element) {
+  return $A($(element).childNodes).collect( function(node) {
+    return (node.nodeType==3 ? node.nodeValue :
+      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+  }).flatten().join('');
+};
+
+Element.collectTextNodesIgnoreClass = function(element, className) {
+  return $A($(element).childNodes).collect( function(node) {
+    return (node.nodeType==3 ? node.nodeValue :
+      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+        Element.collectTextNodesIgnoreClass(node, className) : ''));
+  }).flatten().join('');
+};
+
+Element.setContentZoom = function(element, percent) {
+  element = $(element);
+  element.setStyle({fontSize: (percent/100) + 'em'});
+  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+  return element;
+};
+
+Element.getInlineOpacity = function(element){
+  return $(element).style.opacity || '';
+};
+
+Element.forceRerendering = function(element) {
+  try {
+    element = $(element);
+    var n = document.createTextNode(' ');
+    element.appendChild(n);
+    element.removeChild(n);
+  } catch(e) { }
+};
+
+/*--------------------------------------------------------------------------*/
+
+var Effect = {
+  _elementDoesNotExistError: {
+    name: 'ElementDoesNotExistError',
+    message: 'The specified DOM element does not exist, but is required for this effect to operate'
+  },
+  Transitions: {
+    linear: Prototype.K,
+    sinoidal: function(pos) {
+      return (-Math.cos(pos*Math.PI)/2) + .5;
+    },
+    reverse: function(pos) {
+      return 1-pos;
+    },
+    flicker: function(pos) {
+      var pos = ((-Math.cos(pos*Math.PI)/4) + .75) + Math.random()/4;
+      return pos > 1 ? 1 : pos;
+    },
+    wobble: function(pos) {
+      return (-Math.cos(pos*Math.PI*(9*pos))/2) + .5;
+    },
+    pulse: function(pos, pulses) {
+      return (-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2) + .5;
+    },
+    spring: function(pos) {
+      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+    },
+    none: function(pos) {
+      return 0;
+    },
+    full: function(pos) {
+      return 1;
+    }
+  },
+  DefaultOptions: {
+    duration:   1.0,   // seconds
+    fps:        100,   // 100= assume 66fps max.
+    sync:       false, // true for combining
+    from:       0.0,
+    to:         1.0,
+    delay:      0.0,
+    queue:      'parallel'
+  },
+  tagifyText: function(element) {
+    var tagifyStyle = 'position:relative';
+    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
+
+    element = $(element);
+    $A(element.childNodes).each( function(child) {
+      if (child.nodeType==3) {
+        child.nodeValue.toArray().each( function(character) {
+          element.insertBefore(
+            new Element('span', {style: tagifyStyle}).update(
+              character == ' ' ? String.fromCharCode(160) : character),
+              child);
+        });
+        Element.remove(child);
+      }
+    });
+  },
+  multiple: function(element, effect) {
+    var elements;
+    if (((typeof element == 'object') ||
+        Object.isFunction(element)) &&
+       (element.length))
+      elements = element;
+    else
+      elements = $(element).childNodes;
+
+    var options = Object.extend({
+      speed: 0.1,
+      delay: 0.0
+    }, arguments[2] || { });
+    var masterDelay = options.delay;
+
+    $A(elements).each( function(element, index) {
+      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+    });
+  },
+  PAIRS: {
+    'slide':  ['SlideDown','SlideUp'],
+    'blind':  ['BlindDown','BlindUp'],
+    'appear': ['Appear','Fade']
+  },
+  toggle: function(element, effect) {
+    element = $(element);
+    effect = (effect || 'appear').toLowerCase();
+    var options = Object.extend({
+      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+    }, arguments[2] || { });
+    Effect[element.visible() ?
+      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+  }
+};
+
+Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;
+
+/* ------------- core effects ------------- */
+
+Effect.ScopedQueue = Class.create(Enumerable, {
+  initialize: function() {
+    this.effects  = [];
+    this.interval = null;
+  },
+  _each: function(iterator) {
+    this.effects._each(iterator);
+  },
+  add: function(effect) {
+    var timestamp = new Date().getTime();
+
+    var position = Object.isString(effect.options.queue) ?
+      effect.options.queue : effect.options.queue.position;
+
+    switch(position) {
+      case 'front':
+        // move unstarted effects after this effect
+        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+            e.startOn  += effect.finishOn;
+            e.finishOn += effect.finishOn;
+          });
+        break;
+      case 'with-last':
+        timestamp = this.effects.pluck('startOn').max() || timestamp;
+        break;
+      case 'end':
+        // start effect after last queued effect has finished
+        timestamp = this.effects.pluck('finishOn').max() || timestamp;
+        break;
+    }
+
+    effect.startOn  += timestamp;
+    effect.finishOn += timestamp;
+
+    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+      this.effects.push(effect);
+
+    if (!this.interval)
+      this.interval = setInterval(this.loop.bind(this), 15);
+  },
+  remove: function(effect) {
+    this.effects = this.effects.reject(function(e) { return e==effect });
+    if (this.effects.length == 0) {
+      clearInterval(this.interval);
+      this.interval = null;
+    }
+  },
+  loop: function() {
+    var timePos = new Date().getTime();
+    for(var i=0, len=this.effects.length;i<len;i++)
+      this.effects[i] && this.effects[i].loop(timePos);
+  }
+});
+
+Effect.Queues = {
+  instances: $H(),
+  get: function(queueName) {
+    if (!Object.isString(queueName)) return queueName;
+
+    return this.instances.get(queueName) ||
+      this.instances.set(queueName, new Effect.ScopedQueue());
+  }
+};
+Effect.Queue = Effect.Queues.get('global');
+
+Effect.Base = Class.create({
+  position: null,
+  start: function(options) {
+    function codeForEvent(options,eventName){
+      return (
+        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
+        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
+      );
+    }
+    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
+    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
+    this.currentFrame = 0;
+    this.state        = 'idle';
+    this.startOn      = this.options.delay*1000;
+    this.finishOn     = this.startOn+(this.options.duration*1000);
+    this.fromToDelta  = this.options.to-this.options.from;
+    this.totalTime    = this.finishOn-this.startOn;
+    this.totalFrames  = this.options.fps*this.options.duration;
+
+    this.render = (function() {
+      function dispatch(effect, eventName) {
+        if (effect.options[eventName + 'Internal'])
+          effect.options[eventName + 'Internal'](effect);
+        if (effect.options[eventName])
+          effect.options[eventName](effect);
+      }
+
+      return function(pos) {
+        if (this.state === "idle") {
+          this.state = "running";
+          dispatch(this, 'beforeSetup');
+          if (this.setup) this.setup();
+          dispatch(this, 'afterSetup');
+        }
+        if (this.state === "running") {
+          pos = (this.options.transition(pos) * this.fromToDelta) + this.options.from;
+          this.position = pos;
+          dispatch(this, 'beforeUpdate');
+          if (this.update) this.update(pos);
+          dispatch(this, 'afterUpdate');
+        }
+      };
+    })();
+
+    this.event('beforeStart');
+    if (!this.options.sync)
+      Effect.Queues.get(Object.isString(this.options.queue) ?
+        'global' : this.options.queue.scope).add(this);
+  },
+  loop: function(timePos) {
+    if (timePos >= this.startOn) {
+      if (timePos >= this.finishOn) {
+        this.render(1.0);
+        this.cancel();
+        this.event('beforeFinish');
+        if (this.finish) this.finish();
+        this.event('afterFinish');
+        return;
+      }
+      var pos   = (timePos - this.startOn) / this.totalTime,
+          frame = (pos * this.totalFrames).round();
+      if (frame > this.currentFrame) {
+        this.render(pos);
+        this.currentFrame = frame;
+      }
+    }
+  },
+  cancel: function() {
+    if (!this.options.sync)
+      Effect.Queues.get(Object.isString(this.options.queue) ?
+        'global' : this.options.queue.scope).remove(this);
+    this.state = 'finished';
+  },
+  event: function(eventName) {
+    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+    if (this.options[eventName]) this.options[eventName](this);
+  },
+  inspect: function() {
+    var data = $H();
+    for(property in this)
+      if (!Object.isFunction(this[property])) data.set(property, this[property]);
+    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
+  }
+});
+
+Effect.Parallel = Class.create(Effect.Base, {
+  initialize: function(effects) {
+    this.effects = effects || [];
+    this.start(arguments[1]);
+  },
+  update: function(position) {
+    this.effects.invoke('render', position);
+  },
+  finish: function(position) {
+    this.effects.each( function(effect) {
+      effect.render(1.0);
+      effect.cancel();
+      effect.event('beforeFinish');
+      if (effect.finish) effect.finish(position);
+      effect.event('afterFinish');
+    });
+  }
+});
+
+Effect.Tween = Class.create(Effect.Base, {
+  initialize: function(object, from, to) {
+    object = Object.isString(object) ? $(object) : object;
+    var args = $A(arguments), method = args.last(),
+      options = args.length == 5 ? args[3] : null;
+    this.method = Object.isFunction(method) ? method.bind(object) :
+      Object.isFunction(object[method]) ? object[method].bind(object) :
+      function(value) { object[method] = value };
+    this.start(Object.extend({ from: from, to: to }, options || { }));
+  },
+  update: function(position) {
+    this.method(position);
+  }
+});
+
+Effect.Event = Class.create(Effect.Base, {
+  initialize: function() {
+    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
+  },
+  update: Prototype.emptyFunction
+});
+
+Effect.Opacity = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    // make this work on IE on elements without 'layout'
+    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+      this.element.setStyle({zoom: 1});
+    var options = Object.extend({
+      from: this.element.getOpacity() || 0.0,
+      to:   1.0
+    }, arguments[1] || { });
+    this.start(options);
+  },
+  update: function(position) {
+    this.element.setOpacity(position);
+  }
+});
+
+Effect.Move = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({
+      x:    0,
+      y:    0,
+      mode: 'relative'
+    }, arguments[1] || { });
+    this.start(options);
+  },
+  setup: function() {
+    this.element.makePositioned();
+    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
+    if (this.options.mode == 'absolute') {
+      this.options.x = this.options.x - this.originalLeft;
+      this.options.y = this.options.y - this.originalTop;
+    }
+  },
+  update: function(position) {
+    this.element.setStyle({
+      left: (this.options.x  * position + this.originalLeft).round() + 'px',
+      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
+    });
+  }
+});
+
+// for backwards compatibility
+Effect.MoveBy = function(element, toTop, toLeft) {
+  return new Effect.Move(element,
+    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
+};
+
+Effect.Scale = Class.create(Effect.Base, {
+  initialize: function(element, percent) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({
+      scaleX: true,
+      scaleY: true,
+      scaleContent: true,
+      scaleFromCenter: false,
+      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
+      scaleFrom: 100.0,
+      scaleTo:   percent
+    }, arguments[2] || { });
+    this.start(options);
+  },
+  setup: function() {
+    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+    this.elementPositioning = this.element.getStyle('position');
+
+    this.originalStyle = { };
+    ['top','left','width','height','fontSize'].each( function(k) {
+      this.originalStyle[k] = this.element.style[k];
+    }.bind(this));
+
+    this.originalTop  = this.element.offsetTop;
+    this.originalLeft = this.element.offsetLeft;
+
+    var fontSize = this.element.getStyle('font-size') || '100%';
+    ['em','px','%','pt'].each( function(fontSizeType) {
+      if (fontSize.indexOf(fontSizeType)>0) {
+        this.fontSize     = parseFloat(fontSize);
+        this.fontSizeType = fontSizeType;
+      }
+    }.bind(this));
+
+    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+
+    this.dims = null;
+    if (this.options.scaleMode=='box')
+      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+    if (/^content/.test(this.options.scaleMode))
+      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+    if (!this.dims)
+      this.dims = [this.options.scaleMode.originalHeight,
+                   this.options.scaleMode.originalWidth];
+  },
+  update: function(position) {
+    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+    if (this.options.scaleContent && this.fontSize)
+      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+  },
+  finish: function(position) {
+    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+  },
+  setDimensions: function(height, width) {
+    var d = { };
+    if (this.options.scaleX) d.width = width.round() + 'px';
+    if (this.options.scaleY) d.height = height.round() + 'px';
+    if (this.options.scaleFromCenter) {
+      var topd  = (height - this.dims[0])/2;
+      var leftd = (width  - this.dims[1])/2;
+      if (this.elementPositioning == 'absolute') {
+        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
+        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+      } else {
+        if (this.options.scaleY) d.top = -topd + 'px';
+        if (this.options.scaleX) d.left = -leftd + 'px';
+      }
+    }
+    this.element.setStyle(d);
+  }
+});
+
+Effect.Highlight = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
+    this.start(options);
+  },
+  setup: function() {
+    // Prevent executing on elements not in the layout flow
+    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
+    // Disable background image during the effect
+    this.oldStyle = { };
+    if (!this.options.keepBackgroundImage) {
+      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
+      this.element.setStyle({backgroundImage: 'none'});
+    }
+    if (!this.options.endcolor)
+      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+    if (!this.options.restorecolor)
+      this.options.restorecolor = this.element.getStyle('background-color');
+    // init color calculations
+    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+  },
+  update: function(position) {
+    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
+  },
+  finish: function() {
+    this.element.setStyle(Object.extend(this.oldStyle, {
+      backgroundColor: this.options.restorecolor
+    }));
+  }
+});
+
+Effect.ScrollTo = function(element) {
+  var options = arguments[1] || { },
+  scrollOffsets = document.viewport.getScrollOffsets(),
+  elementOffsets = $(element).cumulativeOffset();
+
+  if (options.offset) elementOffsets[1] += options.offset;
+
+  return new Effect.Tween(null,
+    scrollOffsets.top,
+    elementOffsets[1],
+    options,
+    function(p){ scrollTo(scrollOffsets.left, p.round()); }
+  );
+};
+
+/* ------------- combination effects ------------- */
+
+Effect.Fade = function(element) {
+  element = $(element);
+  var oldOpacity = element.getInlineOpacity();
+  var options = Object.extend({
+    from: element.getOpacity() || 1.0,
+    to:   0.0,
+    afterFinishInternal: function(effect) {
+      if (effect.options.to!=0) return;
+      effect.element.hide().setStyle({opacity: oldOpacity});
+    }
+  }, arguments[1] || { });
+  return new Effect.Opacity(element,options);
+};
+
+Effect.Appear = function(element) {
+  element = $(element);
+  var options = Object.extend({
+  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+  to:   1.0,
+  // force Safari to render floated elements properly
+  afterFinishInternal: function(effect) {
+    effect.element.forceRerendering();
+  },
+  beforeSetup: function(effect) {
+    effect.element.setOpacity(effect.options.from).show();
+  }}, arguments[1] || { });
+  return new Effect.Opacity(element,options);
+};
+
+Effect.Puff = function(element) {
+  element = $(element);
+  var oldStyle = {
+    opacity: element.getInlineOpacity(),
+    position: element.getStyle('position'),
+    top:  element.style.top,
+    left: element.style.left,
+    width: element.style.width,
+    height: element.style.height
+  };
+  return new Effect.Parallel(
+   [ new Effect.Scale(element, 200,
+      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+     Object.extend({ duration: 1.0,
+      beforeSetupInternal: function(effect) {
+        Position.absolutize(effect.effects[0].element);
+      },
+      afterFinishInternal: function(effect) {
+         effect.effects[0].element.hide().setStyle(oldStyle); }
+     }, arguments[1] || { })
+   );
+};
+
+Effect.BlindUp = function(element) {
+  element = $(element);
+  element.makeClipping();
+  return new Effect.Scale(element, 0,
+    Object.extend({ scaleContent: false,
+      scaleX: false,
+      restoreAfterFinish: true,
+      afterFinishInternal: function(effect) {
+        effect.element.hide().undoClipping();
+      }
+    }, arguments[1] || { })
+  );
+};
+
+Effect.BlindDown = function(element) {
+  element = $(element);
+  var elementDimensions = element.getDimensions();
+  return new Effect.Scale(element, 100, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    scaleFrom: 0,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) {
+      effect.element.makeClipping().setStyle({height: '0px'}).show();
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.undoClipping();
+    }
+  }, arguments[1] || { }));
+};
+
+Effect.SwitchOff = function(element) {
+  element = $(element);
+  var oldOpacity = element.getInlineOpacity();
+  return new Effect.Appear(element, Object.extend({
+    duration: 0.4,
+    from: 0,
+    transition: Effect.Transitions.flicker,
+    afterFinishInternal: function(effect) {
+      new Effect.Scale(effect.element, 1, {
+        duration: 0.3, scaleFromCenter: true,
+        scaleX: false, scaleContent: false, restoreAfterFinish: true,
+        beforeSetup: function(effect) {
+          effect.element.makePositioned().makeClipping();
+        },
+        afterFinishInternal: function(effect) {
+          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
+        }
+      });
+    }
+  }, arguments[1] || { }));
+};
+
+Effect.DropOut = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: element.getStyle('top'),
+    left: element.getStyle('left'),
+    opacity: element.getInlineOpacity() };
+  return new Effect.Parallel(
+    [ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+    Object.extend(
+      { duration: 0.5,
+        beforeSetup: function(effect) {
+          effect.effects[0].element.makePositioned();
+        },
+        afterFinishInternal: function(effect) {
+          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
+        }
+      }, arguments[1] || { }));
+};
+
+Effect.Shake = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    distance: 20,
+    duration: 0.5
+  }, arguments[1] || {});
+  var distance = parseFloat(options.distance);
+  var split = parseFloat(options.duration) / 10.0;
+  var oldStyle = {
+    top: element.getStyle('top'),
+    left: element.getStyle('left') };
+    return new Effect.Move(element,
+      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
+    new Effect.Move(effect.element,
+      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
+        effect.element.undoPositioned().setStyle(oldStyle);
+  }}); }}); }}); }}); }}); }});
+};
+
+Effect.SlideDown = function(element) {
+  element = $(element).cleanWhitespace();
+  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
+  var oldInnerBottom = element.down().getStyle('bottom');
+  var elementDimensions = element.getDimensions();
+  return new Effect.Scale(element, 100, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    scaleFrom: window.opera ? 0 : 1,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) {
+      effect.element.makePositioned();
+      effect.element.down().makePositioned();
+      if (window.opera) effect.element.setStyle({top: ''});
+      effect.element.makeClipping().setStyle({height: '0px'}).show();
+    },
+    afterUpdateInternal: function(effect) {
+      effect.element.down().setStyle({bottom:
+        (effect.dims[0] - effect.element.clientHeight) + 'px' });
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.undoClipping().undoPositioned();
+      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
+    }, arguments[1] || { })
+  );
+};
+
+Effect.SlideUp = function(element) {
+  element = $(element).cleanWhitespace();
+  var oldInnerBottom = element.down().getStyle('bottom');
+  var elementDimensions = element.getDimensions();
+  return new Effect.Scale(element, window.opera ? 0 : 1,
+   Object.extend({ scaleContent: false,
+    scaleX: false,
+    scaleMode: 'box',
+    scaleFrom: 100,
+    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+    restoreAfterFinish: true,
+    afterSetup: function(effect) {
+      effect.element.makePositioned();
+      effect.element.down().makePositioned();
+      if (window.opera) effect.element.setStyle({top: ''});
+      effect.element.makeClipping().show();
+    },
+    afterUpdateInternal: function(effect) {
+      effect.element.down().setStyle({bottom:
+        (effect.dims[0] - effect.element.clientHeight) + 'px' });
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.hide().undoClipping().undoPositioned();
+      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
+    }
+   }, arguments[1] || { })
+  );
+};
+
+// Bug in opera makes the TD containing this element expand for a instance after finish
+Effect.Squish = function(element) {
+  return new Effect.Scale(element, window.opera ? 1 : 0, {
+    restoreAfterFinish: true,
+    beforeSetup: function(effect) {
+      effect.element.makeClipping();
+    },
+    afterFinishInternal: function(effect) {
+      effect.element.hide().undoClipping();
+    }
+  });
+};
+
+Effect.Grow = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    direction: 'center',
+    moveTransition: Effect.Transitions.sinoidal,
+    scaleTransition: Effect.Transitions.sinoidal,
+    opacityTransition: Effect.Transitions.full
+  }, arguments[1] || { });
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    height: element.style.height,
+    width: element.style.width,
+    opacity: element.getInlineOpacity() };
+
+  var dims = element.getDimensions();
+  var initialMoveX, initialMoveY;
+  var moveX, moveY;
+
+  switch (options.direction) {
+    case 'top-left':
+      initialMoveX = initialMoveY = moveX = moveY = 0;
+      break;
+    case 'top-right':
+      initialMoveX = dims.width;
+      initialMoveY = moveY = 0;
+      moveX = -dims.width;
+      break;
+    case 'bottom-left':
+      initialMoveX = moveX = 0;
+      initialMoveY = dims.height;
+      moveY = -dims.height;
+      break;
+    case 'bottom-right':
+      initialMoveX = dims.width;
+      initialMoveY = dims.height;
+      moveX = -dims.width;
+      moveY = -dims.height;
+      break;
+    case 'center':
+      initialMoveX = dims.width / 2;
+      initialMoveY = dims.height / 2;
+      moveX = -dims.width / 2;
+      moveY = -dims.height / 2;
+      break;
+  }
+
+  return new Effect.Move(element, {
+    x: initialMoveX,
+    y: initialMoveY,
+    duration: 0.01,
+    beforeSetup: function(effect) {
+      effect.element.hide().makeClipping().makePositioned();
+    },
+    afterFinishInternal: function(effect) {
+      new Effect.Parallel(
+        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+          new Effect.Scale(effect.element, 100, {
+            scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+        ], Object.extend({
+             beforeSetup: function(effect) {
+               effect.effects[0].element.setStyle({height: '0px'}).show();
+             },
+             afterFinishInternal: function(effect) {
+               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle);
+             }
+           }, options)
+      );
+    }
+  });
+};
+
+Effect.Shrink = function(element) {
+  element = $(element);
+  var options = Object.extend({
+    direction: 'center',
+    moveTransition: Effect.Transitions.sinoidal,
+    scaleTransition: Effect.Transitions.sinoidal,
+    opacityTransition: Effect.Transitions.none
+  }, arguments[1] || { });
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    height: element.style.height,
+    width: element.style.width,
+    opacity: element.getInlineOpacity() };
+
+  var dims = element.getDimensions();
+  var moveX, moveY;
+
+  switch (options.direction) {
+    case 'top-left':
+      moveX = moveY = 0;
+      break;
+    case 'top-right':
+      moveX = dims.width;
+      moveY = 0;
+      break;
+    case 'bottom-left':
+      moveX = 0;
+      moveY = dims.height;
+      break;
+    case 'bottom-right':
+      moveX = dims.width;
+      moveY = dims.height;
+      break;
+    case 'center':
+      moveX = dims.width / 2;
+      moveY = dims.height / 2;
+      break;
+  }
+
+  return new Effect.Parallel(
+    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+    ], Object.extend({
+         beforeStartInternal: function(effect) {
+           effect.effects[0].element.makePositioned().makeClipping();
+         },
+         afterFinishInternal: function(effect) {
+           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
+       }, options)
+  );
+};
+
+Effect.Pulsate = function(element) {
+  element = $(element);
+  var options    = arguments[1] || { },
+    oldOpacity = element.getInlineOpacity(),
+    transition = options.transition || Effect.Transitions.linear,
+    reverser   = function(pos){
+      return 1 - transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2) + .5);
+    };
+
+  return new Effect.Opacity(element,
+    Object.extend(Object.extend({  duration: 2.0, from: 0,
+      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+    }, options), {transition: reverser}));
+};
+
+Effect.Fold = function(element) {
+  element = $(element);
+  var oldStyle = {
+    top: element.style.top,
+    left: element.style.left,
+    width: element.style.width,
+    height: element.style.height };
+  element.makeClipping();
+  return new Effect.Scale(element, 5, Object.extend({
+    scaleContent: false,
+    scaleX: false,
+    afterFinishInternal: function(effect) {
+    new Effect.Scale(element, 1, {
+      scaleContent: false,
+      scaleY: false,
+      afterFinishInternal: function(effect) {
+        effect.element.hide().undoClipping().setStyle(oldStyle);
+      } });
+  }}, arguments[1] || { }));
+};
+
+Effect.Morph = Class.create(Effect.Base, {
+  initialize: function(element) {
+    this.element = $(element);
+    if (!this.element) throw(Effect._elementDoesNotExistError);
+    var options = Object.extend({
+      style: { }
+    }, arguments[1] || { });
+
+    if (!Object.isString(options.style)) this.style = $H(options.style);
+    else {
+      if (options.style.include(':'))
+        this.style = options.style.parseStyle();
+      else {
+        this.element.addClassName(options.style);
+        this.style = $H(this.element.getStyles());
+        this.element.removeClassName(options.style);
+        var css = this.element.getStyles();
+        this.style = this.style.reject(function(style) {
+          return style.value == css[style.key];
+        });
+        options.afterFinishInternal = function(effect) {
+          effect.element.addClassName(effect.options.style);
+          effect.transforms.each(function(transform) {
+            effect.element.style[transform.style] = '';
+          });
+        };
+      }
+    }
+    this.start(options);
+  },
+
+  setup: function(){
+    function parseColor(color){
+      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
+      color = color.parseColor();
+      return $R(0,2).map(function(i){
+        return parseInt( color.slice(i*2+1,i*2+3), 16 );
+      });
+    }
+    this.transforms = this.style.map(function(pair){
+      var property = pair[0], value = pair[1], unit = null;
+
+      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
+        value = value.parseColor();
+        unit  = 'color';
+      } else if (property == 'opacity') {
+        value = parseFloat(value);
+        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
+          this.element.setStyle({zoom: 1});
+      } else if (Element.CSS_LENGTH.test(value)) {
+          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
+          value = parseFloat(components[1]);
+          unit = (components.length == 3) ? components[2] : null;
+      }
+
+      var originalValue = this.element.getStyle(property);
+      return {
+        style: property.camelize(),
+        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0),
+        targetValue: unit=='color' ? parseColor(value) : value,
+        unit: unit
+      };
+    }.bind(this)).reject(function(transform){
+      return (
+        (transform.originalValue == transform.targetValue) ||
+        (
+          transform.unit != 'color' &&
+          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
+        )
+      );
+    });
+  },
+  update: function(position) {
+    var style = { }, transform, i = this.transforms.length;
+    while(i--)
+      style[(transform = this.transforms[i]).style] =
+        transform.unit=='color' ? '#'+
+          (Math.round(transform.originalValue[0]+
+            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
+          (Math.round(transform.originalValue[1]+
+            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
+          (Math.round(transform.originalValue[2]+
+            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
+        (transform.originalValue +
+          (transform.targetValue - transform.originalValue) * position).toFixed(3) +
+            (transform.unit === null ? '' : transform.unit);
+    this.element.setStyle(style, true);
+  }
+});
+
+Effect.Transform = Class.create({
+  initialize: function(tracks){
+    this.tracks  = [];
+    this.options = arguments[1] || { };
+    this.addTracks(tracks);
+  },
+  addTracks: function(tracks){
+    tracks.each(function(track){
+      track = $H(track);
+      var data = track.values().first();
+      this.tracks.push($H({
+        ids:     track.keys().first(),
+        effect:  Effect.Morph,
+        options: { style: data }
+      }));
+    }.bind(this));
+    return this;
+  },
+  play: function(){
+    return new Effect.Parallel(
+      this.tracks.map(function(track){
+        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
+        var elements = [$(ids) || $$(ids)].flatten();
+        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
+      }).flatten(),
+      this.options
+    );
+  }
+});
+
+Element.CSS_PROPERTIES = $w(
+  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' +
+  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
+  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
+  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
+  'fontSize fontWeight height left letterSpacing lineHeight ' +
+  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
+  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
+  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
+  'right textIndent top width wordSpacing zIndex');
+
+Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
+
+String.__parseStyleElement = document.createElement('div');
+String.prototype.parseStyle = function(){
+  var style, styleRules = $H();
+  if (Prototype.Browser.WebKit)
+    style = new Element('div',{style:this}).style;
+  else {
+    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
+    style = String.__parseStyleElement.childNodes[0].style;
+  }
+
+  Element.CSS_PROPERTIES.each(function(property){
+    if (style[property]) styleRules.set(property, style[property]);
+  });
+
+  if (Prototype.Browser.IE && this.include('opacity'))
+    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
+
+  return styleRules;
+};
+
+if (document.defaultView && document.defaultView.getComputedStyle) {
+  Element.getStyles = function(element) {
+    var css = document.defaultView.getComputedStyle($(element), null);
+    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
+      styles[property] = css[property];
+      return styles;
+    });
+  };
+} else {
+  Element.getStyles = function(element) {
+    element = $(element);
+    var css = element.currentStyle, styles;
+    styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
+      results[property] = css[property];
+      return results;
+    });
+    if (!styles.opacity) styles.opacity = element.getOpacity();
+    return styles;
+  };
+}
+
+Effect.Methods = {
+  morph: function(element, style) {
+    element = $(element);
+    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
+    return element;
+  },
+  visualEffect: function(element, effect, options) {
+    element = $(element);
+    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
+    new Effect[klass](element, options);
+    return element;
+  },
+  highlight: function(element, options) {
+    element = $(element);
+    new Effect.Highlight(element, options);
+    return element;
+  }
+};
+
+$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
+  'pulsate shake puff squish switchOff dropOut').each(
+  function(effect) {
+    Effect.Methods[effect] = function(element, options){
+      element = $(element);
+      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
+      return element;
+    };
+  }
+);
+
+$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
+  function(f) { Effect.Methods[f] = Element[f]; }
+);
+
+Element.addMethods(Effect.Methods);
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js
new file mode 100644
index 0000000..640c9b1
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/jw_effects.js
@@ -0,0 +1,750 @@
+/*
+	FYI:
+		"restoreAfterFinish" is only used by Scale and all its subclasses and puts the element 
+			back where it was the size that it was.
+
+	Bugs:
+		SlideLeftIn still doesn't work on IE ???
+
+		'delete' does not work on IE
+
+		Cannot set styles of table items in Builder.node due to IE bug
+
+		stray commas after last item in lists causes IE to fail
+
+
+		Effect.toggle on these effects doesn't seem to work quite right
+			(  Effect.toggle('demo-effect-curtainopen','slideleft')  )
+
+		Not allowing Effect.Curtain* to finish before clicking again causes a problem.
+
+		Not allowing MOST effects to finish before clicking again causes a problem.
+*/
+
+
+/* This declaration doesn't show up correctly when using Firebug */
+/* 
+	Also, these toggles don't seem to work right either
+	OK:  slideup, slidedown, slideright
+	NOT: slideleft, curtain
+*/
+Effect.PAIRS = Object.extend(
+	Effect.PAIRS, { 
+		'slidedown':  ['SlideDownIn',  'SlideDownOut'],
+		'slideup':    ['SlideUpIn',    'SlideUpOut'],
+		'slideleft':  ['SlideLeftIn',  'SlideLeftOut'],
+		'slideright': ['SlideRightIn', 'SlideRightOut'],
+		'curtain':    ['CurtainClose', 'CurtainOpen']
+	}
+);
+
+
+Object.extend(
+	Effect, {
+		_elementIsNotAListError: {
+			name: 'ElementIsNotAListError',
+			message: 'The specified DOM element is not a list exist, but is required to be for this effect to operate'
+		}
+  }
+);
+
+
+Effect.PulseList = Class.create();
+Object.extend(Object.extend(Effect.PulseList.prototype, Effect.Base.prototype), {
+	initialize: function(element) {
+		this.element = $(element);
+		if(!this.element) throw(Effect._elementDoesNotExistError);
+//		if( (this.element.tagName != "UL") && (this.element.tagName != "OL") )
+		if( ! ['UL','OL'].include(this.element.tagName) )
+			throw(Effect._elementIsNotAListError);
+		if ( ! this.element.effectOn ) {
+			this.element.effectOn = true;
+			var options = Object.extend({
+				_pulse: 1,
+				direction: "down",		// up or down
+				pulses: 1,
+				continuous: false,
+				bounce: false,
+				duration: 2,
+				min_opacity: 0.1
+			}, arguments[1] || {});
+			this.start(options);
+		}
+	},
+	setup: function() {
+		var num_items = this.element.immediateDescendants().size();
+		var i = 1;
+		var self = this;
+		this.element.immediateDescendants().each( function(myitem){
+			var mydelay = (self.options.direction == "down" ) 
+				? (i++ - 1)/num_items
+				: (num_items - i++)/num_items;
+			var reverser   = function(pos){ return Effect.Transitions.sinoidal(1-Effect.Transitions.pulse(pos, 1)) }
+			new Effect.Opacity(myitem, 
+				Object.extend(Object.extend({
+					delay: mydelay, 
+					duration: self.options.duration, 
+					from: self.options.min_opacity,
+					afterFinishInternal: function(effect) {
+						if ( ! ( self.options.direction == 'down' ? myitem.next() : myitem.previous() ) ) {
+							if ( ( self.options.continuous ) || ( self.options._pulse++ < self.options.pulses ) ){
+								if ( self.options.bounce) 
+									self.options.direction = ( self.options.direction == 'up' ) ? 'down' : 'up';
+								new Effect.PulseList(effect.element.parentNode, self.options || {} );
+							}
+						}
+					}
+				}, {}), {transition: reverser})
+			);
+		});
+	},
+	finish: function() {
+//		delete(this.element.effectOn);
+		this.element.effectOn = false;
+	}
+});
+
+
+Effect.Gradient = Class.create();
+Object.extend(Object.extend(Effect.Gradient.prototype, Effect.Base.prototype), {
+	initialize: function(element) {
+		this.element = $(element);
+		if(!this.element) throw(Effect._elementDoesNotExistError);
+		var options = Object.extend({
+			duration: 5,
+			rows: 10,
+			cols: 10,
+			type: 'diagonal',		/*	vertical, horizontal, diagonal */
+			colors: [ 'black', 'white', 'white', 'black' ]
+		}, arguments[1] || {});
+		if (options.type == 'horizontal') options.rows = 1;
+		else if (options.type == 'vertical') options.cols = 1;
+
+		dims = this.element.getDimensions();
+		cellwidth  = dims.width  / options.cols;
+		cellheight = dims.height / options.rows;
+		this.cellids = [];
+		var self = this;
+		this.table = Builder.node('table', {
+			border: 0, cellpadding: 0, cellspacing: 0,
+			style:"margin: 0px; padding: 0px;"
+		});
+		tbody = Builder.node('tbody');
+		$(tbody).setStyle({ margin: 0, padding: 0 });
+		$R(1,options.rows).each( function(row){
+			tr = Builder.node('tr');
+			$(tr).setStyle({ margin: 0, padding: 0 });
+			if (options.type == 'vertical') {
+				cellcolor = Color.shade( 
+					Color.string2hex(options.colors[0]), 
+					Color.string2hex(options.colors[1]), 
+					(row-1)/(options.rows-1) 
+				);
+			}
+			$R(1,options.cols).each( function(col){
+				cellid = "grcell-"+row+"-"+col;
+				if (options.type == 'diagonal') {
+					cellcolor = Color.shade( 
+						Color.shade( 
+							Color.string2hex(options.colors[0]), 
+							Color.string2hex(options.colors[1]), 
+							(col-1)/(options.cols-1) 
+						), 
+						Color.shade( 
+							Color.string2hex(options.colors[2]), 
+							Color.string2hex(options.colors[3]), 
+							(col-1)/(options.cols-1) 
+						),
+						(row-1)/(options.rows-1) 
+					);
+				} else if (options.type == 'horizontal') {
+					cellcolor = Color.shade( 
+						Color.string2hex(options.colors[0]), 
+						Color.string2hex(options.colors[1]), 
+						(col-1)/(options.cols-1) 
+					);
+				}
+				td = Builder.node('td',{
+					id: cellid
+				}, "" );
+				$(td).setStyle({ margin: '0px', padding: '0px',
+					height: cellheight+'px', 
+					width:  cellwidth+'px', 
+					backgroundColor: cellcolor
+				});
+				tr.appendChild(td);
+				self.cellids.push(cellid);
+			});
+			tbody.appendChild(tr);
+		});
+		this.table.appendChild(tbody);
+
+		this.start(options);
+	},
+	setup: function(){
+		Position.absolutize(this.element);
+		this.element.parentNode.appendChild(this.table);
+		Position.absolutize(this.table);
+	},
+	finish: function(){
+		new Effect.Fade( this.table , {
+			afterFinish: function(effect) {
+				effect.element.parentNode.removeChild(effect.element);
+			}
+		});
+	}
+});
+
+Effect.ORIGGradient = Class.create();
+Object.extend(Object.extend(Effect.ORIGGradient.prototype, Effect.Base.prototype), {
+	initialize: function(element) {
+		this.element = $(element);
+		if(!this.element) throw(Effect._elementDoesNotExistError);
+		var options = Object.extend({
+			duration: 5,
+			rows: 10,
+			cols: 10,
+			type: 'diagonal',		/*	vertical, horizontal, diagonal */
+			colors: [ 'black', 'white', 'white', 'black' ]
+		}, arguments[1] || {});
+		if (options.type == 'horizontal') options.rows = 1;
+		else if (options.type == 'vertical') options.cols = 1;
+
+		dims = this.element.getDimensions();
+		cellwidth  = dims.width  / options.cols;
+		cellheight = dims.height / options.rows;
+		this.cellids = [];
+		var self = this;
+		this.table = Builder.node('table', {
+			border: 0, cellpadding: 0, cellspacing: 0,
+			style:"margin: 0px; padding: 0px;"
+		});
+		tbody = Builder.node('tbody', { style:"margin: 0px; padding: 0px;" });
+		$R(1,options.rows).each( function(row){
+			tr = Builder.node('tr', { style:"margin: 0px; padding: 0px;" });
+			if (options.type == 'vertical') {
+				cellcolor = Color.shade( 
+					Color.string2hex(options.colors[0]), 
+					Color.string2hex(options.colors[1]), 
+					(row-1)/(options.rows-1) 
+				);
+			}
+			$R(1,options.cols).each( function(col){
+				cellid = "grcell-"+row+"-"+col;
+				if (options.type == 'diagonal') {
+					cellcolor = Color.shade( 
+						Color.shade( 
+							Color.string2hex(options.colors[0]), 
+							Color.string2hex(options.colors[1]), 
+							(col-1)/(options.cols-1) 
+						), 
+						Color.shade( 
+							Color.string2hex(options.colors[2]), 
+							Color.string2hex(options.colors[3]), 
+							(col-1)/(options.cols-1) 
+						),
+						(row-1)/(options.rows-1) 
+					);
+				} else if (options.type == 'horizontal') {
+					cellcolor = Color.shade( 
+						Color.string2hex(options.colors[0]), 
+						Color.string2hex(options.colors[1]), 
+						(col-1)/(options.cols-1) 
+					);
+				}
+				td = Builder.node('td',{
+					id: cellid,
+					style:"margin: 0px; padding: 0px; "
+						+"height: "+cellheight+"px; "
+						+"width: "+cellwidth+"px; "
+						+"background-color: "+cellcolor
+				}, "" );
+				tr.appendChild(td);
+				self.cellids.push(cellid);
+			});
+			tbody.appendChild(tr);
+		});
+		this.table.appendChild(tbody);
+
+		Position.absolutize(this.element);
+		this.element.parentNode.appendChild(this.table);
+		Position.absolutize(this.table);
+		this.start(options);
+	},
+	finish: function(){
+		new Effect.Fade( this.table , {
+			afterFinish: function(effect) {
+				effect.element.parentNode.removeChild(effect.element);
+			}
+		});
+	}
+});
+
+
+Effect.Pixelate = Class.create();
+Object.extend(Object.extend(Effect.Pixelate.prototype, Effect.Base.prototype), {
+	initialize: function(element) {
+		this.element = $(element);
+		if(!this.element) throw(Effect._elementDoesNotExistError);
+		var options = Object.extend({
+			duration: 5,
+			rows: 30,
+			cols: 30,
+			startcolor: 'transparent',
+			endcolor: 'white'
+		}, arguments[1] || {});
+		options.cells = options.rows * options.cols;
+
+		dims = this.element.getDimensions();
+		cellwidth  = dims.width  / options.cols;
+		cellheight = dims.height / options.rows;
+		this.cellids = [];
+		this.table = Builder.node('table', {
+			border: 0, cellpadding: 0, cellspacing: 0,
+			style:"margin: 0px; padding: 0px;"
+		});
+		/*	Cannot set styles of table items in Builder.node due to IE bug */
+		var self = this;
+		tbody = Builder.node('tbody');
+		$(tbody).setStyle({ margin: 0, padding: 0 });
+		$R(1,options.rows).each( function(row){
+			tr = Builder.node('tr');
+			$(tr).setStyle({ margin: '0px', padding: '0px' });
+			$R(1,options.cols).each( function(col){
+				cellid = "pxcell-"+row+"-"+col;
+				td = Builder.node('td',{
+					id: cellid
+				}, '');
+				$(td).setStyle({ margin: '0px', padding: '0px',
+					height: cellheight+'px', 
+					width:  cellwidth+'px', 
+					backgroundColor: options.startcolor
+				});
+				tr.appendChild(td);
+				self.cellids.push(cellid);
+			});
+			tbody.appendChild(tr);
+		});
+		this.cellids.sort( function(a,b){return (0.5 - Math.random());} );
+		this.table.appendChild(tbody);
+		this.start(options);
+	},
+	setup: function() {
+		Position.absolutize(this.element);
+		this.element.parentNode.appendChild(this.table);
+		Position.absolutize(this.table);
+	},
+	update: function(position) {
+		while ( this.cellids.size() && (this.cellids.size()/this.options.cells) > (1-position) ) {
+			$(this.cellids.pop()).setStyle({ backgroundColor: this.options.endcolor });
+		}
+	},
+	finish: function(){
+		new Effect.Fade( this.table , {
+			afterFinish: function(effect) {
+				effect.element.parentNode.removeChild(effect.element);
+			}
+		});
+	}
+});
+
+
+
+Effect.Duplicate = Class.create();
+Object.extend(Object.extend(Effect.Duplicate.prototype, Effect.Base.prototype), {
+	initialize: function(element) {
+		this.element = $(element);
+		if(!this.element) throw(Effect._elementDoesNotExistError);
+
+		this.element.makePositioned();
+		this.elecopy = this.element.cloneNode(true);
+		this.elecopy.setStyle({ color: 'red', backgroundColor: 'red', backgroundImage: '' });
+		this.elecopy.id = element.id + '-copy';
+		this.element.parentNode.appendChild(this.elecopy);
+		Position.relativize(this.element);
+		Position.relativize(this.elecopy);
+		Position.absolutize(this.element);
+		Position.absolutize(this.elecopy);
+
+		var options = Object.extend({
+		}, arguments[1] || {});
+		this.start(options);
+	},
+	asetup: function() {
+		return new Effect.Parallel ( [
+			new Effect.SlideRightIn(this.element, { sync:true }),
+			new Effect.SlideLeftIn( this.elecopy, { sync:true }) 
+			], Object.extend({ 
+				duration: 2
+			}, arguments[1] || {})
+		);
+	},
+	update: function(position) {
+	},
+	finish: function() {
+		this.elecopy.undoClipping().undoPositioned().remove();
+	}
+});
+
+Effect.Flicker = Class.create();
+Object.extend(Object.extend(Effect.Flicker.prototype, Effect.Base.prototype), {
+	initialize: function(element) {
+		this.element = $(element);
+		if(!this.element) throw(Effect._elementDoesNotExistError);
+		if ( ! this.element.effectOn ) {
+			this.element.effectOn = true;
+			var options = Object.extend({
+				threshold: 0.5,
+				endvisibility: "visible"
+			}, arguments[1] || {});
+			this.start(options);
+		}
+	},
+	update: function(position) {
+		var visibility = ( Math.random() < this.options.threshold ) ? "hidden" : "visible";
+		this.element.setStyle({
+			visibility: visibility
+		});
+	},
+	finish: function() {
+		this.element.setStyle({
+			visibility: this.options.endvisibility
+		});
+//		delete(this.element.effectOn);
+		this.element.effectOn = false;
+	}
+});
+
+
+Effect.CurtainClose = function(element) {
+/* 
+	CurtainClose need to have the content of the element wrapped in a container element with fixed width AND height!
+*/
+	element = $(element).cleanWhitespace();
+	var elementDimensions = element.getDimensions();
+
+	element.makeClipping().makePositioned();
+	element.parentNode.makeClipping();	//	stops SlideLeftIn flicker
+	elecopy = $(element.cloneNode(true));
+	elecopy.setStyle({ top: '0px', left: '0px' });
+	elecopy.id = element.id + '-copy';
+	element.parentNode.appendChild(elecopy);
+	elecopy.makeClipping().makePositioned();
+	Position.absolutize(element);
+
+	return new Effect.Parallel ( [
+		new Effect.SlideRightIn(element, { sync:true }),
+		new Effect.SlideLeftIn( elecopy, { sync:true }) 
+		], Object.extend({ 
+			duration: 2,
+			afterFinishInternal: function(effect){
+				elecopy.undoClipping().undoPositioned().remove();
+/*	why does the above work and the below does not? */
+//				effect.effects[1].element.undoClipping().undoPositioned().remove();
+				effect.effects[0].element.parentNode.undoClipping();
+			}
+		}, arguments[1] || {})
+	);
+}
+
+Effect.CurtainOpen = function(element) {
+/* 
+	CurtainOpen need to have the content of the element wrapped in a container element with fixed width AND height!
+*/
+	element = $(element).cleanWhitespace();
+
+	element.makeClipping().makePositioned();
+	element.parentNode.makeClipping();
+	elecopy = element.cloneNode(true);
+	elecopy.setStyle({ top: '0px' });
+	elecopy.id = element.id + '-copy';
+	element.parentNode.appendChild(elecopy);
+	Position.absolutize(element);
+	Position.absolutize(elecopy);
+
+	var elementDimensions = element.getDimensions();
+	return new Effect.Parallel ( [
+		new Effect.SlideRightOut(element, { sync:true }),
+		new Effect.SlideLeftOut( elecopy, { sync:true })
+		], Object.extend({ 
+			duration: 2,
+			beforeSetup: function(effect){
+				effect.effects[1].element.makeClipping().makePositioned().show();
+			},
+			afterFinishInternal: function(effect){
+				element.undoClipping().undoPositioned();
+/*	why does the above work and the below does not? */
+//				effect.effects[0].element.undoClipping().undoPositioned();	
+				effect.effects[1].element.parentNode.undoClipping();
+				effect.effects[1].element.undoClipping().undoPositioned().remove();
+			}
+		}, arguments[1] || {})
+	);
+}
+
+
+Effect.SlideLeftIn = function(element) {
+/* 
+	SlideLeftIn need to have the content of the element wrapped in a container element with fixed width!
+*/
+	element = $(element).cleanWhitespace();
+	if ( ! element.effectOn ) {
+		element.effectOn = true;
+		var elementDimensions = element.getDimensions();
+		return new Effect.Parallel ( [
+			new Effect.Move(element, 
+				Object.extend({ 
+					x: -(elementDimensions.width), 
+					sync: true, 
+					mode: 'relative', 
+					beforeStartInternal: function(effect) {
+						if(window.opera) effect.element.setStyle({left: ''});
+						effect.element.setStyle({left: elementDimensions.width + 'px' });
+						effect.element.show();
+					}
+				}, arguments[1] || {})
+			),
+			new Effect.Scale(element, 100,
+				Object.extend({ scaleContent: false, 
+					/* why does the use of sync: true make this flicker? */
+					scaleY: false,
+					scaleFrom: window.opera ? 0 : 1
+				}, arguments[1] || {})
+			)
+			], Object.extend({
+				beforeSetup: function(effect){
+					effect.effects[0].element.parentNode.makeClipping();
+					effect.effects[0].element.makeClipping();
+				},
+				afterFinishInternal: function(effect){
+					effect.effects[0].element.parentNode.undoClipping();
+					effect.effects[0].element.undoClipping();
+				},
+				afterFinish: function(effect){
+//					delete(effect.effects[0].element.effectOn);
+					effect.effects[0].element.effectOn = false;
+				}
+			}, arguments[1] || {})
+		);
+	}
+}
+
+
+Effect.SlideRightOut = function(element) {
+/* 
+	SlideRightOut need to have the content of the element wrapped in a container element with fixed width!
+*/
+	element = $(element).cleanWhitespace();
+	var elementDimensions = element.getDimensions();
+	return new Effect.Parallel ( [
+		new Effect.Move(element, { x: element.getWidth(), sync: true, mode: 'relative' }),
+		new Effect.Scale(element, window.opera ? 0 : 1, {	
+			sync: true, 
+			scaleContent: false, 
+			scaleY: false,
+			scaleFrom: 100,
+			restoreAfterFinish: true
+		})
+		], Object.extend({ 
+			beforeSetup: function(effect){
+				effect.effects[0].element.makeClipping();
+			},
+			afterFinishInternal: function(effect){
+				effect.effects[0].element.undoClipping().hide();
+			}
+		}, arguments[1] || {})
+	);
+}
+
+
+
+/* from SlideUp */
+Effect.SlideLeftOut = function(element) {
+/*
+	SlideLeftOut needs to have the content of the element wrapped in a container element with fixed width
+	otherwise any text or images begin to wrap in stange ways!
+*/
+	element = $(element).cleanWhitespace();
+	return new Effect.Scale(element, window.opera ? 0 : 1,
+		Object.extend({ 
+			scaleContent: false, 
+			scaleY: false, 
+			scaleMode: 'box',
+			scaleFrom: 100,
+			restoreAfterFinish: true,
+			beforeStartInternal: function(effect) {
+				effect.element.makePositioned();
+				effect.element.down().makePositioned();
+				if(window.opera) effect.element.setStyle({left: ''});
+				effect.element.makeClipping().show();
+			},  
+			afterUpdateInternal: function(effect) {
+				effect.element.down().setStyle(
+					{right: (effect.dims[1] - effect.element.clientWidth) + 'px' }
+				);
+			},
+			afterFinishInternal: function(effect) {
+				effect.element.hide().undoClipping().undoPositioned();
+				effect.element.down().undoPositioned();
+			}
+		}, arguments[1] || {})
+	);
+}
+
+
+/* from SlideDown */
+Effect.SlideRightIn = function(element) {
+/*
+	SlideRightIn needs to have the content of the element wrapped in a container element with fixed width!
+*/
+	element = $(element).cleanWhitespace();
+	var elementDimensions = element.getDimensions();
+	return new Effect.Scale(element, 100, 
+		Object.extend({ 
+			scaleContent: false, 
+			scaleY: false, 
+			scaleFrom: window.opera ? 0 : 1,
+			scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+			restoreAfterFinish: true,
+			afterSetup: function(effect) {
+				effect.element.makePositioned();
+				effect.element.down().makePositioned();
+				if(window.opera) effect.element.setStyle({left: ''});
+				effect.element.makeClipping().setStyle({width: '0px'}).show(); 
+			},
+			afterUpdateInternal: function(effect) {
+				effect.element.down().setStyle({right: (effect.dims[1] - effect.element.clientWidth) + 'px' }); 
+			},
+			afterFinishInternal: function(effect) {
+				effect.element.undoClipping().undoPositioned();
+				effect.element.down().undoPositioned();
+			}
+		}, arguments[1] || {})
+	);
+}
+
+
+
+Effect.SlideUpIn = function(element) {
+/* 
+	SlideUpIn need to have the content of the element wrapped in a container element with fixed height!
+*/
+	element = $(element).cleanWhitespace();
+	var elementDimensions = element.getDimensions();
+	return new Effect.Parallel ( [
+		new Effect.Move(element, { y: -(element.getHeight()), sync: true, mode: 'relative' }),
+		new Effect.Scale(element, 100, 
+			Object.extend({
+				sync: true,
+				scaleContent: false,
+				scaleX: false,
+				scaleFrom: 0,
+				scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+				beforeSetup: function(effect) {
+					effect.element.hide();
+				},
+				afterSetup: function(effect) {
+					effect.element.makeClipping().setStyle({height: '0px'}).show();
+				},
+				afterFinishInternal: function(effect) {
+					effect.element.undoClipping();
+				}
+			}, arguments[1] || {})
+		)
+	], Object.extend({
+		afterSetup: function(effect) {
+			effect.effects[0].element.setStyle({top: elementDimensions.height + 'px' });
+		}
+	}, arguments[1] || {}));
+}
+
+
+Effect.SlideDownOut = function(element) {
+/* 
+	SlideDown need to have the content of the element wrapped in a container element with fixed height!
+*/
+	element = $(element).cleanWhitespace();
+	var elementDimensions = element.getDimensions();
+	return new Effect.Parallel ( [
+		new Effect.Move(element, { y: element.getHeight(), sync: true, mode: 'relative' }),
+		new Effect.Scale(element, 0,
+			Object.extend({ 
+				sync: true,
+				scaleContent: false,
+				scaleX: false,
+				restoreAfterFinish: true,
+				beforeSetup: function(effect){
+					effect.element.makeClipping();
+				},
+				afterFinishInternal: function(effect) {
+					effect.element.hide().undoClipping();
+				}
+			}, arguments[1] || {})
+		)
+	], Object.extend({
+	}, arguments[1] || {}));
+}
+
+
+
+/* this is the original SlideDown */
+Effect.SlideDownIn = function(element) {
+	element = $(element).cleanWhitespace();
+	// SlideDown need to have the content of the element wrapped in a container element with fixed height!
+	var oldInnerBottom = element.down().getStyle('bottom');
+	var elementDimensions = element.getDimensions();
+	return new Effect.Scale(element, 100, 
+		Object.extend({ 
+			scaleContent: false, 
+			scaleX: false, 
+			scaleFrom: window.opera ? 0 : 1,
+			scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+			restoreAfterFinish: true,
+			afterSetup: function(effect) {
+				effect.element.makePositioned();
+				effect.element.down().makePositioned();
+				if(window.opera) effect.element.setStyle({top: ''});
+				effect.element.makeClipping().setStyle({height: '0px'}).show(); 
+			},
+			afterUpdateInternal: function(effect) {
+				effect.element.down().setStyle({bottom:
+				(effect.dims[0] - effect.element.clientHeight) + 'px' }); 
+			},
+			afterFinishInternal: function(effect) {
+				effect.element.undoClipping().undoPositioned();
+				effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); 
+			}
+		}, arguments[1] || {})
+	);
+}
+
+/* this is the original SlideUp */
+Effect.SlideUpOut = function(element) {
+	element = $(element).cleanWhitespace();
+	var oldInnerBottom = element.down().getStyle('bottom');
+	return new Effect.Scale(element, window.opera ? 0 : 1,
+		Object.extend({ 
+			scaleContent: false, 
+			scaleX: false, 
+			scaleMode: 'box',
+			scaleFrom: 100,
+			restoreAfterFinish: true,
+			beforeStartInternal: function(effect) {
+				effect.element.makePositioned();
+				effect.element.down().makePositioned();
+				if(window.opera) effect.element.setStyle({top: ''});
+				effect.element.makeClipping().show();
+			},  
+			afterUpdateInternal: function(effect) {
+				effect.element.down().setStyle({bottom:
+				(effect.dims[0] - effect.element.clientHeight) + 'px' });
+			},
+			afterFinishInternal: function(effect) {
+				effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
+				effect.element.down().undoPositioned();
+			}
+		}, arguments[1] || {})
+	);
+}
+
+
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js
new file mode 100644
index 0000000..3e5543b
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/scriptaculous.js
@@ -0,0 +1,60 @@
+// script.aculo.us scriptaculous.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+var Scriptaculous = {
+  Version: '1.8.2',
+  require: function(libraryName) {
+    // inserting via DOM fails in Safari 2.0, so brute force approach
+    document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
+  },
+  REQUIRED_PROTOTYPE: '1.6.0.3',
+  load: function() {
+    function convertVersionString(versionString) {
+      var v = versionString.replace(/_.*|\./g, '');
+      v = parseInt(v + '0'.times(4-v.length));
+      return versionString.indexOf('_') > -1 ? v-1 : v;
+    }
+
+    if((typeof Prototype=='undefined') ||
+       (typeof Element == 'undefined') ||
+       (typeof Element.Methods=='undefined') ||
+       (convertVersionString(Prototype.Version) <
+        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
+       throw("script.aculo.us requires the Prototype JavaScript framework >= " +
+        Scriptaculous.REQUIRED_PROTOTYPE);
+
+    var js = /scriptaculous\.js(\?.*)?$/;
+    $$('head script[src]').findAll(function(s) {
+      return s.src.match(js);
+    }).each(function(s) {
+      var path = s.src.replace(js, ''),
+      includes = s.src.match(/\?.*load=([a-z,]*)/);
+      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
+       function(include) { Scriptaculous.require(path+include+'.js') });
+    });
+  }
+};
+
+Scriptaculous.load();
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js
new file mode 100644
index 0000000..40b7371
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/slider.js
@@ -0,0 +1,275 @@
+// script.aculo.us slider.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Marty Haught, Thomas Fuchs
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+if (!Control) var Control = { };
+
+// options:
+//  axis: 'vertical', or 'horizontal' (default)
+//
+// callbacks:
+//  onChange(value)
+//  onSlide(value)
+Control.Slider = Class.create({
+  initialize: function(handle, track, options) {
+    var slider = this;
+
+    if (Object.isArray(handle)) {
+      this.handles = handle.collect( function(e) { return $(e) });
+    } else {
+      this.handles = [$(handle)];
+    }
+
+    this.track   = $(track);
+    this.options = options || { };
+
+    this.axis      = this.options.axis || 'horizontal';
+    this.increment = this.options.increment || 1;
+    this.step      = parseInt(this.options.step || '1');
+    this.range     = this.options.range || $R(0,1);
+
+    this.value     = 0; // assure backwards compat
+    this.values    = this.handles.map( function() { return 0 });
+    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
+    this.options.startSpan = $(this.options.startSpan || null);
+    this.options.endSpan   = $(this.options.endSpan || null);
+
+    this.restricted = this.options.restricted || false;
+
+    this.maximum   = this.options.maximum || this.range.end;
+    this.minimum   = this.options.minimum || this.range.start;
+
+    // Will be used to align the handle onto the track, if necessary
+    this.alignX = parseInt(this.options.alignX || '0');
+    this.alignY = parseInt(this.options.alignY || '0');
+
+    this.trackLength = this.maximumOffset() - this.minimumOffset();
+
+    this.handleLength = this.isVertical() ?
+      (this.handles[0].offsetHeight != 0 ?
+        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) :
+      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth :
+        this.handles[0].style.width.replace(/px$/,""));
+
+    this.active   = false;
+    this.dragging = false;
+    this.disabled = false;
+
+    if (this.options.disabled) this.setDisabled();
+
+    // Allowed values array
+    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+    if (this.allowedValues) {
+      this.minimum = this.allowedValues.min();
+      this.maximum = this.allowedValues.max();
+    }
+
+    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
+    this.eventMouseMove = this.update.bindAsEventListener(this);
+
+    // Initialize handles in reverse (make sure first handle is active)
+    this.handles.each( function(h,i) {
+      i = slider.handles.length-1-i;
+      slider.setValue(parseFloat(
+        (Object.isArray(slider.options.sliderValue) ?
+          slider.options.sliderValue[i] : slider.options.sliderValue) ||
+         slider.range.start), i);
+      h.makePositioned().observe("mousedown", slider.eventMouseDown);
+    });
+
+    this.track.observe("mousedown", this.eventMouseDown);
+    document.observe("mouseup", this.eventMouseUp);
+    document.observe("mousemove", this.eventMouseMove);
+
+    this.initialized = true;
+  },
+  dispose: function() {
+    var slider = this;
+    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+    Event.stopObserving(document, "mouseup", this.eventMouseUp);
+    Event.stopObserving(document, "mousemove", this.eventMouseMove);
+    this.handles.each( function(h) {
+      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
+    });
+  },
+  setDisabled: function(){
+    this.disabled = true;
+  },
+  setEnabled: function(){
+    this.disabled = false;
+  },
+  getNearestValue: function(value){
+    if (this.allowedValues){
+      if (value >= this.allowedValues.max()) return(this.allowedValues.max());
+      if (value <= this.allowedValues.min()) return(this.allowedValues.min());
+
+      var offset = Math.abs(this.allowedValues[0] - value);
+      var newValue = this.allowedValues[0];
+      this.allowedValues.each( function(v) {
+        var currentOffset = Math.abs(v - value);
+        if (currentOffset <= offset){
+          newValue = v;
+          offset = currentOffset;
+        }
+      });
+      return newValue;
+    }
+    if (value > this.range.end) return this.range.end;
+    if (value < this.range.start) return this.range.start;
+    return value;
+  },
+  setValue: function(sliderValue, handleIdx){
+    if (!this.active) {
+      this.activeHandleIdx = handleIdx || 0;
+      this.activeHandle    = this.handles[this.activeHandleIdx];
+      this.updateStyles();
+    }
+    handleIdx = handleIdx || this.activeHandleIdx || 0;
+    if (this.initialized && this.restricted) {
+      if ((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+        sliderValue = this.values[handleIdx-1];
+      if ((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+        sliderValue = this.values[handleIdx+1];
+    }
+    sliderValue = this.getNearestValue(sliderValue);
+    this.values[handleIdx] = sliderValue;
+    this.value = this.values[0]; // assure backwards compat
+
+    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+      this.translateToPx(sliderValue);
+
+    this.drawSpans();
+    if (!this.dragging || !this.event) this.updateFinished();
+  },
+  setValueBy: function(delta, handleIdx) {
+    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+      handleIdx || this.activeHandleIdx || 0);
+  },
+  translateToPx: function(value) {
+    return Math.round(
+      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+      (value - this.range.start)) + "px";
+  },
+  translateToValue: function(offset) {
+    return ((offset/(this.trackLength-this.handleLength) *
+      (this.range.end-this.range.start)) + this.range.start);
+  },
+  getRange: function(range) {
+    var v = this.values.sortBy(Prototype.K);
+    range = range || 0;
+    return $R(v[range],v[range+1]);
+  },
+  minimumOffset: function(){
+    return(this.isVertical() ? this.alignY : this.alignX);
+  },
+  maximumOffset: function(){
+    return(this.isVertical() ?
+      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
+        this.track.style.height.replace(/px$/,"")) - this.alignY :
+      (this.track.offsetWidth != 0 ? this.track.offsetWidth :
+        this.track.style.width.replace(/px$/,"")) - this.alignX);
+  },
+  isVertical:  function(){
+    return (this.axis == 'vertical');
+  },
+  drawSpans: function() {
+    var slider = this;
+    if (this.spans)
+      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+    if (this.options.startSpan)
+      this.setSpan(this.options.startSpan,
+        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+    if (this.options.endSpan)
+      this.setSpan(this.options.endSpan,
+        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+  },
+  setSpan: function(span, range) {
+    if (this.isVertical()) {
+      span.style.top = this.translateToPx(range.start);
+      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+    } else {
+      span.style.left = this.translateToPx(range.start);
+      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+    }
+  },
+  updateStyles: function() {
+    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+    Element.addClassName(this.activeHandle, 'selected');
+  },
+  startDrag: function(event) {
+    if (Event.isLeftClick(event)) {
+      if (!this.disabled){
+        this.active = true;
+
+        var handle = Event.element(event);
+        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
+        var track = handle;
+        if (track==this.track) {
+          var offsets  = Position.cumulativeOffset(this.track);
+          this.event = event;
+          this.setValue(this.translateToValue(
+           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+          ));
+          var offsets  = Position.cumulativeOffset(this.activeHandle);
+          this.offsetX = (pointer[0] - offsets[0]);
+          this.offsetY = (pointer[1] - offsets[1]);
+        } else {
+          // find the handle (prevents issues with Safari)
+          while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+            handle = handle.parentNode;
+
+          if (this.handles.indexOf(handle)!=-1) {
+            this.activeHandle    = handle;
+            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+            this.updateStyles();
+
+            var offsets  = Position.cumulativeOffset(this.activeHandle);
+            this.offsetX = (pointer[0] - offsets[0]);
+            this.offsetY = (pointer[1] - offsets[1]);
+          }
+        }
+      }
+      Event.stop(event);
+    }
+  },
+  update: function(event) {
+   if (this.active) {
+      if (!this.dragging) this.dragging = true;
+      this.draw(event);
+      if (Prototype.Browser.WebKit) window.scrollBy(0,0);
+      Event.stop(event);
+   }
+  },
+  draw: function(event) {
+    var pointer = [Event.pointerX(event), Event.pointerY(event)];
+    var offsets = Position.cumulativeOffset(this.track);
+    pointer[0] -= this.offsetX + offsets[0];
+    pointer[1] -= this.offsetY + offsets[1];
+    this.event = event;
+    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+    if (this.initialized && this.options.onSlide)
+      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+  },
+  endDrag: function(event) {
+    if (this.active && this.dragging) {
+      this.finishDrag(event, true);
+      Event.stop(event);
+    }
+    this.active = false;
+    this.dragging = false;
+  },
+  finishDrag: function(event, success) {
+    this.active = false;
+    this.dragging = false;
+    this.updateFinished();
+  },
+  updateFinished: function() {
+    if (this.initialized && this.options.onChange)
+      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+    this.event = null;
+  }
+});
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js
new file mode 100644
index 0000000..e2487cd
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/sound.js
@@ -0,0 +1,55 @@
+// script.aculo.us sound.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//
+// Based on code created by Jules Gravinese (http://www.webveteran.com/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+Sound = {
+  tracks: {},
+  _enabled: true,
+  template:
+    new Template('<embed style="height:0" id="sound_#{track}_#{id}" src="#{url}" loop="false" autostart="true" hidden="true"/>'),
+  enable: function(){
+    Sound._enabled = true;
+  },
+  disable: function(){
+    Sound._enabled = false;
+  },
+  play: function(url){
+    if(!Sound._enabled) return;
+    var options = Object.extend({
+      track: 'global', url: url, replace: false
+    }, arguments[1] || {});
+
+    if(options.replace && this.tracks[options.track]) {
+      $R(0, this.tracks[options.track].id).each(function(id){
+        var sound = $('sound_'+options.track+'_'+id);
+        sound.Stop && sound.Stop();
+        sound.remove();
+      });
+      this.tracks[options.track] = null;
+    }
+
+    if(!this.tracks[options.track])
+      this.tracks[options.track] = { id: 0 };
+    else
+      this.tracks[options.track].id++;
+
+    options.id = this.tracks[options.track].id;
+    $$('body')[0].insert(
+      Prototype.Browser.IE ? new Element('bgsound',{
+        id: 'sound_'+options.track+'_'+options.id,
+        src: options.url, loop: 1, autostart: true
+      }) : Sound.template.evaluate(options));
+  }
+};
+
+if(Prototype.Browser.Gecko && navigator.userAgent.indexOf("Win") > 0){
+  if(navigator.plugins && $A(navigator.plugins).detect(function(p){ return p.name.indexOf('QuickTime') != -1 }))
+    Sound.template = new Template('<object id="sound_#{track}_#{id}" width="0" height="0" type="audio/mpeg" data="#{url}"/>');
+  else
+    Sound.play = function(){};
+}
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js b/abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js
new file mode 100644
index 0000000..446097e
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/scriptaculous/unittest.js
@@ -0,0 +1,568 @@
+// script.aculo.us unittest.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
+
+// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
+//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
+//           (c) 2005-2008 Michael Schuerig (http://www.schuerig.de/michael/)
+//
+// script.aculo.us is freely distributable under the terms of an MIT-style license.
+// For details, see the script.aculo.us web site: http://script.aculo.us/
+
+// experimental, Firefox-only
+Event.simulateMouse = function(element, eventName) {
+  var options = Object.extend({
+    pointerX: 0,
+    pointerY: 0,
+    buttons:  0,
+    ctrlKey:  false,
+    altKey:   false,
+    shiftKey: false,
+    metaKey:  false
+  }, arguments[2] || {});
+  var oEvent = document.createEvent("MouseEvents");
+  oEvent.initMouseEvent(eventName, true, true, document.defaultView, 
+    options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, 
+    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
+  
+  if(this.mark) Element.remove(this.mark);
+  this.mark = document.createElement('div');
+  this.mark.appendChild(document.createTextNode(" "));
+  document.body.appendChild(this.mark);
+  this.mark.style.position = 'absolute';
+  this.mark.style.top = options.pointerY + "px";
+  this.mark.style.left = options.pointerX + "px";
+  this.mark.style.width = "5px";
+  this.mark.style.height = "5px;";
+  this.mark.style.borderTop = "1px solid red;";
+  this.mark.style.borderLeft = "1px solid red;";
+  
+  if(this.step)
+    alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
+  
+  $(element).dispatchEvent(oEvent);
+};
+
+// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
+// You need to downgrade to 1.0.4 for now to get this working
+// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
+Event.simulateKey = function(element, eventName) {
+  var options = Object.extend({
+    ctrlKey: false,
+    altKey: false,
+    shiftKey: false,
+    metaKey: false,
+    keyCode: 0,
+    charCode: 0
+  }, arguments[2] || {});
+
+  var oEvent = document.createEvent("KeyEvents");
+  oEvent.initKeyEvent(eventName, true, true, window, 
+    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
+    options.keyCode, options.charCode );
+  $(element).dispatchEvent(oEvent);
+};
+
+Event.simulateKeys = function(element, command) {
+  for(var i=0; i<command.length; i++) {
+    Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
+  }
+};
+
+var Test = {};
+Test.Unit = {};
+
+// security exception workaround
+Test.Unit.inspect = Object.inspect;
+
+Test.Unit.Logger = Class.create();
+Test.Unit.Logger.prototype = {
+  initialize: function(log) {
+    this.log = $(log);
+    if (this.log) {
+      this._createLogTable();
+    }
+  },
+  start: function(testName) {
+    if (!this.log) return;
+    this.testName = testName;
+    this.lastLogLine = document.createElement('tr');
+    this.statusCell = document.createElement('td');
+    this.nameCell = document.createElement('td');
+    this.nameCell.className = "nameCell";
+    this.nameCell.appendChild(document.createTextNode(testName));
+    this.messageCell = document.createElement('td');
+    this.lastLogLine.appendChild(this.statusCell);
+    this.lastLogLine.appendChild(this.nameCell);
+    this.lastLogLine.appendChild(this.messageCell);
+    this.loglines.appendChild(this.lastLogLine);
+  },
+  finish: function(status, summary) {
+    if (!this.log) return;
+    this.lastLogLine.className = status;
+    this.statusCell.innerHTML = status;
+    this.messageCell.innerHTML = this._toHTML(summary);
+    this.addLinksToResults();
+  },
+  message: function(message) {
+    if (!this.log) return;
+    this.messageCell.innerHTML = this._toHTML(message);
+  },
+  summary: function(summary) {
+    if (!this.log) return;
+    this.logsummary.innerHTML = this._toHTML(summary);
+  },
+  _createLogTable: function() {
+    this.log.innerHTML =
+    '<div id="logsummary"></div>' +
+    '<table id="logtable">' +
+    '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
+    '<tbody id="loglines"></tbody>' +
+    '</table>';
+    this.logsummary = $('logsummary');
+    this.loglines = $('loglines');
+  },
+  _toHTML: function(txt) {
+    return txt.escapeHTML().replace(/\n/g,"<br/>");
+  },
+  addLinksToResults: function(){ 
+    $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
+      td.title = "Run only this test";
+      Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
+    });
+    $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
+      td.title = "Run all tests";
+      Event.observe(td, 'click', function(){ window.location.search = "";});
+    });
+  }
+};
+
+Test.Unit.Runner = Class.create();
+Test.Unit.Runner.prototype = {
+  initialize: function(testcases) {
+    this.options = Object.extend({
+      testLog: 'testlog'
+    }, arguments[1] || {});
+    this.options.resultsURL = this.parseResultsURLQueryParameter();
+    this.options.tests      = this.parseTestsQueryParameter();
+    if (this.options.testLog) {
+      this.options.testLog = $(this.options.testLog) || null;
+    }
+    if(this.options.tests) {
+      this.tests = [];
+      for(var i = 0; i < this.options.tests.length; i++) {
+        if(/^test/.test(this.options.tests[i])) {
+          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
+        }
+      }
+    } else {
+      if (this.options.test) {
+        this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
+      } else {
+        this.tests = [];
+        for(var testcase in testcases) {
+          if(/^test/.test(testcase)) {
+            this.tests.push(
+               new Test.Unit.Testcase(
+                 this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, 
+                 testcases[testcase], testcases["setup"], testcases["teardown"]
+               ));
+          }
+        }
+      }
+    }
+    this.currentTest = 0;
+    this.logger = new Test.Unit.Logger(this.options.testLog);
+    setTimeout(this.runTests.bind(this), 1000);
+  },
+  parseResultsURLQueryParameter: function() {
+    return window.location.search.parseQuery()["resultsURL"];
+  },
+  parseTestsQueryParameter: function(){
+    if (window.location.search.parseQuery()["tests"]){
+        return window.location.search.parseQuery()["tests"].split(',');
+    };
+  },
+  // Returns:
+  //  "ERROR" if there was an error,
+  //  "FAILURE" if there was a failure, or
+  //  "SUCCESS" if there was neither
+  getResult: function() {
+    var hasFailure = false;
+    for(var i=0;i<this.tests.length;i++) {
+      if (this.tests[i].errors > 0) {
+        return "ERROR";
+      }
+      if (this.tests[i].failures > 0) {
+        hasFailure = true;
+      }
+    }
+    if (hasFailure) {
+      return "FAILURE";
+    } else {
+      return "SUCCESS";
+    }
+  },
+  postResults: function() {
+    if (this.options.resultsURL) {
+      new Ajax.Request(this.options.resultsURL, 
+        { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
+    }
+  },
+  runTests: function() {
+    var test = this.tests[this.currentTest];
+    if (!test) {
+      // finished!
+      this.postResults();
+      this.logger.summary(this.summary());
+      return;
+    }
+    if(!test.isWaiting) {
+      this.logger.start(test.name);
+    }
+    test.run();
+    if(test.isWaiting) {
+      this.logger.message("Waiting for " + test.timeToWait + "ms");
+      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
+    } else {
+      this.logger.finish(test.status(), test.summary());
+      this.currentTest++;
+      // tail recursive, hopefully the browser will skip the stackframe
+      this.runTests();
+    }
+  },
+  summary: function() {
+    var assertions = 0;
+    var failures = 0;
+    var errors = 0;
+    var messages = [];
+    for(var i=0;i<this.tests.length;i++) {
+      assertions +=   this.tests[i].assertions;
+      failures   +=   this.tests[i].failures;
+      errors     +=   this.tests[i].errors;
+    }
+    return (
+      (this.options.context ? this.options.context + ': ': '') + 
+      this.tests.length + " tests, " + 
+      assertions + " assertions, " + 
+      failures   + " failures, " +
+      errors     + " errors");
+  }
+};
+
+Test.Unit.Assertions = Class.create();
+Test.Unit.Assertions.prototype = {
+  initialize: function() {
+    this.assertions = 0;
+    this.failures   = 0;
+    this.errors     = 0;
+    this.messages   = [];
+  },
+  summary: function() {
+    return (
+      this.assertions + " assertions, " + 
+      this.failures   + " failures, " +
+      this.errors     + " errors" + "\n" +
+      this.messages.join("\n"));
+  },
+  pass: function() {
+    this.assertions++;
+  },
+  fail: function(message) {
+    this.failures++;
+    this.messages.push("Failure: " + message);
+  },
+  info: function(message) {
+    this.messages.push("Info: " + message);
+  },
+  error: function(error) {
+    this.errors++;
+    this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
+  },
+  status: function() {
+    if (this.failures > 0) return 'failed';
+    if (this.errors > 0) return 'error';
+    return 'passed';
+  },
+  assert: function(expression) {
+    var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
+    try { expression ? this.pass() : 
+      this.fail(message); }
+    catch(e) { this.error(e); }
+  },
+  assertEqual: function(expected, actual) {
+    var message = arguments[2] || "assertEqual";
+    try { (expected == actual) ? this.pass() :
+      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
+        '", actual "' + Test.Unit.inspect(actual) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertInspect: function(expected, actual) {
+    var message = arguments[2] || "assertInspect";
+    try { (expected == actual.inspect()) ? this.pass() :
+      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
+        '", actual "' + Test.Unit.inspect(actual) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertEnumEqual: function(expected, actual) {
+    var message = arguments[2] || "assertEnumEqual";
+    try { $A(expected).length == $A(actual).length && 
+      expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
+        this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + 
+          ', actual ' + Test.Unit.inspect(actual)); }
+    catch(e) { this.error(e); }
+  },
+  assertNotEqual: function(expected, actual) {
+    var message = arguments[2] || "assertNotEqual";
+    try { (expected != actual) ? this.pass() : 
+      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertIdentical: function(expected, actual) { 
+    var message = arguments[2] || "assertIdentical"; 
+    try { (expected === actual) ? this.pass() : 
+      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
+        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
+    catch(e) { this.error(e); } 
+  },
+  assertNotIdentical: function(expected, actual) { 
+    var message = arguments[2] || "assertNotIdentical"; 
+    try { !(expected === actual) ? this.pass() : 
+      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
+        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
+    catch(e) { this.error(e); } 
+  },
+  assertNull: function(obj) {
+    var message = arguments[1] || 'assertNull';
+    try { (obj==null) ? this.pass() : 
+      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertMatch: function(expected, actual) {
+    var message = arguments[2] || 'assertMatch';
+    var regex = new RegExp(expected);
+    try { (regex.exec(actual)) ? this.pass() :
+      this.fail(message + ' : regex: "' +  Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertHidden: function(element) {
+    var message = arguments[1] || 'assertHidden';
+    this.assertEqual("none", element.style.display, message);
+  },
+  assertNotNull: function(object) {
+    var message = arguments[1] || 'assertNotNull';
+    this.assert(object != null, message);
+  },
+  assertType: function(expected, actual) {
+    var message = arguments[2] || 'assertType';
+    try { 
+      (actual.constructor == expected) ? this.pass() : 
+      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
+        '", actual "' + (actual.constructor) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertNotOfType: function(expected, actual) {
+    var message = arguments[2] || 'assertNotOfType';
+    try { 
+      (actual.constructor != expected) ? this.pass() : 
+      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
+        '", actual "' + (actual.constructor) + '"'); }
+    catch(e) { this.error(e); }
+  },
+  assertInstanceOf: function(expected, actual) {
+    var message = arguments[2] || 'assertInstanceOf';
+    try { 
+      (actual instanceof expected) ? this.pass() : 
+      this.fail(message + ": object was not an instance of the expected type"); }
+    catch(e) { this.error(e); } 
+  },
+  assertNotInstanceOf: function(expected, actual) {
+    var message = arguments[2] || 'assertNotInstanceOf';
+    try { 
+      !(actual instanceof expected) ? this.pass() : 
+      this.fail(message + ": object was an instance of the not expected type"); }
+    catch(e) { this.error(e); } 
+  },
+  assertRespondsTo: function(method, obj) {
+    var message = arguments[2] || 'assertRespondsTo';
+    try {
+      (obj[method] && typeof obj[method] == 'function') ? this.pass() : 
+      this.fail(message + ": object doesn't respond to [" + method + "]"); }
+    catch(e) { this.error(e); }
+  },
+  assertReturnsTrue: function(method, obj) {
+    var message = arguments[2] || 'assertReturnsTrue';
+    try {
+      var m = obj[method];
+      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+      m() ? this.pass() : 
+      this.fail(message + ": method returned false"); }
+    catch(e) { this.error(e); }
+  },
+  assertReturnsFalse: function(method, obj) {
+    var message = arguments[2] || 'assertReturnsFalse';
+    try {
+      var m = obj[method];
+      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
+      !m() ? this.pass() : 
+      this.fail(message + ": method returned true"); }
+    catch(e) { this.error(e); }
+  },
+  assertRaise: function(exceptionName, method) {
+    var message = arguments[2] || 'assertRaise';
+    try { 
+      method();
+      this.fail(message + ": exception expected but none was raised"); }
+    catch(e) {
+      ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); 
+    }
+  },
+  assertElementsMatch: function() {
+    var expressions = $A(arguments), elements = $A(expressions.shift());
+    if (elements.length != expressions.length) {
+      this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
+      return false;
+    }
+    elements.zip(expressions).all(function(pair, index) {
+      var element = $(pair.first()), expression = pair.last();
+      if (element.match(expression)) return true;
+      this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
+    }.bind(this)) && this.pass();
+  },
+  assertElementMatches: function(element, expression) {
+    this.assertElementsMatch([element], expression);
+  },
+  benchmark: function(operation, iterations) {
+    var startAt = new Date();
+    (iterations || 1).times(operation);
+    var timeTaken = ((new Date())-startAt);
+    this.info((arguments[2] || 'Operation') + ' finished ' + 
+       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+    return timeTaken;
+  },
+  _isVisible: function(element) {
+    element = $(element);
+    if(!element.parentNode) return true;
+    this.assertNotNull(element);
+    if(element.style && Element.getStyle(element, 'display') == 'none')
+      return false;
+    
+    return this._isVisible(element.parentNode);
+  },
+  assertNotVisible: function(element) {
+    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
+  },
+  assertVisible: function(element) {
+    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
+  },
+  benchmark: function(operation, iterations) {
+    var startAt = new Date();
+    (iterations || 1).times(operation);
+    var timeTaken = ((new Date())-startAt);
+    this.info((arguments[2] || 'Operation') + ' finished ' + 
+       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
+    return timeTaken;
+  }
+};
+
+Test.Unit.Testcase = Class.create();
+Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
+  initialize: function(name, test, setup, teardown) {
+    Test.Unit.Assertions.prototype.initialize.bind(this)();
+    this.name           = name;
+    
+    if(typeof test == 'string') {
+      test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
+      test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
+      this.test = function() {
+        eval('with(this){'+test+'}');
+      }
+    } else {
+      this.test = test || function() {};
+    }
+    
+    this.setup          = setup || function() {};
+    this.teardown       = teardown || function() {};
+    this.isWaiting      = false;
+    this.timeToWait     = 1000;
+  },
+  wait: function(time, nextPart) {
+    this.isWaiting = true;
+    this.test = nextPart;
+    this.timeToWait = time;
+  },
+  run: function() {
+    try {
+      try {
+        if (!this.isWaiting) this.setup.bind(this)();
+        this.isWaiting = false;
+        this.test.bind(this)();
+      } finally {
+        if(!this.isWaiting) {
+          this.teardown.bind(this)();
+        }
+      }
+    }
+    catch(e) { this.error(e); }
+  }
+});
+
+// *EXPERIMENTAL* BDD-style testing to please non-technical folk
+// This draws many ideas from RSpec http://rspec.rubyforge.org/
+
+Test.setupBDDExtensionMethods = function(){
+  var METHODMAP = {
+    shouldEqual:     'assertEqual',
+    shouldNotEqual:  'assertNotEqual',
+    shouldEqualEnum: 'assertEnumEqual',
+    shouldBeA:       'assertType',
+    shouldNotBeA:    'assertNotOfType',
+    shouldBeAn:      'assertType',
+    shouldNotBeAn:   'assertNotOfType',
+    shouldBeNull:    'assertNull',
+    shouldNotBeNull: 'assertNotNull',
+    
+    shouldBe:        'assertReturnsTrue',
+    shouldNotBe:     'assertReturnsFalse',
+    shouldRespondTo: 'assertRespondsTo'
+  };
+  var makeAssertion = function(assertion, args, object) { 
+   	this[assertion].apply(this,(args || []).concat([object]));
+  };
+  
+  Test.BDDMethods = {};   
+  $H(METHODMAP).each(function(pair) { 
+    Test.BDDMethods[pair.key] = function() { 
+       var args = $A(arguments); 
+       var scope = args.shift(); 
+       makeAssertion.apply(scope, [pair.value, args, this]); }; 
+  });
+  
+  [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
+    function(p){ Object.extend(p, Test.BDDMethods) }
+  );
+};
+
+Test.context = function(name, spec, log){
+  Test.setupBDDExtensionMethods();
+  
+  var compiledSpec = {};
+  var titles = {};
+  for(specName in spec) {
+    switch(specName){
+      case "setup":
+      case "teardown":
+        compiledSpec[specName] = spec[specName];
+        break;
+      default:
+        var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
+        var body = spec[specName].toString().split('\n').slice(1);
+        if(/^\{/.test(body[0])) body = body.slice(1);
+        body.pop();
+        body = body.map(function(statement){ 
+          return statement.strip()
+        });
+        compiledSpec[testName] = body.join('\n');
+        titles[testName] = specName;
+    }
+  }
+  new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
+};
\ No newline at end of file
diff --git a/abs/core/local-website/htdocs/linhes/js/table_sort.js b/abs/core/local-website/htdocs/linhes/js/table_sort.js
new file mode 100644
index 0000000..26208b1
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/table_sort.js
@@ -0,0 +1,569 @@
+/**
+ * Javascript Table sorting lib
+ *
+ * @url         $URL: http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins/mythweb/js/table_sort.js $
+ * @date        $Date: 2008-06-22 02:21:08 +0000 (Sun, 22 Jun 2008) $
+ * @version     $Revision: 17560 $
+ * @author      $Author: kormoc $
+ * @license     LGPL
+ *
+/**/
+
+document.observe('dom:loaded', function () {
+// Not a dom v3 supported browser?
+    if (typeof document.body.textContent == 'undefined') {
+    // Let's work around for IE
+        if (typeof document.body.innerText != 'undefined') {
+            HTMLElement.prototype.__defineGetter__('textContent', function () {
+                return this.innerText;
+            });
+        }
+    // And now Safari
+        else {
+            HTMLElement.prototype.__defineGetter__('textContent', function () {
+                return this.innerHTML;
+            });
+        }
+    }
+});
+
+var SortableTables = {
+    tables:                     [],
+    callback_presort:           null,
+    callback_postsort:          null,
+    callback_preload:           null,
+    callback_postload:          null,
+
+    currently_sorting_table:    null,
+
+    start:                      function () {
+        $$('table[sortable=true]').each(SortableTables.setupTable);
+    },
+
+    setupTable:                 function (table) {
+        if (this.callback_preload)
+            this.callback_preload(table);
+    // We require a unique id
+        if (table.id == '' || ( this.tables && this.tables[table.id] ))
+            return;
+        SortableTables.tables[table.id] = new SortableTable(table);
+        if (this.callback_postload)
+            this.callback_postload(table);
+    },
+
+    sort:                       function (table_id, header_index) {
+    // 25% speed boost on large tables (900 rows+) by not allowing multiple sorts at the same time.
+        if (this.currently_sorting_table != null)
+            return;
+        if (this.callback_presort)
+            this.callback_presort(table_id, heder_index);
+        if (this.tables[table_id].callback_presort)
+            this.tables[table_id].callback_presort(table_id, header_index);
+        this.tables[table_id].sort(header_index);
+        if (this.tables[table_id].callback_postsort)
+            this.tables[table_id].callback_postsort(table_id, header_index);
+        if (this.callback_postsort)
+            this.callback_postsort(table_id, header_index);
+    }
+};
+
+document.observe('dom:loaded', SortableTables.start);
+
+var SortableTable = Class.create({
+    initialize:                 function (table) {
+    // Class vars
+        this.table                  = null;
+        this.header                 = null;
+        this.body                   = null;
+        this.rows                   = null;
+
+        this.cache_sort_functions   = new Array();
+        this.cache_has_attribute    = new Array();
+        this.cache_sorted_index     = null;
+        this.cache_previous_sorts   = new Array();
+        this.cache_sort_hash        = new Array();
+        this.cache_sort_direction   = false;
+
+        this.multisort              = false;
+        this.zebra_stripe           = false;
+
+        this.sort_cell_index        = null;
+        this.sort_header_index      = null;
+
+        this.callback_presort       = null;
+        this.callback_postsort      = null;
+
+    // Make sure the table is valid for sorting
+        if (table.tBodies[0].rows.length < 2)
+            return;
+
+        this.table  = $(table);
+        this.header = this.table.tHead.rows[table.tHead.rows.length-1];
+        this.body   = this.table.tBodies[0]
+        this.rows   = this.body.rows;
+
+        this.multisort = this.table.readAttribute('multisort');
+
+        if (this.rows[0].className.match(/even/) || this.rows[0].className.match(/odd/))
+            this.zebra_stripe = true;
+
+    // Setup the header with links
+        var cells           = this.header.cells;
+        var cells_count     = cells.length;
+        var cell_coloffset  = 0;
+        for (var i = 0; i < cells_count; i++) {
+            var cell                = cells[i];
+            var cell_colspan        = 1;
+            var cell_index          = i + cell_coloffset;
+            var header_index        = i;
+            this.cache_sort_hash[i] = cell_index;
+        // Handle colspans...
+            if (cell.hasAttribute('colspan'))
+                cell_coloffset += cell.readAttribute('colspan')-1;
+
+            if (cell.readAttribute('sortable') == 'false')
+                continue;
+        // This should fix a bug with safari (as of version 2.0.2 at least), which does not understand cellIndex correctly
+            cell.setAttribute('onclick','SortableTables.sort("'+this.table.id+'","'+header_index+'");return false;');
+            cell.addClassName('link');
+        // Heat the cache...
+            this.cache_has_attribute[cell_index]   = false;
+        // Precache the sort function...
+            this.cache_sort_functions[cell_index]  = this.getSortFunction(header_index, cell_index);
+        }
+    },
+
+    getSortFunction:            function (header_index) {
+        var cell_index = this.cache_sort_hash[header_index];
+    // Default sort function to use
+        var sort_function = 'sortCaseInsensitive';
+    // Do we have sort_values?
+        this.cache_has_attribute[header_index] = this.rows[0].cells[cell_index].hasAttribute('sort_value');
+        if (this.header.cells[header_index].hasAttribute('sort_hint'))
+            sort_function = this.header.cells[header_index].readAttribute('sort_hint');
+        else {
+            if (this.cache_has_attribute[header_index])
+                var value = this.rows[0].cells[cell_index].readAttribute('sort_value');
+            else
+                var value = this.rows[0].cells[cell_index].textContent;
+
+        // Figure out the function to use...
+            if (value.match(/^\w+ \d+[,] \d\d\d\d/))
+                sort_function = 'sortEnglishDate';
+            else if (value.match(/^\w+[,] \w+ \d+[,] \d+[:]\d+ \w+$/))
+                sort_function = 'sortLongEnglishDate';
+            else if (value.match(/^\d+ days$/) || value=='Today' || value=='Tomorrow' || value=='Yesterday')
+                sort_function = 'sortExpiration';
+            else if (value.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/))
+                sort_function = 'sortDate';
+            else if (value.match(/^\d\d[\/-]\d\d[\/-]\d\d$/))
+                sort_function = 'sortDate';
+            else if (value.match(/^\W+ \d+$/))
+                sort_function = 'sortMonthDay';
+            else if (value.match(/^[\d\.]+[%]*$/))
+                sort_function = 'sortNumeric';
+            else if (value.match(/^[�$]/))
+                sort_function = 'sortCurrency';
+        }
+        return eval('SortableTableSorts.'+sort_function);
+    },
+
+    sort:                       function (header_index) {
+        this.sort_header_index = header_index;
+        this.sort_cell_index   = this.cache_sort_hash[header_index]
+
+    // Spawn into an array
+        var row_length = this.rows.length;
+        var rows       = new Array();
+        for (var i=0; i<row_length; i++)
+            rows.push(this.rows[i]);
+
+    // Check to see if we're already sorted, and if so, just invert it
+        if (this.cache_previous_sorts.last() == this.sort_cell_index)
+            rows.reverse();
+        else {
+            SortableTables.currently_sorting_table = this;
+            var sort_function = SortableTables.tables[this.table.id].doSort;
+            rows.sort(sort_function);
+            SortableTables.currently_sorting_table = null;
+        }
+
+    // Move back to the table...
+        for (var i=0; i<row_length; i++)
+            this.body.appendChild(rows[i]);
+
+    // Setup the arrows...
+        this.doHeaderArrows();
+    // Fix any zebra striping
+        this.fixZebraStripes();
+    // Remove the current index fromt he previous sorts and make sure it's uniq
+        this.cache_previous_sorts = this.cache_previous_sorts.without(this.sort_cell_index).uniq();
+    // Add in the sorted col
+        this.cache_previous_sorts.push(this.sort_cell_index);
+    },
+
+    doSort:                     function (a, b, cell_index) {
+    // Are we overriding the cell index (for multisort)
+        if (!cell_index)
+            cell_index = SortableTables.currently_sorting_table.sort_cell_index;
+
+    // Use the sort hint?
+        if (SortableTables.currently_sorting_table.cache_has_attribute[cell_index]) {
+            var value_a = a.cells[cell_index].readAttribute('sort_value');
+            var value_b = b.cells[cell_index].readAttribute('sort_value');
+        }
+        else {
+            var value_a = a.cells[cell_index].textContent;
+            var value_b = b.cells[cell_index].textContent;
+        }
+
+        if ( value_a != value_b)
+            var comparison = SortableTables.currently_sorting_table.cache_sort_functions[cell_index](value_a,value_b);
+        else
+            var comparison = 0;
+
+        if (SortableTables.currently_sorting_table.multisort && !comparison && SortableTables.currently_sorting_table.cache_previous_sorts.length) {
+            var multisort_index = SortableTables.currently_sorting_table.cache_previous_sorts.pop();
+            comparison          = SortableTables.currently_sorting_table.doSort(a, b, multisort_index);
+            SortableTables.currently_sorting_table.cache_previous_sorts.push(multisort_index);
+        }
+        return comparison;
+    },
+
+    doHeaderArrows:             function () {
+    // Remove any current span arrows
+        $$('#'+this.table.id+' thead span.sortArrow').each(function (span) {span.update('&nbsp;&nbsp;&nbsp;');});
+        var arrow_span = this.header.cells[this.sort_header_index].select('span.sortArrow').reduce();
+        if (!arrow_span) {
+            arrow_span = new Element('span', { 'class': 'sortArrow'});
+            this.header.cells[this.sort_header_index].insert(arrow_span);
+        }
+        if (this.cache_previous_sorts.last() == this.sort_cell_index && this.cache_sort_direction) {
+            arrow_span.update('&nbsp;&nbsp;&uarr;');
+            this.cache_sort_direction = false;
+        }
+        else {
+            arrow_span.update('&nbsp;&nbsp;&darr;');
+            this.cache_sort_direction = true;
+        }
+    },
+
+    fixZebraStripes:            function () {
+        if (!this.zebra_stripe)
+            return;
+        var length = this.rows.length;
+        var even   = false;
+        for (var i=0; i<length; i++) {
+            var row = this.rows[i];
+            if (even)
+                row.className = row.className.replace(/odd/g, 'even');
+            else
+                row.className = row.className.replace(/even/g, 'odd');
+            even = !even;
+        }
+    }
+});
+
+var SortableTableSorts = {
+// Sort: DD-MM-YY or DD-MM-YYYY
+// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+    sortDate:                   function (a,b) {
+        if (a.length == 10)
+            dt1 = a.substr(6,4)+a.substr(3,2)+a.substr(0,2);
+        else {
+            yr = a.substr(6,2);
+            if (parseInt(yr) < 50)
+                 yr = '20'+yr;
+            else
+                yr = '19'+yr;
+            dt1 = yr+a.substr(3,2)+a.substr(0,2);
+        }
+        if (b.length == 10)
+            dt2 = b.substr(6,4)+b.substr(3,2)+b.substr(0,2);
+        else {
+            yr = b.substr(6,2);
+            if (parseInt(yr) < 50)
+                 yr = '20'+yr;
+            else
+                yr = '19'+yr;
+            dt2 = yr+b.substr(3,2)+b.substr(0,2);
+        }
+        if (dt1==dt2)
+            return 0;
+        if (dt1<dt2)
+            return -1;
+        return 1;
+    },
+
+// Sort MM-DD-YY or MM-DD-YYYY
+// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+    sortDateUs:                 function (a,b) {
+        if (a.length == 10)
+            dt1 = a.substr(6,4)+a.substr(0,2)+a.substr(3,2);
+        else {
+            yr = a.substr(6,2);
+            if (parseInt(yr) < 50)
+                 yr = '20'+yr;
+            else
+                yr = '19'+yr;
+            dt1 = yr+a.substr(0,2)+a.substr(3,2);
+        }
+        if (b.length == 10)
+            dt2 = b.substr(6,4)+b.substr(0,2)+b.substr(3,2);
+        else {
+            yr = b.substr(6,2);
+            if (parseInt(yr) < 50)
+                 yr = '20'+yr;
+            else
+                yr = '19'+yr;
+            dt2 = yr+b.substr(0,2)+b.substr(3,2);
+        }
+        if (dt1 == dt2)
+            return 0;
+        if (dt1 < dt2)
+            return -1;
+        return 1;
+    },
+
+// This function handles Mon day, year sorting
+// Falls back to alpha-comparison, if date-comparison can't make a decision.
+    sortEnglishDate:            function (a,b) {
+        if (a == 'none' || a.length == 0)
+            return -1;
+        if (b == 'none' || b.length == 0)
+            return 1;
+
+        var aa_mon  = SortableTableSorts.englishMonthToNumber (a.substr(0,3));
+        aa          = a.substr(4);
+        var aa_year = parseFloat(aa.substr(aa.length-4));
+        var aa_day  = parseFloat(aa.substr(0, aa.length-6));
+
+        var bb_mon  = SortableTableSorts.englishMonthToNumber (b.substr(0,3));
+        bb          = b.substr(4);
+        var bb_year = parseFloat(bb.substr(bb.length-4));
+        var bb_day  = parseFloat(bb.substr(0, bb.length-6));
+        if (!aa_year || !aa_mon || !aa_day || !bb_year || !bb_mon || !bb_day)
+            return SortableTableSorts.sortCaseSensitive(a,b);
+        if (aa_year < bb_year)
+            return -1;
+        if (aa_year > bb_year)
+            return 1;
+        if (aa_mon < bb_mon)
+            return -1;
+        if (aa_mon > bb_mon)
+            return 1;
+        if (aa_day < bb_day)
+            return -1;
+        return 1;
+    },
+
+// This function handles Mon day, year sorting
+// Jan 21, 2006
+    sortEnglishDateInvert:      function (a,b) {
+        return SortableTableSorts.sortEnglishDate(b,a);
+    },
+
+// This function sorts based on month day format
+// Jan 21
+    sortMonthDay:               function (a, b) {
+        if (a.length == 0)
+            return -1;
+        if (b.length == 0)
+            return 1;
+
+        var a_mon  = SortableTableSorts.englishMonthToNumber (a.substr(0,3));
+        a          = parseFloat(a.substr(4));
+        var b_mon  = SortableTableSorts.englishMonthToNumber (b.substr(0,3));
+        b          = parseFloat(b.substr(4));
+        if (a_mon < b_mon)
+            return -1;
+        if (a_mon > b_mon)
+            return 1;
+        if (a < b)
+            return -1;
+        return 1;
+    },
+
+// This function handles DDD, Mon Day, Hour:Min A/PM
+// we also assume it's the same year, as we can't figure it out otherwise
+    sortLongEnglishDate:        function (a,b) {
+        var aa = a.substr(5).split(/,/);
+        var bb = b.substr(5).split(/,/);
+        var aatmp = aa[1].split(/:/);
+        var aa_hour = aatmp[0];
+        var aa_min  = aatmp[1].substr(0,2);
+        if (aatmp[1].substr(3).toLowerCase() == 'pm')
+            aa_hour += 12;
+        var bbtmp = bb[1].split(/:/);
+        var bb_hour = bbtmp[0];
+        var bb_min  = bbtmp[1].substr(0,2);
+        if (bbtmp[1].substr(3).toLowerCase() == 'pm')
+            bb_hour += 12;
+        aa = aa[0];
+        bb = bb[0];
+        if (aa == bb)
+            return 0;
+        if (aa == 'none' || aa.length == 0)
+            return -1;
+        if (bb == 'none' || bb.length == 0)
+            return 1;
+        var aa_mon  = SortableTableSorts.englishMonthToNumber (aa.substr(0,3));
+        var aa_day  = aa.substr(4);
+        var bb_mon  = SortableTableSorts.englishMonthToNumber (bb.substr(0,3));
+        var bb_day  = bb.substr(4);
+        if (!aa_mon || !aa_day || !bb_mon || !bb_day)
+            return -1;
+        if (aa_mon < bb_mon)
+            return -1;
+        if (aa_mon > bb_mon)
+            return 1;
+        if (aa_day < bb_day)
+            return -1;
+        if (aa_day > bb_day)
+            return 1;
+        if (aa_hour < bb_hour)
+            return -1;
+        if (aa_hour > bb_hour)
+            return 1;
+        if (aa_minute < bb_minute)
+            return -1;
+        return 1;
+    },
+
+// This function sorts expiration dates, such as in the quote list
+    sortExpiration:             function (a,b) {
+        a = a.split(/ /)[0];
+        b = b.split(/ /)[0];
+        switch (a) {
+            case 'Yesterday':   a = -1; break;
+            case 'Today':       a =  0; break;
+            case 'Tomorrow':    a =  1; break;
+            default:            a = parseFloat(a);
+        }
+        switch (b) {
+            case 'Yesterday':   b = -1; break;
+            case 'Today':       b =  0; break;
+            case 'Tomorrow':    b =  1; break;
+            default:            b = parseFloat(b);
+        }
+
+        if (a > b)
+            return 1;
+        if (a < b)
+            return -1;
+        return 0;
+    },
+
+    englishMonthToNumber:       function (mon) {
+        switch (mon.toLowerCase()) {
+            case 'jan' : return 1;
+            case 'feb' : return 2;
+            case 'mar' : return 3;
+            case 'apr' : return 4;
+            case 'may' : return 5;
+            case 'jun' : return 6;
+            case 'jul' : return 7;
+            case 'aug' : return 8;
+            case 'sep' : return 9;
+            case 'oct' : return 10;
+            case 'nov' : return 11;
+            case 'dec' : return 12;
+        }
+        return 0;
+    },
+
+    sortCurrency:               function (a,b) {
+        return parseFloat(a.replace(/[^0-9.]/g,'')) - parseFloat(b.replace(/[^0-9.]/g,''));
+    },
+
+// A non number or a blank is always less then a number.
+    sortNumeric:                function (a,b) {
+        b = parseFloat(b);
+        if (isNaN(b))
+            return 1;
+        a = parseFloat(a);
+        if (isNaN(a))
+            return -1;
+        return a-b;
+    },
+
+// A non number or a blank is always less then a number.
+    sortNumericInvert:          function (a,b) {
+        return SortableTableSorts.sortNumeric(b,a);
+    },
+
+    sortCaseInsensitive:        function (a,b) {
+        a = a.toLowerCase();
+        b = b.toLowerCase();
+
+        if (a > b)
+            return 1;
+        if (a < b)
+            return -1;
+        return 0;
+    },
+
+    sortCaseSensitive:          function (a,b) {
+        if (a > b)
+            return 1;
+        if (a < b)
+            return -1;
+        return 0;
+    },
+
+    sortMythwebPlayTime:        function (a,b) {
+        if (a == b)
+            return 0;
+
+        var a_hrs = a.match(/([0-9]*) hr/);
+        var a_min = a.match(/([0-9]*) min/);
+        var a_val = 0;
+        if (a_hrs)
+            a_val += a_hrs[1]*60;
+        if (a_min)
+            a_val += a_min[1]*1;
+
+        var b_hrs = b.match(/([0-9]*) hr/);
+        var b_min = b.match(/([0-9]*) min/);
+        var b_val = 0;
+        if (b_hrs)
+            b_val += b_hrs[1]*60;
+        if (b_min)
+            b_val += b_min[1]*1;
+
+        return SortableTableSorts.sortNumeric(a_val, b_val);
+    },
+
+    sortMythwebChannel:         function (a,b) {
+        if (a == b)
+            return 0;
+        var a_channel = a.match(/([0-9]*) -/);
+
+        if (a_channel)
+            a_channel = a_channel[1];
+        else
+            a_channel = 0;
+
+        var b_channel = b.match(/([0-9]*) -/);
+
+        if (b_channel)
+            b_channel = b_channel[1];
+        else
+            b_channel = 0;
+
+        return SortableTableSorts.sortNumeric(a_channel, b_channel);
+    },
+
+// Some compat wrappers
+    date_us:                    function (a,b) {
+        return SortableTableSorts.sortDateUs(a,b);
+    },
+
+    numeric:                    function (a,b) {
+        return SortableTableSorts.sortNumeric(a,b);
+    },
+
+    numeric_invert:             function (a,b) {
+        return SortableTableSorts.sortNumericInvert(a,b);
+    }
+};
diff --git a/abs/core/local-website/htdocs/linhes/js/utils.js b/abs/core/local-website/htdocs/linhes/js/utils.js
new file mode 100644
index 0000000..e6c0605
--- /dev/null
+++ b/abs/core/local-website/htdocs/linhes/js/utils.js
@@ -0,0 +1,173 @@
+/**
+ * A random assortment of javascript utility routines
+ *
+ * @url         $URL: http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins/mythweb/js/utils.js $
+ * @date        $Date: 2008-02-22 22:15:51 +0000 (Fri, 22 Feb 2008) $
+ * @version     $Revision: 16207 $
+ * @author      $Author: xris $
+ * @license     LGPL
+ *
+/**/
+
+// For some reason, calling "value" from within onclick doesn't work
+// Seems to be a name conflict somewhere, but I can't find it.
+    function set_field(id, val) {
+        value(id, val);
+    }
+
+// Pass in value to change, otherwise it returns the value of the "e" element
+    function value(e, new_value) {
+        e = $(e);
+        if (!e)
+            return '';
+    // A <select>
+        if (e.options)
+            return value(e.options[e.selectedIndex]);
+    // Just an html element?  (or in IE, an option element with no value="" specified)
+        else if (e.value == null || e.tagName.toLowerCase() == 'option' && e.value == '') {
+            if (new_value != null)
+                e.innerHTML = new_value;
+            return e.innerHTML;
+        }
+    // Form field
+        if (new_value != null)
+            e.value = new_value;
+        return e.value;
+    }
+
+// Overwrite the href attribute of all <a> tags with a js_href attribute
+    Event.observe(window, 'load', add_js_attributes);
+    function add_js_attributes() {
+    // Get all links in this form
+        var links = $$('a');
+        for (var i=0; i<links.length; i++) {
+        // js_href
+            var js_href = links[i].getAttribute('js_href');
+            if (js_href && js_href.length)
+                links[i].href = js_href;
+        }
+    }
+
+// Image Preloader
+    var img_on  = new Array();
+    var img_off = new Array();
+    function preload_image(id, on, off) {
+        img_on[id]      = new Image();
+        img_on[id].src  = on;
+        if (off) {
+            img_off[id]     = new Image();
+            img_off[id].src = off;
+        }
+    }
+
+// Functions to swap on/off states of images
+    function on(which) {
+        var img = $(which);
+        img.src=img_on[which].src;
+    }
+    function off(which) {
+        var img = $(which);
+        img.src=img_off[which].src;
+    }
+
+// Submit a form
+    function submit_form(newvar, val, form, confirm_str) {
+    // Confirm?
+        if (confirm_str && !confirm(confirm_str))
+            return;
+    // Find the form we want to submit
+        form = $(form ? form : 'form');
+        if (!form)
+            form = document.form ? document.form : document.forms[0];
+    // Create a new variable?
+        if (newvar) {
+            var hidden = document.createElement('input');
+            hidden.type  = 'hidden';
+            hidden.name  = newvar;
+            hidden.value = val != null ? val : 1;
+            form.appendChild(hidden);
+        }
+    // Submit
+        form.submit();
+    }
+
+// Check/uncheck a checkbox
+    function toggle_checkbox(id, check) {
+        var e = $(id);
+        if (check)
+            e.checked = true;
+        else if (check != null)
+            e.checked = false;
+        else
+            e.checked = e.checked ? false : true;
+    }
+
+// Change the help text
+    function help_text(text) {
+    // Set the text
+        $('help_text').innerHTML = text;
+    // Toggle the regions
+        $('help_text_default').toggle();
+        $('help_text').toggle();
+    }
+
+
+// Return a time in hours and minutes
+    function nice_length(mylength, rx_hr, rx_hrs, rx_min, rx_mins) {
+        var mins  = Math.round((mylength % 3600) / 60);
+        var hours = Math.round(mylength / 3600);
+        var ret;
+        if (hours) {
+            if (hours > 1)
+                ret = rx_hrs.replace(/\$1/, hours);
+            else
+                ret = rx_hr.replace(/\$1/, hours);
+        }
+        else
+            ret = '';
+        if (mins > 0) {
+            if (ret.length)
+                ret = ret + ' ';
+            if (mins > 1)
+                ret = ret + rx_mins.replace(/\$1/, mins);
+            else
+                ret = ret + rx_min.replace(/\$1/, mins);
+        }
+        return ret;
+    }
+
+// Return a human-readable filesize
+    function nice_filesize(size) {
+        var kb = 1024;         // Kilobyte
+        var mb = 1024 * kb;    // Megabyte
+        var gb = 1024 * mb;    // Gigabyte
+        var tb = 1024 * gb;    // Terabyte
+    //  If it's less than a kb we just return the size
+        if (size < kb)
+            return size + ' B';
+    // Otherwise we keep going until the size is in the appropriate measurement range.
+        else if (size < mb)
+            return Math.round(size/kb) + ' KB';
+        else if (size < gb)
+            return Math.round(size/mb) + ' MB';
+        else if (size < tb)
+            return Math.round(size/gb) + ' GB';
+        else
+            return Math.round(size/tb) + ' TB';
+    }
+
+// The routines to allow a small ajax request counter...
+    var pending_ajax_requests = 0;
+
+    function ajax_add_request() {
+        pending_ajax_requests += 1;
+        $('ajax_num_requests').innerHTML = pending_ajax_requests;
+        $('ajax_working').removeClassName('hidden');
+    }
+
+    function ajax_remove_request() {
+        pending_ajax_requests -= 1;
+        $('ajax_num_requests').innerHTML = pending_ajax_requests;
+        if (pending_ajax_requests == 0)
+            $('ajax_working').addClassName('hidden');
+    }
diff --git a/abs/core/local-website/htdocs/rrd/index.html b/abs/core/local-website/htdocs/rrd/index.html
index 5f595b2..f6a7135 100644
--- a/abs/core/local-website/htdocs/rrd/index.html
+++ b/abs/core/local-website/htdocs/rrd/index.html
@@ -3,7 +3,7 @@
 <head>
   <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
   <meta content="Cecil Watson" name="author">
-  <title>KnoppMyth R5.5</title>
+  <title>LinHES</title>
   <!-- Generated by: /usr/local/bin/rrd_Configure.sh -->
   <link href="/KnoppMyth.css" rel="stylesheet" type="text/css" />
   <p align="center"><a href="http://www.mysettopbox.tv">
@@ -13,7 +13,7 @@
     <tbody>
       <tr>
 	<td style="vertical-align: top;">
-	  <p class="headerimage" align="center"><b>KnoppMyth R5.5</b></p>
+	  <p class="headerimage" align="center"><b>The Linux Home Entertainment System Release 6</b></p>
     <p align=center>
 <font size="+2">RRD Tool</font><br>
 <font size="+1">Is <font color="#CC0000">disabled</font>
diff --git a/abs/core/local-website/htdocs/wap.html b/abs/core/local-website/htdocs/wap.html
new file mode 100755
index 0000000..72e6264
--- /dev/null
+++ b/abs/core/local-website/htdocs/wap.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<html>
+<head>
+    <base href="/linhes/">
+    <title>Welcome to LinHES R6!</title>
+
+    <meta http-equiv="content-type" content="text/html; charset=utf-8">
+    <meta name="robots" content="noindex, nofollow">
+
+    <script type="text/javascript" src="js/prototype.js"></script>
+    <script type="text/javascript" src="js/prototip/prototip.js"></script>
+    <link rel="stylesheet" type="text/css" href="js/prototip/prototip.css">
+
+    <script type="text/javascript" src="js/utils.js"></script>
+    <script type="text/javascript" src="js/AC_OETags.js"></script>
+    <script type="text/javascript" src="js/table_sort.js"></script>
+
+    <link rel="stylesheet" type="text/css" href="/linhes/wap/style.css">
+    <link rel="stylesheet" type="text/css" href="/linhes/wap/header.css">
+    <link rel="stylesheet" type="text/css" href="/linhes/wap/menus.css">
+    <link rel="stylesheet" type="text/css" href="/linhes/wap/programming.css">
+
+    <link rel="stylesheet" type="text/css" href="/linhes/wap/welcome.css">
+</head>
+
+<body>
+<div id="page_header" style="position:relative; text-align:center;">
+    <div id="logo_box">
+        <a id="LinHES_logo" href="http://linhes.org/">
+        <img src="/header.png" alt="Tux with a Remote" class="body">
+        </a>
+    </div>
+</div>
+
+<table width="100%" border="0" cellspacing="2" cellpadding="0">
+<tr>
+    <td colspan="2" class="menu menu_border_t menu_border_b">
+        <table class="body" width="100%" border="0" cellspacing="2" cellpadding="2">
+            <td align="center">
+                <a href="http://linhes.org" <b>The Linux Home Entertainment System Release 6</b></a>
+            </td>
+        </table>
+    </td>
+</tr>
+</table>
+
+
+<script type="text/javascript">
+<!--
+
+    var visible_module = 'media';
+    function show_module_info(module) {
+        if (visible_module == module)
+            return;
+    // Change the outline on the list item
+        $('module_'+ visible_module).removeClassName('selected');
+        $('module_'+ module).addClassName('selected');
+    // Show and hide the appropriate info boxes
+        $('info_' + visible_module).hide();
+        $('info_' + visible_module).addClassName('hidden');
+        $('info_' + module).show();
+        $('info_' + module).removeClassName('hidden');
+    // Keep track of what's visible now
+        visible_module = module;
+    }
+
+// -->
+</script>
+
+<div id="modules" class="clearfix">
+
+    <div id="module_names">
+    <ul>
+        <li id="module_media" class="selected" onmouseover="show_module_info('media')">Media</li>
+        <li id="module_status" onmouseover="show_module_info('status')">Status</li>
+        <li id="module_help" onmouseover="show_module_info('help')">Help</li>
+    </ul>
+    </div>
+
+    <div id="module_info">
+        <div id="info_media">
+            <ul>
+                <li><a href="/mythweb/">MythWeb</a> - MythWeb provides a frontend for scheduling and managing recordings on your MythBox from a web browser.<br></li>
+                <li><a href="/remote/index.html">MythTV Web Virtual Remote</a> - A web based virtual remote control for MythTV.  For this to work, you must enable "Network Remote Control interface" in Service Menu -> MythTV Configuration -> Setup -> General -> Remote Control.<br></li>
+                <li><a href="/ipodfeed/feed.php">iPod Feeds</a> - Transcodes ready for the iPod. If you have no recordings, you will see a warning issued from PHP.<br></li>
+                <li><a href="/ipodfeed/m2iweb.php">Delete iPod Transcodes</a><br></li>
+                <li><a href="/archive/feed.php">XviD Feeds</a> - Programs you have transcoded to XviD. If you have no recordings, you will see a warning issued from PHP.<br></li>
+                <li><a href="/archive/archive.php">Delete XviD Transcodes</a><br></li>
+                <li><a href="/fuppes.php">FUPPES</a> - Free UPnP Entertainment Service.  A UPnP to be used inplace of the UPnP server that comes with MythTV. Install via the Service Menu.<br></li>
+                <li><a href="/mediaserv.php">Mediaserv</a> - A on-demand transcoding server for videos. Mediaserv is designed to transcode video in a format playable on the Nokia Internet Tablets.  However it works well at transcoding and streaming to any device that will playback AVIs (think streaming to any browser!). By wap, we have it set to link to TV recordings (pretty) and your video directory. Additionally if you want it to stream contents from a network share, it will! ln -s /path/to/share /myth/mediaserv/media/<br></li>
+                <li><a href="/mythweb/data/mp3player.html">Radio</a> - Music in MythMusic must be encoded as MP3s.<br></li>
+            </ul>
+        </div>
+        <div id="info_status" class="hidden">
+            <ul>
+                <li><a href="/rrd/index.html">RRDTool</a> - Hardware status graphs.</li>
+                <li><a href="/monitorix/">Monitorix</a> - A system monitoring perl script that uses rrd databases to log system data.<br></li>
+                <li><a href="http://fah-web.stanford.edu/cgi-bin/main.py?qtype=teampage&amp;teamnum=50975">KnoppMyth Folding@home Team Status</a></li>
+                <li><a href="/foldingathome/">My Folding@home Status</a></li>
+            </ul>
+        </div>
+        <div id="info_help" class="hidden">
+            <ul>
+                <li><a href="http://www.mythtv.org/docs/">MythTV Documentation</a></li>
+                <li><a href="/mythtv-doc/keys.txt">MythTV Default Keybindings</a></li>
+                <li><a href="http://www.mythtv.org/support">MythTV Support</a></li>
+                <li><a href="http://www.schedulesdirect.org/">Schedules Direct</a> - Provides U.S./Canadian TV listing data.<br></li>
+                <li><a href="/linhes.html">LinHES</a> - Describes how "The Project Leader" setup multiple systems to form a <b>Lin</b>ux <b>H</b>ome <b>E</b>ntertainment <b>S</b>ystem.<br></li>
+                <li><a href="http://linhes.org/phpBB2/">LinHES Forum</a></li>
+                <li><a href="http://www.google.com/advanced_search?q=+site:mysettopbox.tv/phpBB2&hl=en&lr=&as_qdr=all">Search LinHES Forum</a></li>
+                <li><a href="http://www.knoppmythwiki.org/">KnoppMyth Wiki</a></li>
+                <li><a href="http://linhes.org/bugs/projects/linhes/wiki">LinHES R6 Hints & Tips</a></li>
+                <li><a href="http://linhes.org/bugs">LinHES Bug Tracker</a></li>
+            </ul>
+        </div>
+
+</body>
+</html>
diff --git a/abs/core/lzo2/PKGBUILD b/abs/core/lzo2/PKGBUILD
index f7e2da0..8474e99 100644
--- a/abs/core/lzo2/PKGBUILD
+++ b/abs/core/lzo2/PKGBUILD
@@ -2,8 +2,8 @@
 # Contributor: Low Kian Seong <fastmail_low@speedymail.org>
 # Maintainer: dorphell <dorphell@archlinux.org>
 pkgname=lzo2
-pkgver=2.02
-pkgrel=12
+pkgver=2.03
+pkgrel=1
 pkgdesc="a portable lossless data compression library written in ANSI C"
 arch=(i686 x86_64)
 url="http://www.oberhumer.com/opensource/lzo"
@@ -12,7 +12,6 @@ groups=('base')
 depends=('glibc')
 source=(http://www.oberhumer.com/opensource/lzo/download/lzo-${pkgver}.tar.gz)
 options=(!libtool)
-md5sums=('6760e5819f4238328709bf93bf10071c')
 
 build() {
   cd ${startdir}/src/lzo-${pkgver}
@@ -20,3 +19,4 @@ build() {
   make || return 1
   make DESTDIR=${startdir}/pkg install
 }
+md5sums=('0c3d078c2e8ea5a88971089a2f02a726')
diff --git a/abs/core/mdadm/PKGBUILD b/abs/core/mdadm/PKGBUILD
index 0af45bf..22ecc25 100644
--- a/abs/core/mdadm/PKGBUILD
+++ b/abs/core/mdadm/PKGBUILD
@@ -1,8 +1,8 @@
 # $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
 # Maintainer: Judd Vinet <jvinet@zeroflux.org>
 pkgname=mdadm
-pkgver=3.0
-pkgrel=12
+pkgver=3.1.2
+pkgrel=2
 pkgdesc="A tool for managing/monitoring Linux md device arrays, also known as Software RAID"
 arch=(i686 x86_64)
 license=('GPL')
@@ -12,20 +12,14 @@ depends=('glibc')
 backup=('etc/mdadm.conf')
 conflicts=('udev<135-4')
 source=(ftp://ftp.kernel.org/pub/linux/utils/raid/mdadm/$pkgname-$pkgver.tar.bz2 \
-        mdadm mdadm.conf raid-partitions_install raid-partitions_hook)
+        mdadm.conf raid-partitions_install raid-partitions_hook)
 replaces=('raidtools')
-md5sums=('bcd27a1359b18e25e61593221d098f6a'
-         '6df172c8f77b280018cf87eb3d313f29'
-         '0ce4c0f9770bf582a71228053566359d'
-         '9de7e423ec9c6766b5f5d39915929003'
-         '09d72c714b40b6fa1e8eab04c1dabd42')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
   make || return 1
   make INSTALL=/bin/install DESTDIR=$startdir/pkg install
   install -D -m644 ../mdadm.conf $startdir/pkg/etc/mdadm.conf
-  install -D -m755 ../mdadm $startdir/pkg/etc/rc.d/mdadm
   install -D -m644 ../raid-partitions_install $startdir/pkg/lib/initcpio/install/raid-partitions
   install -D -m644 ../raid-partitions_hook $startdir/pkg/lib/initcpio/hooks/raid-partitions
   # a static binary is required for Arch's initrd
@@ -33,3 +27,7 @@ build() {
   make LDFLAGS+=-static || return 1
   install -D -m755 mdadm $startdir/pkg/sbin/mdadm.static
 }
+md5sums=('c5a39f38c465229767a5af2a4eb81bef'
+         '0ce4c0f9770bf582a71228053566359d'
+         '9de7e423ec9c6766b5f5d39915929003'
+         '09d72c714b40b6fa1e8eab04c1dabd42')
diff --git a/abs/core/media_dirs/PKGBUILD b/abs/core/media_dirs/PKGBUILD
index f3907fe..38544b3 100644
--- a/abs/core/media_dirs/PKGBUILD
+++ b/abs/core/media_dirs/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=media_dirs
 pkgver=1
-pkgrel=12
+pkgrel=14
 pkgdesc="creates the dir layout for mythtv to use"
 url=""
 license=""
@@ -56,6 +56,14 @@ phone/Voicemail
 phone/Photos
 phone
 pretty
+video_stuff/trailers
+video_stuff/coverart
+video_stuff/fanart
+video_stuff/screenshots
+video_stuff/banners
+games/screenshots
+games/fanart
+games/boxart
 EOF
 
 
diff --git a/abs/core/mjpegtools/PKGBUILD b/abs/core/mjpegtools/PKGBUILD
index 833d798..13c9061 100644
--- a/abs/core/mjpegtools/PKGBUILD
+++ b/abs/core/mjpegtools/PKGBUILD
@@ -4,13 +4,13 @@
 
 pkgname=mjpegtools
 pkgver=1.9.0
-pkgrel=5
+pkgrel=11
 pkgdesc="The mjpeg programs are a set of tools that can do recording of videos and playback, simple cut-and-paste editing and the MPEG compression of audio and video under Linux. "
 arch=(i686 x86_64)
 license=('GPL')
 url="http://mjpeg.sourceforge.net/"
-depends=('libjpeg' 'libpng' 'sdl' 'gcc' 'libdv')
-makedepends=('gtk2')
+depends=('libpng' 'sdl' 'gcc' 'libdv' 'libjpeg6')
+makedepends=('gtk2' 'libjpeg6')
 options=('!makeflags' '!libtool')
 source=(http://downloads.sourceforge.net/sourceforge/mjpeg/${pkgname}-${pkgver}.tar.gz
 	mjpegtools-1.8.0-gcc41.patch)
@@ -18,7 +18,7 @@ source=(http://downloads.sourceforge.net/sourceforge/mjpeg/${pkgname}-${pkgver}.
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
  # patch -Np1 -i ${startdir}/src/mjpegtools-1.8.0-gcc41.patch || return 1
-  ./configure --prefix=/usr
+env CPPFLAGS="-I/opt/libjpeg6/include" LDFLAGS="-L/opt/libjpeg6/lib"   ./configure --prefix=/usr  --enable-static-build 
   find -name Makefile -exec sed -i -e 's:-march=k8 -mtune=k8::' -e 's:-march=pentium3 -mtune=pentium3::' {} \;
 
   make || return 1
diff --git a/abs/core/mjpegtools/__changelog b/abs/core/mjpegtools/__changelog
new file mode 100644
index 0000000..aa74d17
--- /dev/null
+++ b/abs/core/mjpegtools/__changelog
@@ -0,0 +1,2 @@
+change to build against libjpeg6 
+ env CPPFLAGS="-I/opt/libjpeg6/include" LDFLAGS="-L/opt/libjpeg6/lib"   ./configure -
diff --git a/abs/core/mplayer-wrapper/PKGBUILD b/abs/core/mplayer-wrapper/PKGBUILD
index c64875d..2dbf67d 100644
--- a/abs/core/mplayer-wrapper/PKGBUILD
+++ b/abs/core/mplayer-wrapper/PKGBUILD
@@ -1,16 +1,15 @@
 pkgname=mplayer-wrapper
 pkgver=1	
-pkgrel=9
+pkgrel=10
 pkgdesc="wrapper for mplayer and mplayer derivatives"
 arch=('i686' 'x86_64')
 
-depends=('perl') 
+depends=('perl' 'vdpauinfo') 
 
 source=(mplayer-wrapper.pl)
 
 license=('GPL2')
 
-install=mplayer-wrapper.install
 build() {
    LH_ROOT=/usr/LH
    mkdir -p $startdir/pkg/$LH_ROOT/bin/
@@ -19,3 +18,4 @@ build() {
    # executables
    install -m0755 -D *.pl  $startdir/pkg/$LH_ROOT/bin/
 }
+md5sums=('c21a8b05d2134262c876396bde9da0a2')
diff --git a/abs/core/mplayer-wrapper/mplayer-wrapper.pl b/abs/core/mplayer-wrapper/mplayer-wrapper.pl
old mode 100755
new mode 100644
index da0e838..18f3caf
--- a/abs/core/mplayer-wrapper/mplayer-wrapper.pl
+++ b/abs/core/mplayer-wrapper/mplayer-wrapper.pl
@@ -97,10 +97,13 @@ sub dynamic_parameters () {
     my($mediafile)=@_;
     my @parameters = ();
     my $codec="";
+    my $xresolution=0;
+    my $yresolution=0;
     my %vdpau_supported_modes=();
+    my $vf_parameters="";
 
     # See if the GPU and driver support vdpau for GPU-based accelerated decoding
-    my $command="vdpinfo |";
+    my $command="vdpauinfo |";
     # On supported hardware, vdpinfo produces relevant results that look something like this (see
     # http://www.phoronix.com/forums/showthread.php?t=14493 for additional details, or run
     # vdpinfo on vdpau-capable hardware yourself):
@@ -130,49 +133,95 @@ sub dynamic_parameters () {
     }
     close(SHELL);
     
-    # figure out what codec the video uses
-    my $command="mplayer -identify -frames 0 \"$mediafile\" | grep ID_VIDEO_CODEC | cut -c 16- |";
+    # Learn some things about the video: codec and resolution
+    my $command="mplayer -identify -frames 0 \"$mediafile\" |";
     open(SHELL, $command);
     while (<SHELL>) {
 	chop;
-	$codec = $_;
-	#print "DEBUG: codec is $codec\n";
+	if (m/ID_VIDEO_CODEC=(.*)/g) {
+	    $codec = $1;
+	    #print "DEBUG: codec is $codec\n";
+	} elsif (m/ID_VIDEO_WIDTH=(.*)/g) {
+	    $xresolution = $1;
+	    #print "DEBUG: x resolution is $xresolution\n";
+	} elsif (m/ID_VIDEO_HEIGHT=(.*)/g) {
+	    $yresolution = $1;
+	    #print "DEBUG: y resolution is $yresolution\n";
+	}
     }
     close(SHELL);
 
-    # We should use vdpau if it's available and helps with the codec we need to decode.
-    if ($codec eq "ffh264") { # h.264
-	if ($vdpau_supported_modes{"H264"}) {
-	    push(@parameters, "-vo vdpau");
-	    push(@parameters, "-vc ffh264vdpau");
+    # see if it's a malformed 4:3 video with top and side bars, in need of cropping
+    my $crop_candidate="";
+    my $biggestX=0;
+    my $biggestY=0;
+    # The algorithm here is trial and error.  Skip 6 minutes into a video, and look at 40 frames of
+    # video.  Videos shorter than 6 minutes will not end up being examined for letterboxing badness.
+    # In a longer video, use the least-recommended pruning that mplayer suggests, among the frames polled.
+    my $command="mplayer -ss 360 -ao null -vo null -vf cropdetect -frames 40 \"$mediafile\" | grep CROP | tail -1 |";
+    open(SHELL, $command);
+    while (<SHELL>) {
+	if (m/-vf (crop=.*)\)/g) {
+	    $crop_candidate = $1;
+	    print "DEBUG: $crop_candidate\n";
+	    if ($crop_candidate =~ m/(\d+):(\d+)/) {
+		if (($1 > $biggestX) && ($2 > $biggestY)) {
+		    $biggestX = $1;
+		    $biggestY = $2;
+		    print "newX: $biggestX\n";
+		    print "newY: $biggestY\n";
+		}
+	    }
 	}
-    } elsif ($codec eq "ffmpeg2") { # MPEG2
-	if ($vdpau_supported_modes{"MPEG2"}) {
-	    push(@parameters, "-vo vdpau");
-	    push(@parameters, "-vc ffmpeg12vdpau");
+	if (($biggestX != $xresolution) || ($biggestY != $yresolution)) {
+	    $vf_parameters = $crop_candidate;
 	}
+	print "DEBUG: crop parameter is $vf_parameters\n";
+    }
+    close(SHELL);
 
-	# ??? although MPEG1 is rare, it seems as if it should work with -vc ffmpeg12vdpau as well
-	
-	# problems have been reported with WMV3 support
-	
+    # If there are no crop parameters, use vdpau if it's supported.  Don't use vdpau if there's cropping
+    # because vdpau doesn't work with mplayer's cropping video filter.
+
+    # We should use vdpau if it's available and helps with the codec we need to decode.
+    if ($vf_parameters eq "") {
+	if ($codec eq "ffh264") { # h.264
+	    if ($vdpau_supported_modes{"H264"}) {
+		push(@parameters, "-vo vdpau");
+		push(@parameters, "-vc ffh264vdpau");
+	    }
+	} elsif ($codec eq "ffmpeg2") { # MPEG2
+	    if ($vdpau_supported_modes{"MPEG2"}) {
+		push(@parameters, "-vo vdpau");
+		push(@parameters, "-vc ffmpeg12vdpau");
+	    }
+	    
+	    # ??? although MPEG1 is rare, it seems as if it should work with -vc ffmpeg12vdpau as well
+	    
+	    # problems have been reported with WMV3 support
+	    
 #    } elsif ($codec eq "ffwmv3") { # WMV3
 #	if ($vdpau_supported) {
 #	push(@parameters, "-vo vdpau");
 #	push(@parameters, "-vc ffwmv3vdpau");
 #    }
-	# problems have been reported with WVC1 support
-	
+	    # problems have been reported with WVC1 support
+	    
 #    } elsif ($codec eq "ffvc1") { # WVC1
 #	if ($vdpau_supported) {
 #	push(@parameters, "-vo vdpau");
 #	push(@parameters, "-vc ffvc1vdpau");
 #    }
-
-    } else {
+	    
+	} else { # any codec that doesn't work with vdpau
+	    push(@parameters, "-vo xv,x11,");
+	    push(@parameters, "-vc ,");
+	    push(@parameters, "-vf pp=lb,$vf_parameters");
+	}
+    } else { # there is a crop parameter
 	push(@parameters, "-vo xv,x11,");
 	push(@parameters, "-vc ,");
-	push(@parameters, "-vf pp=lb,"); # doesn't actually work with vdpau, but doesn't break anything
+	push(@parameters, "-vf pp=lb,$vf_parameters");
     }
     return(@parameters);
 }
diff --git a/abs/core/mysql/PKGBUILD b/abs/core/mysql/PKGBUILD
index 11df8fb..c91ac41 100644
--- a/abs/core/mysql/PKGBUILD
+++ b/abs/core/mysql/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: judd <jvinet@zeroflux.org>
 pkgname=mysql
 pkgver=5.0.75
-pkgrel=3
+pkgrel=4
 pkgdesc="A fast SQL database server"
 arch=(i686 x86_64)
 backup=(etc/my.cnf etc/conf.d/mysqld)
@@ -48,3 +48,9 @@ build() {
   install -D -m644 ../mysqld.conf.d ${startdir}/pkg/etc/conf.d/mysqld
   rm -f ${startdir}/pkg/usr/bin/mysql_config
 }
+
+md5sums=('a234f0a60a7f8c290d9875cba3a2c5a2'
+         'e892aac36cbeb57f0e003ec0936afb3b'
+         'cfff3585dd70cde3ac1ce69e64008733'
+         '078f6e824d6097d558bcf7c16d508d92'
+         'd81d1f51e9ee6941425a63456d07cb21')
diff --git a/abs/core/mysql/__changelog b/abs/core/mysql/__changelog
index 4fa7078..aa066aa 100644
--- a/abs/core/mysql/__changelog
+++ b/abs/core/mysql/__changelog
@@ -1,6 +1,11 @@
 my.cnf
 -enable networking
 -datadir /data/srv/mysql
+-query_cache_size
+-tmp_table_size
+-max_heap_table_size
+-thread_cache_size
+-table_cache
 
 mysqld
 	-redirect output to /dev/null
diff --git a/abs/core/mysql/my.cnf b/abs/core/mysql/my.cnf
index 7202fcd..e13331e 100644
--- a/abs/core/mysql/my.cnf
+++ b/abs/core/mysql/my.cnf
@@ -1,8 +1,4 @@
-# mysql config file for medium systems.
-#
-# This is for a system with little memory (32M - 64M) where MySQL plays
-# a important part and systems up to 128M where MySQL is used together with
-# other programs (like a web server)
+# mysql config file for LinHES.
 #
 # One can in this file use all long options that the program supports.
 # If you want to know which options a program support, run the program
@@ -28,6 +24,11 @@ table_cache = 64
 sort_buffer_size = 512K
 net_buffer_length = 16K
 myisam_sort_buffer_size = 8M
+query_cache_size = 8M
+tmp_table_size = 36M
+max_heap_table_size = 24M
+thread_cache_size = 4
+table_cache = 96
 
 # Don't listen on a TCP/IP port at all. This can be a security enhancement,
 # if all processes that need to connect to mysqld run on the same host.
diff --git a/abs/core/mythdb-initial/PKGBUILD b/abs/core/mythdb-initial/PKGBUILD
new file mode 100755
index 0000000..16a59e1
--- /dev/null
+++ b/abs/core/mythdb-initial/PKGBUILD
@@ -0,0 +1,23 @@
+pkgname=mythdb-initial
+pkgver=1
+pkgrel=54
+pkgdesc="setup the initial mythtv database for linhes"
+url=""
+license=""
+depends=(mysql)
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=mythdb.install
+source=(mc.sql permissions.sql custom.sql dvd_transcode_r6.sql)
+md5sums=()
+arch=('i686')
+build() {
+  cd $startdir/src
+  mkdir -p $startdir/pkg/data/database
+  cp mc.sql  $startdir/pkg/data/database/mc.sql.initial
+  cp permissions.sql  $startdir/pkg/data/database/permissions.sql
+  cp custom.sql  $startdir/pkg/data/database/custom.sql
+  cp dvd_transcode_r6.sql  $startdir/pkg/data/database/dvd_transcode_r6.sql
+}
diff --git a/abs/core/mythdb-initial/__changelog b/abs/core/mythdb-initial/__changelog
new file mode 100644
index 0000000..c53f2f6
--- /dev/null
+++ b/abs/core/mythdb-initial/__changelog
@@ -0,0 +1,25 @@
+
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES 
+('Hostpluginmytharchive','1','larch5'),
+('Hostpluginmythbrowser','1','larch5'),
+('Hostpluginmythcontrols','1','larch5'),
+('Hostpluginmythflix','1','larch5'),
+('Hostpluginmythgallery','1','larch5'),
+('Hostpluginmythgame','1','larch5'),
+('HostpluginmythgameFceu','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('Hostpluginmythmovietime','1','larch5'),
+('Hostpluginmythmusic','1','larch5'),
+('Hostpluginmythnews','1','larch5'),
+('Hostpluginmythphone','1','larch5'),
+('Hostpluginmythsmolt','1','larch5'),
+('Hostpluginmythvideo','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythweather','1','larch5'),
+('HostAudiotype','ALSA','larch5')
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('WOLbackendReconnectWaitTime','5',NULL);
+
diff --git a/abs/core/mythdb-initial/custom.sql b/abs/core/mythdb-initial/custom.sql
new file mode 100644
index 0000000..1033a9e
--- /dev/null
+++ b/abs/core/mythdb-initial/custom.sql
@@ -0,0 +1,3 @@
+INSERT INTO `jumppoints` (`destination`, `description`,`keylist`,`hostname`) VALUES
+('MythSmolt','Hardware profiler','Ctrl+Alt+p','larch5')
+
diff --git a/abs/core/mythdb-initial/dvd_transcode_r6.sql b/abs/core/mythdb-initial/dvd_transcode_r6.sql
new file mode 100644
index 0000000..6088b59
--- /dev/null
+++ b/abs/core/mythdb-initial/dvd_transcode_r6.sql
@@ -0,0 +1,105 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost    Database: mythconverg
+-- ------------------------------------------------------
+-- Server version	5.0.75
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `dvdinput`
+--
+
+DROP TABLE IF EXISTS `dvdinput`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdinput` (
+  `intid` int(10) unsigned NOT NULL default '0',
+  `hsize` int(10) unsigned default NULL,
+  `vsize` int(10) unsigned default NULL,
+  `ar_num` int(10) unsigned default NULL,
+  `ar_denom` int(10) unsigned default NULL,
+  `fr_code` int(10) unsigned default NULL,
+  `letterbox` tinyint(1) default NULL,
+  `v_format` varchar(16) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdinput`
+--
+
+LOCK TABLES `dvdinput` WRITE;
+/*!40000 ALTER TABLE `dvdinput` DISABLE KEYS */;
+INSERT INTO `dvdinput` VALUES (1,720,480,16,9,1,1,'ntsc'),(2,720,480,16,9,1,0,'ntsc'),(3,720,480,4,3,1,1,'ntsc'),(4,720,480,4,3,1,0,'ntsc'),(5,720,576,16,9,3,1,'pal'),(6,720,576,16,9,3,0,'pal'),(7,720,576,4,3,3,1,'pal'),(8,720,576,4,3,3,0,'pal');
+/*!40000 ALTER TABLE `dvdinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdtranscode`
+--
+
+DROP TABLE IF EXISTS `dvdtranscode`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdtranscode` (
+  `intid` int(11) NOT NULL auto_increment,
+  `input` int(10) unsigned default NULL,
+  `name` varchar(128) NOT NULL,
+  `sync_mode` int(10) unsigned default NULL,
+  `use_yv12` tinyint(1) default NULL,
+  `cliptop` int(11) default NULL,
+  `clipbottom` int(11) default NULL,
+  `clipleft` int(11) default NULL,
+  `clipright` int(11) default NULL,
+  `f_resize_h` int(11) default NULL,
+  `f_resize_w` int(11) default NULL,
+  `hq_resize_h` int(11) default NULL,
+  `hq_resize_w` int(11) default NULL,
+  `grow_h` int(11) default NULL,
+  `grow_w` int(11) default NULL,
+  `clip2top` int(11) default NULL,
+  `clip2bottom` int(11) default NULL,
+  `clip2left` int(11) default NULL,
+  `clip2right` int(11) default NULL,
+  `codec` varchar(128) NOT NULL,
+  `codec_param` varchar(128) default NULL,
+  `bitrate` int(11) default NULL,
+  `a_sample_r` int(11) default NULL,
+  `a_bitrate` int(11) default NULL,
+  `two_pass` tinyint(1) default NULL,
+  `tc_param` varchar(128) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdtranscode`
+--
+
+LOCK TABLES `dvdtranscode` WRITE;
+/*!40000 ALTER TABLE `dvdtranscode` DISABLE KEYS */;
+INSERT INTO `dvdtranscode` VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL),(5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL),(6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);
+/*!40000 ALTER TABLE `dvdtranscode` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2010-01-08  0:15:01
diff --git a/abs/core/mythdb-initial/mc.sql b/abs/core/mythdb-initial/mc.sql
new file mode 100644
index 0000000..3e55b70
--- /dev/null
+++ b/abs/core/mythdb-initial/mc.sql
@@ -0,0 +1,2909 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost    Database: mythconverg
+-- ------------------------------------------------------
+-- Server version	5.0.75
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `archiveitems`
+--
+
+DROP TABLE IF EXISTS `archiveitems`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `archiveitems` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `type` set('Recording','Video','File') character set latin1 default NULL,
+  `title` varchar(128) default NULL,
+  `subtitle` varchar(128) default NULL,
+  `description` text,
+  `startdate` varchar(30) default NULL,
+  `starttime` varchar(30) default NULL,
+  `size` bigint(20) unsigned NOT NULL,
+  `filename` text NOT NULL,
+  `hascutlist` tinyint(1) NOT NULL default '0',
+  `cutlist` text,
+  `duration` int(10) unsigned NOT NULL default '0',
+  `cutduration` int(10) unsigned NOT NULL default '0',
+  `videowidth` int(10) unsigned NOT NULL default '0',
+  `videoheight` int(10) unsigned NOT NULL default '0',
+  `filecodec` varchar(50) NOT NULL default '',
+  `videocodec` varchar(50) NOT NULL default '',
+  `encoderprofile` varchar(50) NOT NULL default 'NONE',
+  PRIMARY KEY  (`intid`),
+  KEY `title` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `archiveitems`
+--
+
+LOCK TABLES `archiveitems` WRITE;
+/*!40000 ALTER TABLE `archiveitems` DISABLE KEYS */;
+/*!40000 ALTER TABLE `archiveitems` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `callsignnetworkmap`
+--
+
+DROP TABLE IF EXISTS `callsignnetworkmap`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `callsignnetworkmap` (
+  `id` int(11) NOT NULL auto_increment,
+  `callsign` varchar(20) NOT NULL default '',
+  `network` varchar(20) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `callsign` (`callsign`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `callsignnetworkmap`
+--
+
+LOCK TABLES `callsignnetworkmap` WRITE;
+/*!40000 ALTER TABLE `callsignnetworkmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `callsignnetworkmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `capturecard`
+--
+
+DROP TABLE IF EXISTS `capturecard`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `capturecard` (
+  `cardid` int(10) unsigned NOT NULL auto_increment,
+  `videodevice` varchar(128) default NULL,
+  `audiodevice` varchar(128) default NULL,
+  `vbidevice` varchar(128) default NULL,
+  `cardtype` varchar(32) default 'V4L',
+  `defaultinput` varchar(32) default 'Television',
+  `audioratelimit` int(11) default NULL,
+  `hostname` varchar(64) default NULL,
+  `dvb_swfilter` int(11) default '0',
+  `dvb_sat_type` int(11) NOT NULL default '0',
+  `dvb_wait_for_seqstart` int(11) NOT NULL default '1',
+  `skipbtaudio` tinyint(1) default '0',
+  `dvb_on_demand` tinyint(4) NOT NULL default '0',
+  `dvb_diseqc_type` smallint(6) default NULL,
+  `firewire_speed` int(10) unsigned NOT NULL default '0',
+  `firewire_model` varchar(32) default NULL,
+  `firewire_connection` int(10) unsigned NOT NULL default '0',
+  `signal_timeout` int(11) NOT NULL default '1000',
+  `channel_timeout` int(11) NOT NULL default '3000',
+  `dvb_tuning_delay` int(10) unsigned NOT NULL default '0',
+  `contrast` int(11) NOT NULL default '0',
+  `brightness` int(11) NOT NULL default '0',
+  `colour` int(11) NOT NULL default '0',
+  `hue` int(11) NOT NULL default '0',
+  `diseqcid` int(10) unsigned default NULL,
+  `dvb_eitscan` tinyint(1) NOT NULL default '1',
+  PRIMARY KEY  (`cardid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `capturecard`
+--
+
+LOCK TABLES `capturecard` WRITE;
+/*!40000 ALTER TABLE `capturecard` DISABLE KEYS */;
+/*!40000 ALTER TABLE `capturecard` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `cardinput`
+--
+
+DROP TABLE IF EXISTS `cardinput`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `cardinput` (
+  `cardinputid` int(10) unsigned NOT NULL auto_increment,
+  `cardid` int(10) unsigned NOT NULL default '0',
+  `sourceid` int(10) unsigned NOT NULL default '0',
+  `inputname` varchar(32) NOT NULL default '',
+  `externalcommand` varchar(128) default NULL,
+  `shareable` char(1) default 'N',
+  `tunechan` varchar(10) default NULL,
+  `startchan` varchar(10) default NULL,
+  `displayname` varchar(64) NOT NULL default '',
+  `dishnet_eit` tinyint(1) NOT NULL default '0',
+  `recpriority` int(11) NOT NULL default '0',
+  `quicktune` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `cardinput`
+--
+
+LOCK TABLES `cardinput` WRITE;
+/*!40000 ALTER TABLE `cardinput` DISABLE KEYS */;
+/*!40000 ALTER TABLE `cardinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channel`
+--
+
+DROP TABLE IF EXISTS `channel`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channel` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `channum` varchar(10) NOT NULL default '',
+  `freqid` varchar(10) default NULL,
+  `sourceid` int(10) unsigned default NULL,
+  `callsign` varchar(20) NOT NULL default '',
+  `name` varchar(64) NOT NULL default '',
+  `icon` varchar(255) NOT NULL default 'none',
+  `finetune` int(11) default NULL,
+  `videofilters` varchar(255) NOT NULL default '',
+  `xmltvid` varchar(64) NOT NULL default '',
+  `recpriority` int(10) NOT NULL default '0',
+  `contrast` int(11) default '32768',
+  `brightness` int(11) default '32768',
+  `colour` int(11) default '32768',
+  `hue` int(11) default '32768',
+  `tvformat` varchar(10) NOT NULL default 'Default',
+  `visible` tinyint(1) NOT NULL default '1',
+  `outputfilters` varchar(255) NOT NULL default '',
+  `useonairguide` tinyint(1) default '0',
+  `mplexid` smallint(6) default NULL,
+  `serviceid` mediumint(8) unsigned default NULL,
+  `tmoffset` int(11) NOT NULL default '0',
+  `atsc_major_chan` int(10) unsigned NOT NULL default '0',
+  `atsc_minor_chan` int(10) unsigned NOT NULL default '0',
+  `last_record` datetime NOT NULL,
+  `default_authority` varchar(32) NOT NULL default '',
+  `commmethod` int(11) NOT NULL default '-1',
+  PRIMARY KEY  (`chanid`),
+  KEY `channel_src` (`channum`,`sourceid`),
+  KEY `sourceid` (`sourceid`,`xmltvid`,`chanid`),
+  KEY `visible` (`visible`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channel`
+--
+
+LOCK TABLES `channel` WRITE;
+/*!40000 ALTER TABLE `channel` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channel` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelgroup`
+--
+
+DROP TABLE IF EXISTS `channelgroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelgroup` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `chanid` int(11) unsigned NOT NULL default '0',
+  `grpid` int(11) NOT NULL default '1',
+  PRIMARY KEY  (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelgroup`
+--
+
+LOCK TABLES `channelgroup` WRITE;
+/*!40000 ALTER TABLE `channelgroup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelgroupnames`
+--
+
+DROP TABLE IF EXISTS `channelgroupnames`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelgroupnames` (
+  `grpid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(64) NOT NULL default '0',
+  PRIMARY KEY  (`grpid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelgroupnames`
+--
+
+LOCK TABLES `channelgroupnames` WRITE;
+/*!40000 ALTER TABLE `channelgroupnames` DISABLE KEYS */;
+INSERT INTO `channelgroupnames` VALUES (1,'Favorites');
+/*!40000 ALTER TABLE `channelgroupnames` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelscan`
+--
+
+DROP TABLE IF EXISTS `channelscan`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelscan` (
+  `scanid` int(3) unsigned NOT NULL auto_increment,
+  `cardid` int(3) unsigned NOT NULL,
+  `sourceid` int(3) unsigned NOT NULL,
+  `processed` tinyint(1) unsigned NOT NULL,
+  `scandate` datetime NOT NULL,
+  PRIMARY KEY  (`scanid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelscan`
+--
+
+LOCK TABLES `channelscan` WRITE;
+/*!40000 ALTER TABLE `channelscan` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelscan` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelscan_channel`
+--
+
+DROP TABLE IF EXISTS `channelscan_channel`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelscan_channel` (
+  `transportid` int(6) unsigned NOT NULL,
+  `scanid` int(3) unsigned NOT NULL,
+  `mplex_id` smallint(6) NOT NULL,
+  `source_id` int(3) unsigned NOT NULL,
+  `channel_id` int(3) unsigned NOT NULL default '0',
+  `callsign` varchar(20) NOT NULL default '',
+  `service_name` varchar(64) NOT NULL default '',
+  `chan_num` varchar(10) NOT NULL default '',
+  `service_id` mediumint(8) unsigned NOT NULL default '0',
+  `atsc_major_channel` int(4) unsigned NOT NULL default '0',
+  `atsc_minor_channel` int(4) unsigned NOT NULL default '0',
+  `use_on_air_guide` tinyint(1) NOT NULL default '0',
+  `hidden` tinyint(1) NOT NULL default '0',
+  `hidden_in_guide` tinyint(1) NOT NULL default '0',
+  `freqid` varchar(10) NOT NULL default '',
+  `icon` varchar(255) NOT NULL default '',
+  `tvformat` varchar(10) NOT NULL default 'Default',
+  `xmltvid` varchar(64) NOT NULL default '',
+  `pat_tsid` int(5) unsigned NOT NULL default '0',
+  `vct_tsid` int(5) unsigned NOT NULL default '0',
+  `vct_chan_tsid` int(5) unsigned NOT NULL default '0',
+  `sdt_tsid` int(5) unsigned NOT NULL default '0',
+  `orig_netid` int(5) unsigned NOT NULL default '0',
+  `netid` int(5) unsigned NOT NULL default '0',
+  `si_standard` varchar(10) NOT NULL,
+  `in_channels_conf` tinyint(1) unsigned NOT NULL default '0',
+  `in_pat` tinyint(1) unsigned NOT NULL default '0',
+  `in_pmt` tinyint(1) unsigned NOT NULL default '0',
+  `in_vct` tinyint(1) unsigned NOT NULL default '0',
+  `in_nit` tinyint(1) unsigned NOT NULL default '0',
+  `in_sdt` tinyint(1) unsigned NOT NULL default '0',
+  `is_encrypted` tinyint(1) unsigned NOT NULL default '0',
+  `is_data_service` tinyint(1) unsigned NOT NULL default '0',
+  `is_audio_service` tinyint(1) unsigned NOT NULL default '0',
+  `is_opencable` tinyint(1) unsigned NOT NULL default '0',
+  `could_be_opencable` tinyint(1) unsigned NOT NULL default '0',
+  `decryption_status` smallint(2) unsigned NOT NULL default '0',
+  `default_authority` varchar(32) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelscan_channel`
+--
+
+LOCK TABLES `channelscan_channel` WRITE;
+/*!40000 ALTER TABLE `channelscan_channel` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelscan_channel` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channelscan_dtv_multiplex`
+--
+
+DROP TABLE IF EXISTS `channelscan_dtv_multiplex`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channelscan_dtv_multiplex` (
+  `transportid` int(6) unsigned NOT NULL auto_increment,
+  `scanid` int(3) unsigned NOT NULL,
+  `mplexid` smallint(6) unsigned NOT NULL,
+  `frequency` bigint(12) unsigned NOT NULL,
+  `inversion` char(1) NOT NULL default 'a',
+  `symbolrate` bigint(12) unsigned NOT NULL default '0',
+  `fec` varchar(10) NOT NULL default 'auto',
+  `polarity` char(1) NOT NULL default '',
+  `hp_code_rate` varchar(10) NOT NULL default 'auto',
+  `mod_sys` varchar(10) default NULL,
+  `rolloff` varchar(4) default NULL,
+  `lp_code_rate` varchar(10) NOT NULL default 'auto',
+  `modulation` varchar(10) NOT NULL default 'auto',
+  `transmission_mode` char(1) NOT NULL default 'a',
+  `guard_interval` varchar(10) NOT NULL default 'auto',
+  `hierarchy` varchar(10) NOT NULL default 'auto',
+  `bandwidth` char(1) NOT NULL default 'a',
+  `sistandard` varchar(10) NOT NULL,
+  `tuner_type` smallint(2) unsigned NOT NULL,
+  `default_authority` varchar(32) NOT NULL default '',
+  PRIMARY KEY  (`transportid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channelscan_dtv_multiplex`
+--
+
+LOCK TABLES `channelscan_dtv_multiplex` WRITE;
+/*!40000 ALTER TABLE `channelscan_dtv_multiplex` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channelscan_dtv_multiplex` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `codecparams`
+--
+
+DROP TABLE IF EXISTS `codecparams`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `codecparams` (
+  `profile` int(10) unsigned NOT NULL default '0',
+  `name` varchar(128) NOT NULL default '',
+  `value` varchar(128) default NULL,
+  PRIMARY KEY  (`profile`,`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `codecparams`
+--
+
+LOCK TABLES `codecparams` WRITE;
+/*!40000 ALTER TABLE `codecparams` DISABLE KEYS */;
+/*!40000 ALTER TABLE `codecparams` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `credits`
+--
+
+DROP TABLE IF EXISTS `credits`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `credits` (
+  `person` mediumint(8) unsigned NOT NULL default '0',
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') character set latin1 NOT NULL default '',
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+  KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `credits`
+--
+
+LOCK TABLES `credits` WRITE;
+/*!40000 ALTER TABLE `credits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `credits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `customexample`
+--
+
+DROP TABLE IF EXISTS `customexample`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `customexample` (
+  `rulename` varchar(64) NOT NULL,
+  `fromclause` text NOT NULL,
+  `whereclause` text NOT NULL,
+  `search` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`rulename`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `customexample`
+--
+
+LOCK TABLES `customexample` WRITE;
+/*!40000 ALTER TABLE `customexample` DISABLE KEYS */;
+INSERT INTO `customexample` VALUES ('New Flix','','program.category_type = \'movie\' AND program.airdate >= \n     YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) \nAND program.stars > 0.5 ',1);
+/*!40000 ALTER TABLE `customexample` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_config`
+--
+
+DROP TABLE IF EXISTS `diseqc_config`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_config` (
+  `cardinputid` int(10) unsigned NOT NULL,
+  `diseqcid` int(10) unsigned NOT NULL,
+  `value` varchar(16) NOT NULL default '',
+  KEY `id` (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_config`
+--
+
+LOCK TABLES `diseqc_config` WRITE;
+/*!40000 ALTER TABLE `diseqc_config` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_config` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_tree`
+--
+
+DROP TABLE IF EXISTS `diseqc_tree`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_tree` (
+  `diseqcid` int(10) unsigned NOT NULL auto_increment,
+  `parentid` int(10) unsigned default NULL,
+  `ordinal` tinyint(3) unsigned NOT NULL,
+  `type` varchar(16) NOT NULL default '',
+  `subtype` varchar(16) NOT NULL default '',
+  `description` varchar(32) NOT NULL default '',
+  `switch_ports` tinyint(3) unsigned NOT NULL default '0',
+  `rotor_hi_speed` float NOT NULL default '0',
+  `rotor_lo_speed` float NOT NULL default '0',
+  `rotor_positions` varchar(255) NOT NULL default '',
+  `lnb_lof_switch` int(10) NOT NULL default '0',
+  `lnb_lof_hi` int(10) NOT NULL default '0',
+  `lnb_lof_lo` int(10) NOT NULL default '0',
+  `cmd_repeat` int(11) NOT NULL default '1',
+  `lnb_pol_inv` tinyint(4) NOT NULL default '0',
+  `address` tinyint(3) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`diseqcid`),
+  KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_tree`
+--
+
+LOCK TABLES `diseqc_tree` WRITE;
+/*!40000 ALTER TABLE `diseqc_tree` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_tree` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofilegroups`
+--
+
+DROP TABLE IF EXISTS `displayprofilegroups`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofilegroups` (
+  `name` varchar(128) NOT NULL,
+  `hostname` varchar(64) NOT NULL,
+  `profilegroupid` int(10) unsigned NOT NULL auto_increment,
+  PRIMARY KEY  (`name`,`hostname`),
+  UNIQUE KEY `profilegroupid` (`profilegroupid`)
+) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofilegroups`
+--
+
+LOCK TABLES `displayprofilegroups` WRITE;
+/*!40000 ALTER TABLE `displayprofilegroups` DISABLE KEYS */;
+INSERT INTO `displayprofilegroups` VALUES ('CPU++','larch5',1),('CPU+','larch5',2),('CPU--','larch5',3),('High Quality','larch5',4),('Normal','larch5',5),('Slim','larch5',6),('VDPAU High Quality','larch5',7),('VDPAU Normal','larch5',8),('VDPAU Slim','larch5',9);
+/*!40000 ALTER TABLE `displayprofilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofiles`
+--
+
+DROP TABLE IF EXISTS `displayprofiles`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofiles` (
+  `profilegroupid` int(10) unsigned NOT NULL,
+  `profileid` int(10) unsigned NOT NULL auto_increment,
+  `value` varchar(128) NOT NULL,
+  `data` varchar(255) NOT NULL default '',
+  KEY `profilegroupid` (`profilegroupid`),
+  KEY `profileid` (`profileid`,`value`),
+  KEY `profileid_2` (`profileid`)
+) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofiles`
+--
+
+LOCK TABLES `displayprofiles` WRITE;
+/*!40000 ALTER TABLE `displayprofiles` DISABLE KEYS */;
+INSERT INTO `displayprofiles` VALUES (1,1,'pref_priority','1'),(1,1,'pref_cmp0','> 0 0'),(1,1,'pref_decoder','ffmpeg'),(1,1,'pref_max_cpus','1'),(1,1,'pref_videorenderer','xv-blit'),(1,1,'pref_osdrenderer','softblend'),(1,1,'pref_osdfade','1'),(1,1,'pref_deint0','bobdeint'),(1,1,'pref_deint1','linearblend'),(1,1,'pref_filters',''),(1,2,'pref_priority','2'),(1,2,'pref_cmp0','> 0 0'),(1,2,'pref_decoder','ffmpeg'),(1,2,'pref_max_cpus','1'),(1,2,'pref_videorenderer','quartz-blit'),(1,2,'pref_osdrenderer','softblend'),(1,2,'pref_osdfade','1'),(1,2,'pref_deint0','linearblend'),(1,2,'pref_deint1','linearblend'),(1,2,'pref_filters',''),(2,3,'pref_priority','1'),(2,3,'pref_cmp0','<= 720 576'),(2,3,'pref_cmp1','> 0 0'),(2,3,'pref_decoder','ffmpeg'),(2,3,'pref_max_cpus','1'),(2,3,'pref_videorenderer','xv-blit'),(2,3,'pref_osdrenderer','softblend'),(2,3,'pref_osdfade','1'),(2,3,'pref_deint0','bobdeint'),(2,3,'pref_deint1','linearblend'),(2,3,'pref_filters',''),(2,4,'pref_priority','2'),(2,4,'pref_cmp0','<= 1280 720'),(2,4,'pref_cmp1','> 720 576'),(2,4,'pref_decoder','xvmc'),(2,4,'pref_max_cpus','1'),(2,4,'pref_videorenderer','xvmc-blit'),(2,4,'pref_osdrenderer','opengl'),(2,4,'pref_osdfade','1'),(2,4,'pref_deint0','bobdeint'),(2,4,'pref_deint1','onefield'),(2,4,'pref_filters',''),(2,5,'pref_priority','3'),(2,5,'pref_cmp0','<= 1280 720'),(2,5,'pref_cmp1','> 720 576'),(2,5,'pref_decoder','libmpeg2'),(2,5,'pref_max_cpus','1'),(2,5,'pref_videorenderer','xv-blit'),(2,5,'pref_osdrenderer','softblend'),(2,5,'pref_osdfade','1'),(2,5,'pref_deint0','bobdeint'),(2,5,'pref_deint1','onefield'),(2,5,'pref_filters',''),(2,6,'pref_priority','4'),(2,6,'pref_cmp0','> 0 0'),(2,6,'pref_decoder','xvmc'),(2,6,'pref_max_cpus','1'),(2,6,'pref_videorenderer','xvmc-blit'),(2,6,'pref_osdrenderer','ia44blend'),(2,6,'pref_osdfade','0'),(2,6,'pref_deint0','bobdeint'),(2,6,'pref_deint1','onefield'),(2,6,'pref_filters',''),(2,7,'pref_priority','5'),(2,7,'pref_cmp0','> 0 0'),(2,7,'pref_decoder','libmpeg2'),(2,7,'pref_max_cpus','1'),(2,7,'pref_videorenderer','xv-blit'),(2,7,'pref_osdrenderer','chromakey'),(2,7,'pref_osdfade','0'),(2,7,'pref_deint0','bobdeint'),(2,7,'pref_deint1','onefield'),(2,7,'pref_filters',''),(3,8,'pref_priority','1'),(3,8,'pref_cmp0','<= 720 576'),(3,8,'pref_cmp1','> 0 0'),(3,8,'pref_decoder','ivtv'),(3,8,'pref_max_cpus','1'),(3,8,'pref_videorenderer','ivtv'),(3,8,'pref_osdrenderer','ivtv'),(3,8,'pref_osdfade','1'),(3,8,'pref_deint0','none'),(3,8,'pref_deint1','none'),(3,8,'pref_filters',''),(3,9,'pref_priority','2'),(3,9,'pref_cmp0','<= 720 576'),(3,9,'pref_cmp1','> 0 0'),(3,9,'pref_decoder','xvmc'),(3,9,'pref_max_cpus','1'),(3,9,'pref_videorenderer','xvmc-blit'),(3,9,'pref_osdrenderer','ia44blend'),(3,9,'pref_osdfade','0'),(3,9,'pref_deint0','bobdeint'),(3,9,'pref_deint1','onefield'),(3,9,'pref_filters',''),(3,10,'pref_priority','3'),(3,10,'pref_cmp0','<= 1280 720'),(3,10,'pref_cmp1','> 720 576'),(3,10,'pref_decoder','xvmc'),(3,10,'pref_max_cpus','1'),(3,10,'pref_videorenderer','xvmc-blit'),(3,10,'pref_osdrenderer','ia44blend'),(3,10,'pref_osdfade','0'),(3,10,'pref_deint0','bobdeint'),(3,10,'pref_deint1','onefield'),(3,10,'pref_filters',''),(3,11,'pref_priority','4'),(3,11,'pref_cmp0','> 0 0'),(3,11,'pref_decoder','xvmc'),(3,11,'pref_max_cpus','1'),(3,11,'pref_videorenderer','xvmc-blit'),(3,11,'pref_osdrenderer','ia44blend'),(3,11,'pref_osdfade','0'),(3,11,'pref_deint0','bobdeint'),(3,11,'pref_deint1','onefield'),(3,11,'pref_filters',''),(3,12,'pref_priority','5'),(3,12,'pref_cmp0','> 0 0'),(3,12,'pref_decoder','libmpeg2'),(3,12,'pref_max_cpus','1'),(3,12,'pref_videorenderer','xv-blit'),(3,12,'pref_osdrenderer','chromakey'),(3,12,'pref_osdfade','0'),(3,12,'pref_deint0','none'),(3,12,'pref_deint1','none'),(3,12,'pref_filters',''),(4,13,'pref_priority','1'),(4,13,'pref_cmp0','>= 1920 1080'),(4,13,'pref_decoder','ffmpeg'),(4,13,'pref_max_cpus','2'),(4,13,'pref_videorenderer','xv-blit'),(4,13,'pref_osdrenderer','softblend'),(4,13,'pref_osdfade','1'),(4,13,'pref_deint0','linearblend'),(4,13,'pref_deint1','linearblend'),(4,13,'pref_filters',''),(4,14,'pref_priority','2'),(4,14,'pref_cmp0','> 0 0'),(4,14,'pref_decoder','ffmpeg'),(4,14,'pref_max_cpus','1'),(4,14,'pref_videorenderer','xv-blit'),(4,14,'pref_osdrenderer','softblend'),(4,14,'pref_osdfade','1'),(4,14,'pref_deint0','yadifdoubleprocessdeint'),(4,14,'pref_deint1','yadifdeint'),(4,14,'pref_filters',''),(4,15,'pref_priority','3'),(4,15,'pref_cmp0','>= 1920 1080'),(4,15,'pref_decoder','ffmpeg'),(4,15,'pref_max_cpus','2'),(4,15,'pref_videorenderer','quartz-blit'),(4,15,'pref_osdrenderer','softblend'),(4,15,'pref_osdfade','1'),(4,15,'pref_deint0','linearblend'),(4,15,'pref_deint1','linearblend'),(4,15,'pref_filters',''),(4,16,'pref_priority','4'),(4,16,'pref_cmp0','> 0 0'),(4,16,'pref_decoder','ffmpeg'),(4,16,'pref_max_cpus','1'),(4,16,'pref_videorenderer','quartz-blit'),(4,16,'pref_osdrenderer','softblend'),(4,16,'pref_osdfade','1'),(4,16,'pref_deint0','yadifdoubleprocessdeint'),(4,16,'pref_deint1','yadifdeint'),(4,16,'pref_filters',''),(5,17,'pref_priority','1'),(5,17,'pref_cmp0','>= 1280 720'),(5,17,'pref_decoder','ffmpeg'),(5,17,'pref_max_cpus','1'),(5,17,'pref_videorenderer','xv-blit'),(5,17,'pref_osdrenderer','softblend'),(5,17,'pref_osdfade','0'),(5,17,'pref_deint0','linearblend'),(5,17,'pref_deint1','linearblend'),(5,17,'pref_filters',''),(5,18,'pref_priority','2'),(5,18,'pref_cmp0','> 0 0'),(5,18,'pref_decoder','ffmpeg'),(5,18,'pref_max_cpus','1'),(5,18,'pref_videorenderer','xv-blit'),(5,18,'pref_osdrenderer','softblend'),(5,18,'pref_osdfade','1'),(5,18,'pref_deint0','greedyhdoubleprocessdeint'),(5,18,'pref_deint1','kerneldeint'),(5,18,'pref_filters',''),(5,19,'pref_priority','3'),(5,19,'pref_cmp0','>= 1280 720'),(5,19,'pref_decoder','ffmpeg'),(5,19,'pref_max_cpus','1'),(5,19,'pref_videorenderer','quartz-blit'),(5,19,'pref_osdrenderer','softblend'),(5,19,'pref_osdfade','0'),(5,19,'pref_deint0','linearblend'),(5,19,'pref_deint1','linearblend'),(5,19,'pref_filters',''),(5,20,'pref_priority','4'),(5,20,'pref_cmp0','> 0 0'),(5,20,'pref_decoder','ffmpeg'),(5,20,'pref_max_cpus','1'),(5,20,'pref_videorenderer','quartz-blit'),(5,20,'pref_osdrenderer','softblend'),(5,20,'pref_osdfade','1'),(5,20,'pref_deint0','greedyhdoubleprocessdeint'),(5,20,'pref_deint1','kerneldeint'),(5,20,'pref_filters',''),(6,21,'pref_priority','1'),(6,21,'pref_cmp0','>= 1280 720'),(6,21,'pref_decoder','ffmpeg'),(6,21,'pref_max_cpus','1'),(6,21,'pref_videorenderer','xv-blit'),(6,21,'pref_osdrenderer','softblend'),(6,21,'pref_osdfade','0'),(6,21,'pref_deint0','onefield'),(6,21,'pref_deint1','onefield'),(6,21,'pref_filters',''),(6,22,'pref_priority','2'),(6,22,'pref_cmp0','> 0 0'),(6,22,'pref_decoder','ffmpeg'),(6,22,'pref_max_cpus','1'),(6,22,'pref_videorenderer','xv-blit'),(6,22,'pref_osdrenderer','softblend'),(6,22,'pref_osdfade','1'),(6,22,'pref_deint0','linearblend'),(6,22,'pref_deint1','linearblend'),(6,22,'pref_filters',''),(6,23,'pref_priority','3'),(6,23,'pref_cmp0','>= 1280 720'),(6,23,'pref_decoder','ffmpeg'),(6,23,'pref_max_cpus','1'),(6,23,'pref_videorenderer','quartz-blit'),(6,23,'pref_osdrenderer','softblend'),(6,23,'pref_osdfade','0'),(6,23,'pref_deint0','onefield'),(6,23,'pref_deint1','onefield'),(6,23,'pref_filters',''),(6,24,'pref_priority','4'),(6,24,'pref_cmp0','> 0 0'),(6,24,'pref_decoder','ffmpeg'),(6,24,'pref_max_cpus','1'),(6,24,'pref_videorenderer','quartz-blit'),(6,24,'pref_osdrenderer','softblend'),(6,24,'pref_osdfade','1'),(6,24,'pref_deint0','linearblend'),(6,24,'pref_deint1','linearblend'),(6,24,'pref_filters',''),(7,25,'pref_priority','1'),(7,25,'pref_cmp0','> 0 0'),(7,25,'pref_decoder','vdpau'),(7,25,'pref_max_cpus','1'),(7,25,'pref_videorenderer','vdpau'),(7,25,'pref_osdrenderer','vdpau'),(7,25,'pref_osdfade','1'),(7,25,'pref_deint0','vdpauadvanceddoublerate'),(7,25,'pref_deint1','vdpauadvanced'),(7,25,'pref_filters',''),(8,26,'pref_priority','1'),(8,26,'pref_cmp0','>= 0 720'),(8,26,'pref_decoder','vdpau'),(8,26,'pref_max_cpus','1'),(8,26,'pref_videorenderer','vdpau'),(8,26,'pref_osdrenderer','vdpau'),(8,26,'pref_osdfade','1'),(8,26,'pref_deint0','vdpaubasicdoublerate'),(8,26,'pref_deint1','vdpaubasic'),(8,26,'pref_filters',''),(8,27,'pref_priority','2'),(8,27,'pref_cmp0','> 0 0'),(8,27,'pref_decoder','vdpau'),(8,27,'pref_max_cpus','1'),(8,27,'pref_videorenderer','vdpau'),(8,27,'pref_osdrenderer','vdpau'),(8,27,'pref_osdfade','1'),(8,27,'pref_deint0','vdpauadvanceddoublerate'),(8,27,'pref_deint1','vdpauadvanced'),(8,27,'pref_filters',''),(9,28,'pref_priority','1'),(9,28,'pref_cmp0','> 0 0'),(9,28,'pref_decoder','vdpau'),(9,28,'pref_max_cpus','1'),(9,28,'pref_videorenderer','vdpau'),(9,28,'pref_osdrenderer','vdpau'),(9,28,'pref_osdfade','0'),(9,28,'pref_deint0','vdpaubobdeint'),(9,28,'pref_deint1','vdpauonefield'),(9,28,'pref_filters','vdpauskipchroma');
+/*!40000 ALTER TABLE `displayprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_multiplex`
+--
+
+DROP TABLE IF EXISTS `dtv_multiplex`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_multiplex` (
+  `mplexid` smallint(6) NOT NULL auto_increment,
+  `sourceid` smallint(6) default NULL,
+  `transportid` int(11) default NULL,
+  `networkid` int(11) default NULL,
+  `frequency` int(11) default NULL,
+  `inversion` char(1) default 'a',
+  `symbolrate` int(11) default NULL,
+  `fec` varchar(10) default 'auto',
+  `polarity` char(1) default NULL,
+  `modulation` varchar(10) default 'auto',
+  `bandwidth` char(1) default 'a',
+  `lp_code_rate` varchar(10) default 'auto',
+  `transmission_mode` char(1) default 'a',
+  `guard_interval` varchar(10) default 'auto',
+  `visible` smallint(1) NOT NULL default '0',
+  `constellation` varchar(10) default 'auto',
+  `hierarchy` varchar(10) default 'auto',
+  `hp_code_rate` varchar(10) default 'auto',
+  `mod_sys` varchar(10) default NULL,
+  `rolloff` varchar(4) default NULL,
+  `sistandard` varchar(10) default 'dvb',
+  `serviceversion` smallint(6) default '33',
+  `updatetimestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `default_authority` varchar(32) NOT NULL default '',
+  PRIMARY KEY  (`mplexid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_multiplex`
+--
+
+LOCK TABLES `dtv_multiplex` WRITE;
+/*!40000 ALTER TABLE `dtv_multiplex` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dtv_multiplex` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_privatetypes`
+--
+
+DROP TABLE IF EXISTS `dtv_privatetypes`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_privatetypes` (
+  `sitype` varchar(4) NOT NULL default '',
+  `networkid` int(11) NOT NULL default '0',
+  `private_type` varchar(20) NOT NULL default '',
+  `private_value` varchar(100) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_privatetypes`
+--
+
+LOCK TABLES `dtv_privatetypes` WRITE;
+/*!40000 ALTER TABLE `dtv_privatetypes` DISABLE KEYS */;
+INSERT INTO `dtv_privatetypes` VALUES ('dvb',9018,'channel_numbers','131'),('dvb',9018,'guide_fixup','2'),('dvb',256,'guide_fixup','1'),('dvb',257,'guide_fixup','1'),('dvb',256,'tv_types','1,150,134,133'),('dvb',257,'tv_types','1,150,134,133'),('dvb',4100,'sdt_mapping','1'),('dvb',4101,'sdt_mapping','1'),('dvb',4102,'sdt_mapping','1'),('dvb',4103,'sdt_mapping','1'),('dvb',4104,'sdt_mapping','1'),('dvb',4105,'sdt_mapping','1'),('dvb',4106,'sdt_mapping','1'),('dvb',4107,'sdt_mapping','1'),('dvb',4097,'sdt_mapping','1'),('dvb',4098,'sdt_mapping','1'),('dvb',4100,'tv_types','1,145,154'),('dvb',4101,'tv_types','1,145,154'),('dvb',4102,'tv_types','1,145,154'),('dvb',4103,'tv_types','1,145,154'),('dvb',4104,'tv_types','1,145,154'),('dvb',4105,'tv_types','1,145,154'),('dvb',4106,'tv_types','1,145,154'),('dvb',4107,'tv_types','1,145,154'),('dvb',4097,'tv_types','1,145,154'),('dvb',4098,'tv_types','1,145,154'),('dvb',4100,'guide_fixup','1'),('dvb',4101,'guide_fixup','1'),('dvb',4102,'guide_fixup','1'),('dvb',4103,'guide_fixup','1'),('dvb',4104,'guide_fixup','1'),('dvb',4105,'guide_fixup','1'),('dvb',4106,'guide_fixup','1'),('dvb',4107,'guide_fixup','1'),('dvb',4096,'guide_fixup','5'),('dvb',4097,'guide_fixup','1'),('dvb',4098,'guide_fixup','1'),('dvb',94,'tv_types','1,128'),('atsc',1793,'guide_fixup','3'),('dvb',40999,'guide_fixup','4'),('dvb',70,'force_guide_present','yes'),('dvb',70,'guide_ranges','80,80,96,96'),('dvb',4112,'channel_numbers','131'),('dvb',4115,'channel_numbers','131'),('dvb',4116,'channel_numbers','131'),('dvb',12802,'channel_numbers','131'),('dvb',12803,'channel_numbers','131'),('dvb',12829,'channel_numbers','131'),('dvb',40999,'parse_subtitle_list','1070,1308,1041,1306,1307,1030,1016,1131,1068,1069'),('dvb',4096,'guide_fixup','5');
+/*!40000 ALTER TABLE `dtv_privatetypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdbookmark`
+--
+
+DROP TABLE IF EXISTS `dvdbookmark`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdbookmark` (
+  `serialid` varchar(16) NOT NULL default '',
+  `name` varchar(32) default NULL,
+  `title` smallint(6) NOT NULL default '0',
+  `audionum` tinyint(4) NOT NULL default '-1',
+  `subtitlenum` tinyint(4) NOT NULL default '-1',
+  `framenum` bigint(20) NOT NULL default '0',
+  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  PRIMARY KEY  (`serialid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdbookmark`
+--
+
+LOCK TABLES `dvdbookmark` WRITE;
+/*!40000 ALTER TABLE `dvdbookmark` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dvdbookmark` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdinput`
+--
+
+DROP TABLE IF EXISTS `dvdinput`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdinput` (
+  `intid` int(10) unsigned NOT NULL,
+  `hsize` int(10) unsigned default NULL,
+  `vsize` int(10) unsigned default NULL,
+  `ar_num` int(10) unsigned default NULL,
+  `ar_denom` int(10) unsigned default NULL,
+  `fr_code` int(10) unsigned default NULL,
+  `letterbox` tinyint(1) default NULL,
+  `v_format` varchar(16) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdinput`
+--
+
+LOCK TABLES `dvdinput` WRITE;
+/*!40000 ALTER TABLE `dvdinput` DISABLE KEYS */;
+INSERT INTO `dvdinput` VALUES (1,720,480,16,9,1,1,'ntsc'),(2,720,480,16,9,1,0,'ntsc'),(3,720,480,4,3,1,1,'ntsc'),(4,720,480,4,3,1,0,'ntsc'),(5,720,576,16,9,3,1,'pal'),(6,720,576,16,9,3,0,'pal'),(7,720,576,4,3,3,1,'pal'),(8,720,576,4,3,3,0,'pal');
+/*!40000 ALTER TABLE `dvdinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdtranscode`
+--
+
+DROP TABLE IF EXISTS `dvdtranscode`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdtranscode` (
+  `intid` int(11) NOT NULL auto_increment,
+  `input` int(10) unsigned default NULL,
+  `name` varchar(128) NOT NULL,
+  `sync_mode` int(10) unsigned default NULL,
+  `use_yv12` tinyint(1) default NULL,
+  `cliptop` int(11) default NULL,
+  `clipbottom` int(11) default NULL,
+  `clipleft` int(11) default NULL,
+  `clipright` int(11) default NULL,
+  `f_resize_h` int(11) default NULL,
+  `f_resize_w` int(11) default NULL,
+  `hq_resize_h` int(11) default NULL,
+  `hq_resize_w` int(11) default NULL,
+  `grow_h` int(11) default NULL,
+  `grow_w` int(11) default NULL,
+  `clip2top` int(11) default NULL,
+  `clip2bottom` int(11) default NULL,
+  `clip2left` int(11) default NULL,
+  `clip2right` int(11) default NULL,
+  `codec` varchar(128) NOT NULL,
+  `codec_param` varchar(128) default NULL,
+  `bitrate` int(11) default NULL,
+  `a_sample_r` int(11) default NULL,
+  `a_bitrate` int(11) default NULL,
+  `two_pass` tinyint(1) default NULL,
+  `tc_param` varchar(128) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdtranscode`
+--
+
+LOCK TABLES `dvdtranscode` WRITE;
+/*!40000 ALTER TABLE `dvdtranscode` DISABLE KEYS */;
+INSERT INTO `dvdtranscode` VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL),(5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL),(6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);
+/*!40000 ALTER TABLE `dvdtranscode` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `eit_cache`
+--
+
+DROP TABLE IF EXISTS `eit_cache`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `eit_cache` (
+  `chanid` int(10) NOT NULL,
+  `eventid` int(10) unsigned NOT NULL default '0',
+  `tableid` tinyint(3) unsigned NOT NULL,
+  `version` tinyint(3) unsigned NOT NULL,
+  `endtime` int(10) unsigned NOT NULL,
+  `status` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`chanid`,`eventid`,`status`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `eit_cache`
+--
+
+LOCK TABLES `eit_cache` WRITE;
+/*!40000 ALTER TABLE `eit_cache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `eit_cache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `filemarkup`
+--
+
+DROP TABLE IF EXISTS `filemarkup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `filemarkup` (
+  `filename` text NOT NULL,
+  `mark` mediumint(8) unsigned NOT NULL default '0',
+  `offset` bigint(20) unsigned default NULL,
+  `type` tinyint(4) NOT NULL default '0',
+  KEY `filename` (`filename`(255))
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `filemarkup`
+--
+
+LOCK TABLES `filemarkup` WRITE;
+/*!40000 ALTER TABLE `filemarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `filemarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gallerymetadata`
+--
+
+DROP TABLE IF EXISTS `gallerymetadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gallerymetadata` (
+  `image` varchar(255) character set utf8 collate utf8_bin NOT NULL,
+  `angle` int(11) NOT NULL,
+  PRIMARY KEY  (`image`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gallerymetadata`
+--
+
+LOCK TABLES `gallerymetadata` WRITE;
+/*!40000 ALTER TABLE `gallerymetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gallerymetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gamemetadata`
+--
+
+DROP TABLE IF EXISTS `gamemetadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gamemetadata` (
+  `system` varchar(128) NOT NULL default '',
+  `romname` varchar(128) NOT NULL default '',
+  `gamename` varchar(128) NOT NULL default '',
+  `genre` varchar(128) NOT NULL default '',
+  `year` varchar(10) NOT NULL default '',
+  `publisher` varchar(128) NOT NULL default '',
+  `favorite` tinyint(1) default NULL,
+  `rompath` varchar(255) NOT NULL default '',
+  `screenshot` varchar(255) NOT NULL,
+  `fanart` varchar(255) NOT NULL,
+  `plot` text NOT NULL,
+  `boxart` varchar(255) NOT NULL,
+  `gametype` varchar(64) NOT NULL default '',
+  `diskcount` tinyint(1) NOT NULL default '1',
+  `country` varchar(128) NOT NULL default '',
+  `crc_value` varchar(64) NOT NULL default '',
+  `display` tinyint(1) NOT NULL default '1',
+  `version` varchar(64) NOT NULL default '',
+  KEY `system` (`system`),
+  KEY `year` (`year`),
+  KEY `romname` (`romname`),
+  KEY `gamename` (`gamename`),
+  KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gamemetadata`
+--
+
+LOCK TABLES `gamemetadata` WRITE;
+/*!40000 ALTER TABLE `gamemetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gamemetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gameplayers`
+--
+
+DROP TABLE IF EXISTS `gameplayers`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gameplayers` (
+  `gameplayerid` int(10) unsigned NOT NULL auto_increment,
+  `playername` varchar(64) NOT NULL default '',
+  `workingpath` varchar(255) NOT NULL default '',
+  `rompath` varchar(255) NOT NULL default '',
+  `screenshots` varchar(255) NOT NULL default '',
+  `commandline` text NOT NULL,
+  `gametype` varchar(64) NOT NULL default '',
+  `extensions` varchar(128) NOT NULL default '',
+  `spandisks` tinyint(1) NOT NULL default '0',
+  PRIMARY KEY  (`gameplayerid`),
+  UNIQUE KEY `playername` (`playername`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gameplayers`
+--
+
+LOCK TABLES `gameplayers` WRITE;
+/*!40000 ALTER TABLE `gameplayers` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gameplayers` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `housekeeping`
+--
+
+DROP TABLE IF EXISTS `housekeeping`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `housekeeping` (
+  `tag` varchar(64) NOT NULL default '',
+  `lastrun` datetime default NULL,
+  PRIMARY KEY  (`tag`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `housekeeping`
+--
+
+LOCK TABLES `housekeeping` WRITE;
+/*!40000 ALTER TABLE `housekeeping` DISABLE KEYS */;
+INSERT INTO `housekeeping` VALUES ('BackupDB','2010-05-23 01:43:14'),('MythFillDB','2010-05-23 00:32:23'),('DailyCleanup','2010-05-23 00:32:23'),('JobQueueRecover-larch5','2010-05-23 00:32:23'),('DBCleanup','2010-05-23 00:32:23');
+/*!40000 ALTER TABLE `housekeeping` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inputgroup`
+--
+
+DROP TABLE IF EXISTS `inputgroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inputgroup` (
+  `cardinputid` int(10) unsigned NOT NULL,
+  `inputgroupid` int(10) unsigned NOT NULL,
+  `inputgroupname` varchar(32) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inputgroup`
+--
+
+LOCK TABLES `inputgroup` WRITE;
+/*!40000 ALTER TABLE `inputgroup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inputgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inuseprograms`
+--
+
+DROP TABLE IF EXISTS `inuseprograms`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inuseprograms` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `recusage` varchar(128) NOT NULL default '',
+  `lastupdatetime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `hostname` varchar(64) NOT NULL default '',
+  `rechost` varchar(64) NOT NULL,
+  `recdir` varchar(255) NOT NULL default '',
+  KEY `chanid` (`chanid`,`starttime`),
+  KEY `recusage` (`recusage`,`lastupdatetime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inuseprograms`
+--
+
+LOCK TABLES `inuseprograms` WRITE;
+/*!40000 ALTER TABLE `inuseprograms` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inuseprograms` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jobqueue`
+--
+
+DROP TABLE IF EXISTS `jobqueue`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jobqueue` (
+  `id` int(11) NOT NULL auto_increment,
+  `chanid` int(10) NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `inserttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `type` int(11) NOT NULL default '0',
+  `cmds` int(11) NOT NULL default '0',
+  `flags` int(11) NOT NULL default '0',
+  `status` int(11) NOT NULL default '0',
+  `statustime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `hostname` varchar(64) NOT NULL default '',
+  `args` blob NOT NULL,
+  `comment` varchar(128) NOT NULL default '',
+  `schedruntime` datetime NOT NULL default '2007-01-01 00:00:00',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`type`,`inserttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jobqueue`
+--
+
+LOCK TABLES `jobqueue` WRITE;
+/*!40000 ALTER TABLE `jobqueue` DISABLE KEYS */;
+/*!40000 ALTER TABLE `jobqueue` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jumppoints`
+--
+
+DROP TABLE IF EXISTS `jumppoints`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jumppoints` (
+  `destination` varchar(128) NOT NULL default '',
+  `description` varchar(255) default NULL,
+  `keylist` varchar(128) default NULL,
+  `hostname` varchar(64) NOT NULL default '',
+  PRIMARY KEY  (`destination`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jumppoints`
+--
+
+LOCK TABLES `jumppoints` WRITE;
+/*!40000 ALTER TABLE `jumppoints` DISABLE KEYS */;
+INSERT INTO `jumppoints` VALUES ('Reload Theme','','','larch5'),('Main Menu','','','larch5'),('Program Guide','','','larch5'),('Program Finder','','','larch5'),('Manage Recordings / Fix Conflicts','','','larch5'),('Program Recording Priorities','','','larch5'),('Channel Recording Priorities','','','larch5'),('TV Recording Playback','','','larch5'),('TV Recording Deletion','','','larch5'),('Live TV','','','larch5'),('Live TV In Guide','','','larch5'),('Manual Record Scheduling','','','larch5'),('Status Screen','','','larch5'),('Previously Recorded','','','larch5'),('Netflix Browser','Browse Netflix titles','','larch5'),('Netflix Queue','Administer Netflix Queue','','larch5'),('Netflix History','View Netflix History','','larch5'),('MythGallery','Image viewer / slideshow','','larch5'),('MythGame','Game frontend','','larch5'),('Play music','','','larch5'),('Select music playlists','','','larch5'),('Rip CD','','','larch5'),('Scan music','','','larch5'),('Show Music Miniplayer','','','larch5'),('MythNews','RSS News feed reader','','larch5'),('MythVideo','The MythVideo default view','','larch5'),('Video Manager','The MythVideo video manager','','larch5'),('Video Browser','The MythVideo video browser','','larch5'),('Video Listings','The MythVideo video listings','','larch5'),('Video Gallery','The MythVideo video gallery','','larch5'),('Play DVD','Play a DVD','','larch5'),('Play VCD','Play a VCD','','larch5'),('Rip DVD','Import a DVD into your MythVideo database','','larch5'),('MythWeather','Weather forecasts','','larch5'),('Manage Recording Rules','','','larch5'),('ScreenShot','','','larch5'),('Create DVD','','','larch5'),('Create Archive','','','larch5'),('Import Archive','','','larch5'),('View Archive Log','','','larch5'),('Play Created DVD','','','larch5'),('Burn DVD','','','larch5'),('MythSmolt','Hardware profiler','Ctrl+Alt+p','larch5');
+/*!40000 ALTER TABLE `jumppoints` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keybindings`
+--
+
+DROP TABLE IF EXISTS `keybindings`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keybindings` (
+  `context` varchar(32) NOT NULL default '',
+  `action` varchar(32) NOT NULL default '',
+  `description` varchar(255) default NULL,
+  `keylist` varchar(128) default NULL,
+  `hostname` varchar(64) NOT NULL default '',
+  PRIMARY KEY  (`context`,`action`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keybindings`
+--
+
+LOCK TABLES `keybindings` WRITE;
+/*!40000 ALTER TABLE `keybindings` DISABLE KEYS */;
+INSERT INTO `keybindings` VALUES ('Global','UP','Up Arrow','Up','larch5'),('Global','DOWN','Down Arrow','Down','larch5'),('Global','LEFT','Left Arrow','Left','larch5'),('Global','RIGHT','Right Arrow','Right','larch5'),('Global','SELECT','Select','Return,Enter,Space','larch5'),('Global','ESCAPE','Escape','Esc','larch5'),('Global','MENU','Pop-up menu','M','larch5'),('Global','INFO','More information','I','larch5'),('Global','PAGEUP','Page Up','PgUp','larch5'),('Global','PAGEDOWN','Page Down','PgDown','larch5'),('Global','PREVVIEW','Previous View','Home','larch5'),('Global','NEXTVIEW','Next View','End','larch5'),('Global','HELP','Help','F1','larch5'),('Global','EJECT','Eject Removable Media','','larch5'),('Global','0','0','0','larch5'),('Global','1','1','1','larch5'),('Global','2','2','2','larch5'),('Global','3','3','3','larch5'),('Global','4','4','4','larch5'),('Global','5','5','5','larch5'),('Global','6','6','6','larch5'),('Global','7','7','7','larch5'),('Global','8','8','8','larch5'),('Global','9','9','9','larch5'),('TV Playback','CREATEPBPVIEW','Create Picture-by-Picture view','','larch5'),('TV Playback','CREATEPIPVIEW','Create Picture-in-Picture view','','larch5'),('TV Frontend','PAGEUP','Page Up','3','larch5'),('TV Frontend','PAGEDOWN','Page Down','9','larch5'),('TV Playback','NEXTPIPWINDOW','Toggle active PIP/PBP window','B','larch5'),('TV Frontend','PLAYBACK','Play Program','P','larch5'),('TV Frontend','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Frontend','DAYLEFT','Page the program guide back one day','Home,7','larch5'),('TV Frontend','DAYRIGHT','Page the program guide forward one day','End,1','larch5'),('TV Frontend','PAGELEFT','Page the program guide left',',,<','larch5'),('TV Frontend','PAGERIGHT','Page the program guide right','>,.','larch5'),('TV Frontend','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Frontend','TOGGLEEPGORDER','Reverse the channel order in the program guide','0','larch5'),('TV Frontend','GUIDE','Show the Program Guide','S','larch5'),('TV Frontend','FINDER','Show the Program Finder','#','larch5'),('TV Frontend','NEXTFAV','Cycle through channel groups and all channels in the program guide.','/','larch5'),('TV Frontend','CHANUPDATE','Switch channels without exiting guide in Live TV mode.','X','larch5'),('TV Frontend','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Frontend','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Frontend','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Frontend','RANKINC','Increase program or channel rank','Right','larch5'),('TV Frontend','RANKDEC','Decrease program or channel rank','Left','larch5'),('TV Frontend','UPCOMING','List upcoming episodes','O','larch5'),('TV Frontend','DETAILS','Show program details','U','larch5'),('TV Frontend','VIEWCARD','Switch Capture Card view','Y','larch5'),('TV Frontend','VIEWINPUT','Switch Capture Card view','C','larch5'),('TV Frontend','CHANGERECGROUP','Change Recording Group','','larch5'),('TV Frontend','CHANGEGROUPVIEW','Change Group View','','larch5'),('TV Playback','CLEAROSD','Clear OSD','Backspace','larch5'),('TV Playback','PAUSE','Pause','P','larch5'),('TV Playback','SEEKFFWD','Fast Forward','Right','larch5'),('TV Playback','SEEKRWND','Rewind','Left','larch5'),('TV Playback','ARBSEEK','Arbitrary Seek','*','larch5'),('TV Playback','CHANNELUP','Channel up','Up','larch5'),('TV Playback','CHANNELDOWN','Channel down','Down','larch5'),('TV Playback','NEXTFAV','Switch to the next favorite channel','/','larch5'),('TV Playback','PREVCHAN','Switch to the previous channel','H','larch5'),('TV Playback','JUMPFFWD','Jump ahead','PgDown','larch5'),('TV Playback','JUMPRWND','Jump back','PgUp','larch5'),('TV Playback','JUMPBKMRK','Jump to bookmark','K','larch5'),('TV Playback','FFWDSTICKY','Fast Forward (Sticky) or Forward one frame while paused','>,.','larch5'),('TV Playback','RWNDSTICKY','Rewind (Sticky) or Rewind one frame while paused',',,<','larch5'),('TV Playback','NEXTSOURCE','Next Video Source','Y','larch5'),('TV Playback','PREVSOURCE','Previous Video Source','Ctrl+Y','larch5'),('TV Playback','NEXTINPUT','Next Input','C','larch5'),('TV Playback','NEXTCARD','Next Card','','larch5'),('TV Playback','SKIPCOMMERCIAL','Skip Commercial','Z,End','larch5'),('TV Playback','SKIPCOMMBACK','Skip Commercial (Reverse)','Q,Home','larch5'),('TV Playback','JUMPSTART','Jump to the start of the recording.','Ctrl+B','larch5'),('TV Playback','TOGGLEBROWSE','Toggle channel browse mode','O','larch5'),('TV Playback','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Playback','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Playback','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Playback','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Playback','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Playback','TOGGLEPIPMODE','Toggle Picture-in-Picture view','V','larch5'),('TV Playback','TOGGLEPIPWINDOW','Toggle active PiP window','B','larch5'),('TV Playback','SWAPPIP','Swap PBP/PIP Windows','N','larch5'),('TV Playback','TOGGLEASPECT','Toggle the video aspect ratio','Ctrl+W','larch5'),('TV Playback','TOGGLEFILL','Next Preconfigured Zoom mode','W','larch5'),('TV Playback','TOGGLECC','Toggle any captions','T','larch5'),('TV Playback','TOGGLETTC','Toggle Teletext Captions','','larch5'),('TV Playback','TOGGLESUBTITLE','Toggle Subtitles','','larch5'),('TV Playback','TOGGLECC608','Toggle VBI CC','','larch5'),('TV Playback','TOGGLECC708','Toggle ATSC CC','','larch5'),('TV Playback','TOGGLETTM','Toggle Teletext Menu','','larch5'),('TV Playback','SELECTAUDIO_0','Play audio track 1','','larch5'),('TV Playback','SELECTAUDIO_1','Play audio track 2','','larch5'),('TV Playback','SELECTSUBTITLE_0','Display subtitle 1','','larch5'),('TV Playback','SELECTSUBTITLE_1','Display subtitle 2','','larch5'),('TV Playback','SELECTCC608_0','Display VBI CC1','','larch5'),('TV Playback','SELECTCC608_1','Display VBI CC2','','larch5'),('TV Playback','SELECTCC608_2','Display VBI CC3','','larch5'),('TV Playback','SELECTCC608_3','Display VBI CC4','','larch5'),('TV Playback','SELECTCC708_0','Display ATSC CC1','','larch5'),('TV Playback','SELECTCC708_1','Display ATSC CC2','','larch5'),('TV Playback','SELECTCC708_2','Display ATSC CC3','','larch5'),('TV Playback','SELECTCC708_3','Display ATSC CC4','','larch5'),('TV Playback','NEXTAUDIO','Next audio track','+','larch5'),('TV Playback','PREVAUDIO','Previous audio track','-','larch5'),('TV Playback','NEXTSUBTITLE','Next subtitle track','','larch5'),('TV Playback','PREVSUBTITLE','Previous subtitle track','','larch5'),('TV Playback','NEXTCC608','Next VBI CC track','','larch5'),('TV Playback','PREVCC608','Previous VBI CC track','','larch5'),('TV Playback','NEXTCC708','Next ATSC CC track','','larch5'),('TV Playback','PREVCC708','Previous ATSC CC track','','larch5'),('TV Playback','NEXTCC','Next of any captions','','larch5'),('TV Playback','NEXTSCAN','Next video scan overidemode','','larch5'),('TV Playback','QUEUETRANSCODE','Queue the current recording for transcoding','X','larch5'),('TV Playback','SPEEDINC','Increase the playback speed','U','larch5'),('TV Playback','SPEEDDEC','Decrease the playback speed','J','larch5'),('TV Playback','ADJUSTSTRETCH','Turn on time stretch control','A','larch5'),('TV Playback','STRETCHINC','Increase time stretch speed','','larch5'),('TV Playback','STRETCHDEC','Decrease time stretch speed','','larch5'),('TV Playback','TOGGLESTRETCH','Toggle time stretch speed','','larch5'),('TV Playback','TOGGLEAUDIOSYNC','Turn on audio sync adjustment controls','','larch5'),('TV Playback','TOGGLEPICCONTROLS','Playback picture adjustments','F','larch5'),('TV Playback','TOGGLECHANCONTROLS','Recording picture adjustments for this channel','Ctrl+G','larch5'),('TV Playback','TOGGLERECCONTROLS','Recording picture adjustments for this recorder','G','larch5'),('TV Playback','TOGGLEPBPMODE','Toggle Picture-by-Picture view','Ctrl+V','larch5'),('TV Playback','CYCLECOMMSKIPMODE','Cycle Commercial Skip mode','','larch5'),('TV Playback','GUIDE','Show the Program Guide','S','larch5'),('TV Playback','FINDER','Show the Program Finder','#','larch5'),('TV Playback','TOGGLESLEEP','Toggle the Sleep Timer','F8','larch5'),('TV Playback','PLAY','Play','Ctrl+P','larch5'),('TV Playback','JUMPPREV','Jump to previously played recording','','larch5'),('TV Playback','JUMPREC','Display menu of recorded programs to jump to','','larch5'),('TV Playback','VIEWSCHEDULED','Display scheduled recording list','','larch5'),('TV Playback','SIGNALMON','Monitor Signal Quality','Alt+F7','larch5'),('TV Playback','JUMPTODVDROOTMENU','Jump to the DVD Root Menu','','larch5'),('TV Playback','EXITSHOWNOPROMPTS','Exit Show without any prompts','','larch5'),('TV Playback','SCREENSHOT','Save screenshot of current video frame','','larch5'),('TV Playback','MENURED','Menu Red','F2','larch5'),('TV Playback','MENUGREEN','Menu Green','F3','larch5'),('TV Playback','MENUYELLOW','Menu Yellow','F4','larch5'),('TV Playback','MENUBLUE','Menu Blue','F5','larch5'),('TV Playback','TEXTEXIT','Menu Exit','F6','larch5'),('TV Playback','MENUTEXT','Menu Text','F7','larch5'),('TV Playback','MENUEPG','Menu EPG','F12','larch5'),('TV Editing','CLEARMAP','Clear editing cut points','C,Q,Home','larch5'),('TV Editing','INVERTMAP','Invert Begin/End cut points','I','larch5'),('TV Editing','LOADCOMMSKIP','Load cut list from commercial skips','Z,End','larch5'),('TV Editing','NEXTCUT','Jump to the next cut point','PgDown','larch5'),('TV Editing','PREVCUT','Jump to the previous cut point','PgUp','larch5'),('TV Editing','BIGJUMPREW','Jump back 10x the normal amount',',,<','larch5'),('TV Editing','BIGJUMPFWD','Jump forward 10x the normal amount','>,.','larch5'),('Teletext Menu','NEXTPAGE','Next Page','Down','larch5'),('Teletext Menu','PREVPAGE','Previous Page','Up','larch5'),('Teletext Menu','NEXTSUBPAGE','Next Subpage','Right','larch5'),('Teletext Menu','PREVSUBPAGE','Previous Subpage','Left','larch5'),('Teletext Menu','TOGGLETT','Toggle Teletext','T','larch5'),('Teletext Menu','MENURED','Menu Red','F2','larch5'),('Teletext Menu','MENUGREEN','Menu Green','F3','larch5'),('Teletext Menu','MENUYELLOW','Menu Yellow','F4','larch5'),('Teletext Menu','MENUBLUE','Menu Blue','F5','larch5'),('Teletext Menu','MENUWHITE','Menu White','F6','larch5'),('Teletext Menu','TOGGLEBACKGROUND','Toggle Background','F7','larch5'),('Teletext Menu','REVEAL','Reveal hidden Text','F8','larch5'),('Archive','TOGGLECUT','Toggle use cut list state for selected program','C','larch5'),('NetFlix','MOVETOTOP','Moves movie to top of queue','1','larch5'),('Video','DOWNLOADDATA','Download metadata for current item','W','larch5'),('Gallery','PLAY','Start/Stop Slideshow','P','larch5'),('Gallery','HOME','Go to the first image in thumbnail view','Home','larch5'),('Gallery','END','Go to the last image in thumbnail view','End','larch5'),('Gallery','MENU','Toggle activating menu in thumbnail view','M','larch5'),('Gallery','SLIDESHOW','Start Slideshow in thumbnail view','S','larch5'),('Gallery','RANDOMSHOW','Start Random Slideshow in thumbnail view','R','larch5'),('Gallery','ROTRIGHT','Rotate image right 90 degrees','],3','larch5'),('Gallery','ROTLEFT','Rotate image left 90 degrees','[,1','larch5'),('Gallery','ZOOMOUT','Zoom image out','7','larch5'),('Gallery','ZOOMIN','Zoom image in','9','larch5'),('Gallery','SCROLLUP','Scroll image up','2','larch5'),('Gallery','SCROLLLEFT','Scroll image left','4','larch5'),('Gallery','SCROLLRIGHT','Scroll image right','6','larch5'),('Gallery','SCROLLDOWN','Scroll image down','8','larch5'),('Gallery','RECENTER','Recenter image','5','larch5'),('Gallery','FULLSIZE','Full-size (un-zoom) image','0','larch5'),('Gallery','UPLEFT','Go to the upper-left corner of the image','PgUp','larch5'),('Gallery','LOWRIGHT','Go to the lower-right corner of the image','PgDown','larch5'),('Gallery','INFO','Toggle Showing Information about Image','I','larch5'),('Video','INCSEARCH','Show Incremental Search Dialog','Ctrl+S','larch5'),('Gallery','MARK','Mark image','T','larch5'),('Gallery','FULLSCREEN','Toggle scale to fullscreen/scale to fit','W','larch5'),('Game','TOGGLEFAV','Toggle the current game as a favorite','?,/','larch5'),('Game','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Game','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','NEXTTRACK','Move to the next track','>,.,Z,End','larch5'),('Music','PREVTRACK','Move to the previous track',',,<,Q,Home','larch5'),('Music','FFWD','Fast forward','PgDown','larch5'),('Music','RWND','Rewind','PgUp','larch5'),('Music','PAUSE','Pause/Start playback','P','larch5'),('Music','PLAY','Start playback','','larch5'),('Music','STOP','Stop playback','O','larch5'),('Music','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Music','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Music','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Music','CYCLEVIS','Cycle visualizer mode','6','larch5'),('Music','BLANKSCR','Blank screen','5','larch5'),('Music','THMBUP','Increase rating','9','larch5'),('Music','THMBDOWN','Decrease rating','7','larch5'),('Music','REFRESH','Refresh music tree','8','larch5'),('Music','FILTER','Filter All My Music','F','larch5'),('Music','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Music','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','SPEEDUP','Increase Play Speed','W','larch5'),('Music','SPEEDDOWN','Decrease Play Speed','X','larch5'),('News','RETRIEVENEWS','Update news items','I','larch5'),('News','FORCERETRIEVE','Force update news items','M','larch5'),('News','CANCEL','Cancel news item updating','C','larch5'),('Phone','0','0','0','larch5'),('Phone','1','1','1','larch5'),('Phone','2','2','2','larch5'),('Phone','3','3','3','larch5'),('Phone','4','4','4','larch5'),('Phone','5','5','5','larch5'),('Phone','6','6','6','larch5'),('Phone','7','7','7','larch5'),('Phone','8','8','8','larch5'),('Phone','9','9','9','larch5'),('Phone','HASH','HASH','#','larch5'),('Phone','STAR','STAR','*','larch5'),('Phone','Up','Up','Up','larch5'),('Phone','Down','Down','Down','larch5'),('Phone','Left','Left','Left','larch5'),('Phone','Right','Right','Right','larch5'),('Phone','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Phone','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Phone','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Phone','ZOOMIN','Zoom the video window in','>,.,Z,End','larch5'),('Phone','ZOOMOUT','Zoom the video window out',',,<,Q,Home','larch5'),('Phone','FULLSCRN','Show received video full-screen','P','larch5'),('Phone','HANGUP','Hangup an active call','O','larch5'),('Phone','LOOPBACK','Loopback Video','L','larch5'),('Video','FILTER','Open video filter dialog','F','larch5'),('Video','PLAYALT','Play selected item in alternate player','ALT+P','larch5'),('Video','BROWSE','Change browsable in video manager','B','larch5'),('Video','INCPARENT','Increase Parental Level','],},F11','larch5'),('Video','DECPARENT','Decrease Parental Level','[,{,F10','larch5'),('Video','HOME','Go to the first video','Home','larch5'),('Video','END','Go to the last video','End','larch5'),('Weather','PAUSE','Pause current page','P','larch5'),('Weather','SEARCH','Search List','/','larch5'),('Weather','NEXTSEARCH','Search List','n','larch5'),('Weather','UPDATE','Search List','u','larch5'),('Global','NEXT','Move to next widget','Tab','larch5'),('Global','PREVIOUS','Move to preview widget','Backtab','larch5'),('Global','BACKSPACE','Backspace','Backspace','larch5'),('Global','DELETE','Delete','D','larch5'),('Global','EDIT','Edit','E','larch5'),('Global','PAGETOP','Page to top of list','','larch5'),('Global','PAGEMIDDLE','Page to middle of list','','larch5'),('Global','PAGEBOTTOM','Page to bottom of list','','larch5'),('Browser','ZOOMIN','Zoom in on browser window','.,>','larch5'),('Browser','ZOOMOUT','Zoom out on browser window',',,<','larch5'),('Browser','TOGGLEINPUT','Toggle where keyboard input goes to','F1','larch5'),('Browser','MOUSEUP','Move mouse pointer up','2','larch5'),('Browser','MOUSEDOWN','Move mouse pointer down','8','larch5'),('Browser','MOUSELEFT','Move mouse pointer left','4','larch5'),('Browser','MOUSERIGHT','Move mouse pointer right','6','larch5'),('Browser','MOUSELEFTBUTTON','Mouse Left button click','5','larch5'),('Browser','PAGEDOWN','Scroll down half a page','9','larch5'),('Browser','PAGEUP','Scroll up half a page','3','larch5'),('Browser','PAGELEFT','Scroll left half a page','7','larch5'),('Browser','PAGERIGHT','Scroll right half a page','1','larch5'),('Browser','NEXTLINK','Move selection to next link','Z','larch5'),('Browser','PREVIOUSLINK','Move selection to previous link','Q','larch5'),('Browser','FOLLOWLINK','Follow selected link','Return,Space,Enter','larch5'),('Browser','HISTORYBACK','Go back to previous page','R,Backspace','larch5'),('Browser','HISTORYFORWARD','Go forward to previous page','F','larch5'),('Welcome','STARTXTERM','Open an Xterm window','F12','larch5'),('Welcome','SHOWSETTINGS','Show Mythshutdown settings','F11','larch5'),('TV Playback','TOGGLEPIPSTATE','Change PxP view','','larch5'),('Browser','NEXTTAB','Move to next browser tab','P','larch5'),('Browser','PREVTAB','Move to previous browser tab','','larch5'),('Video','ITEMDETAIL','Display Item Detail Popup','','larch5'),('Global','CUT','Cut text from textedit','Ctrl+X','larch5'),('Global','COPY','Copy text from textedit','Ctrl+C','larch5'),('Global','PASTE','Paste text into textedit','Ctrl+V','larch5'),('Global','SYSEVENT01','Trigger System Key Event #1','','larch5'),('Global','SYSEVENT02','Trigger System Key Event #2','','larch5'),('Global','SYSEVENT03','Trigger System Key Event #3','','larch5'),('Global','SYSEVENT04','Trigger System Key Event #4','','larch5'),('Global','SYSEVENT05','Trigger System Key Event #5','','larch5'),('Global','SYSEVENT06','Trigger System Key Event #6','','larch5'),('Global','SYSEVENT07','Trigger System Key Event #7','','larch5'),('Global','SYSEVENT08','Trigger System Key Event #8','','larch5'),('Global','SYSEVENT09','Trigger System Key Event #9','','larch5'),('Global','SYSEVENT10','Trigger System Key Event #10','','larch5'),('TV Frontend','CUSTOMEDIT','Edit Custom Record Rule','','larch5'),('TV Playback','TOGGLEUPMIX','Toggle audio upmixer','Ctrl+U','larch5'),('Music','TOGGLEUPMIX','Toggle audio upmixer','Ctrl+U','larch5');
+/*!40000 ALTER TABLE `keybindings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keyword`
+--
+
+DROP TABLE IF EXISTS `keyword`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keyword` (
+  `phrase` varchar(128) character set utf8 collate utf8_bin NOT NULL default '',
+  `searchtype` int(10) unsigned NOT NULL default '3',
+  UNIQUE KEY `phrase` (`phrase`,`searchtype`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keyword`
+--
+
+LOCK TABLES `keyword` WRITE;
+/*!40000 ALTER TABLE `keyword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `keyword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albumart`
+--
+
+DROP TABLE IF EXISTS `music_albumart`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albumart` (
+  `albumart_id` int(20) NOT NULL auto_increment,
+  `filename` varchar(255) NOT NULL default '',
+  `directory_id` int(20) NOT NULL default '0',
+  `imagetype` tinyint(3) NOT NULL default '0',
+  `song_id` int(11) NOT NULL default '0',
+  `embedded` tinyint(1) NOT NULL default '0',
+  PRIMARY KEY  (`albumart_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albumart`
+--
+
+LOCK TABLES `music_albumart` WRITE;
+/*!40000 ALTER TABLE `music_albumart` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albumart` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albums`
+--
+
+DROP TABLE IF EXISTS `music_albums`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albums` (
+  `album_id` int(11) unsigned NOT NULL auto_increment,
+  `artist_id` int(11) unsigned NOT NULL default '0',
+  `album_name` varchar(255) NOT NULL default '',
+  `year` smallint(6) NOT NULL default '0',
+  `compilation` tinyint(1) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`album_id`),
+  KEY `idx_album_name` (`album_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albums`
+--
+
+LOCK TABLES `music_albums` WRITE;
+/*!40000 ALTER TABLE `music_albums` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albums` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_artists`
+--
+
+DROP TABLE IF EXISTS `music_artists`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_artists` (
+  `artist_id` int(11) unsigned NOT NULL auto_increment,
+  `artist_name` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`artist_id`),
+  KEY `idx_artist_name` (`artist_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_artists`
+--
+
+LOCK TABLES `music_artists` WRITE;
+/*!40000 ALTER TABLE `music_artists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_artists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_directories`
+--
+
+DROP TABLE IF EXISTS `music_directories`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_directories` (
+  `directory_id` int(20) NOT NULL auto_increment,
+  `path` text NOT NULL,
+  `parent_id` int(20) NOT NULL default '0',
+  PRIMARY KEY  (`directory_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_directories`
+--
+
+LOCK TABLES `music_directories` WRITE;
+/*!40000 ALTER TABLE `music_directories` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_directories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_genres`
+--
+
+DROP TABLE IF EXISTS `music_genres`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_genres` (
+  `genre_id` int(11) unsigned NOT NULL auto_increment,
+  `genre` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`genre_id`),
+  KEY `idx_genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_genres`
+--
+
+LOCK TABLES `music_genres` WRITE;
+/*!40000 ALTER TABLE `music_genres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_genres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_playlists`
+--
+
+DROP TABLE IF EXISTS `music_playlists`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_playlists` (
+  `playlist_id` int(11) unsigned NOT NULL auto_increment,
+  `playlist_name` varchar(255) NOT NULL default '',
+  `playlist_songs` text NOT NULL,
+  `last_accessed` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `length` int(11) unsigned NOT NULL default '0',
+  `songcount` smallint(8) unsigned NOT NULL default '0',
+  `hostname` varchar(64) NOT NULL default '',
+  PRIMARY KEY  (`playlist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_playlists`
+--
+
+LOCK TABLES `music_playlists` WRITE;
+/*!40000 ALTER TABLE `music_playlists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_playlists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_categories`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_categories`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_categories` (
+  `categoryid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL,
+  PRIMARY KEY  (`categoryid`),
+  KEY `name` (`name`)
+) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_categories`
+--
+
+LOCK TABLES `music_smartplaylist_categories` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_categories` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_categories` VALUES (1,'Decades'),(2,'Favourite Tracks'),(3,'New Tracks');
+/*!40000 ALTER TABLE `music_smartplaylist_categories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_items`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_items`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_items` (
+  `smartplaylistitemid` int(10) unsigned NOT NULL auto_increment,
+  `smartplaylistid` int(10) unsigned NOT NULL,
+  `field` varchar(50) NOT NULL,
+  `operator` varchar(20) NOT NULL,
+  `value1` varchar(255) NOT NULL,
+  `value2` varchar(255) NOT NULL,
+  PRIMARY KEY  (`smartplaylistitemid`),
+  KEY `smartplaylistid` (`smartplaylistid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_items`
+--
+
+LOCK TABLES `music_smartplaylist_items` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_items` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_items` VALUES (1,1,'Year','is between','1960','1969'),(2,2,'Year','is between','1970','1979'),(3,3,'Year','is between','1980','1989'),(4,4,'Year','is between','1990','1999'),(5,5,'Year','is between','2000','2009'),(6,6,'Rating','is greater than','7','0'),(7,7,'Play Count','is greater than','0','0'),(8,8,'Play Count','is equal to','0','0');
+/*!40000 ALTER TABLE `music_smartplaylist_items` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylists`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylists`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylists` (
+  `smartplaylistid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL,
+  `categoryid` int(10) unsigned NOT NULL,
+  `matchtype` set('All','Any') character set latin1 NOT NULL default 'All',
+  `orderby` varchar(128) NOT NULL default '',
+  `limitto` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`smartplaylistid`),
+  KEY `name` (`name`),
+  KEY `categoryid` (`categoryid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylists`
+--
+
+LOCK TABLES `music_smartplaylists` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylists` DISABLE KEYS */;
+INSERT INTO `music_smartplaylists` VALUES (1,'1960\'s',1,'All','Artist (A)',0),(2,'1970\'s',1,'All','Artist (A)',0),(3,'1980\'s',1,'All','Artist (A)',0),(4,'1990\'s',1,'All','Artist (A)',0),(5,'2000\'s',1,'All','Artist (A)',0),(6,'Favorite Tracks',2,'All','Artist (A), Album (A)',0),(7,'100 Most Played Tracks',2,'All','Play Count (D)',100),(8,'Never Played Tracks',3,'All','Artist (A), Album (A)',0);
+/*!40000 ALTER TABLE `music_smartplaylists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_songs`
+--
+
+DROP TABLE IF EXISTS `music_songs`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_songs` (
+  `song_id` int(11) unsigned NOT NULL auto_increment,
+  `filename` text NOT NULL,
+  `name` varchar(255) NOT NULL default '',
+  `track` smallint(6) unsigned NOT NULL default '0',
+  `artist_id` int(11) unsigned NOT NULL default '0',
+  `album_id` int(11) unsigned NOT NULL default '0',
+  `genre_id` int(11) unsigned NOT NULL default '0',
+  `year` smallint(6) NOT NULL default '0',
+  `length` int(11) unsigned NOT NULL default '0',
+  `numplays` int(11) unsigned NOT NULL default '0',
+  `rating` tinyint(4) unsigned NOT NULL default '0',
+  `lastplay` datetime default NULL,
+  `date_entered` datetime default NULL,
+  `date_modified` datetime default NULL,
+  `format` varchar(4) NOT NULL default '0',
+  `mythdigest` varchar(255) default NULL,
+  `size` bigint(20) unsigned default NULL,
+  `description` varchar(255) default NULL,
+  `comment` varchar(255) default NULL,
+  `disc_count` smallint(5) unsigned default '0',
+  `disc_number` smallint(5) unsigned default '0',
+  `track_count` smallint(5) unsigned default '0',
+  `start_time` int(10) unsigned default '0',
+  `stop_time` int(10) unsigned default NULL,
+  `eq_preset` varchar(255) default NULL,
+  `relative_volume` tinyint(4) default '0',
+  `sample_rate` int(10) unsigned default '0',
+  `bitrate` int(10) unsigned default '0',
+  `bpm` smallint(5) unsigned default NULL,
+  `directory_id` int(20) NOT NULL default '0',
+  PRIMARY KEY  (`song_id`),
+  KEY `idx_name` (`name`),
+  KEY `idx_mythdigest` (`mythdigest`),
+  KEY `directory_id` (`directory_id`),
+  KEY `album_id` (`album_id`),
+  KEY `genre_id` (`genre_id`),
+  KEY `artist_id` (`artist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_songs`
+--
+
+LOCK TABLES `music_songs` WRITE;
+/*!40000 ALTER TABLE `music_songs` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_songs` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_stats`
+--
+
+DROP TABLE IF EXISTS `music_stats`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_stats` (
+  `num_artists` smallint(5) unsigned NOT NULL default '0',
+  `num_albums` smallint(5) unsigned NOT NULL default '0',
+  `num_songs` mediumint(8) unsigned NOT NULL default '0',
+  `num_genres` tinyint(3) unsigned NOT NULL default '0',
+  `total_time` varchar(12) NOT NULL default '0',
+  `total_size` varchar(10) NOT NULL default '0'
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_stats`
+--
+
+LOCK TABLES `music_stats` WRITE;
+/*!40000 ALTER TABLE `music_stats` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_stats` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `mythlog`
+--
+
+DROP TABLE IF EXISTS `mythlog`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `mythlog` (
+  `logid` int(10) unsigned NOT NULL auto_increment,
+  `module` varchar(32) NOT NULL default '',
+  `priority` int(11) NOT NULL default '0',
+  `acknowledged` tinyint(1) default '0',
+  `logdate` datetime default NULL,
+  `host` varchar(128) default NULL,
+  `message` varchar(255) NOT NULL default '',
+  `details` text,
+  PRIMARY KEY  (`logid`),
+  KEY `module` (`module`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `mythlog`
+--
+
+LOCK TABLES `mythlog` WRITE;
+/*!40000 ALTER TABLE `mythlog` DISABLE KEYS */;
+/*!40000 ALTER TABLE `mythlog` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `netflix`
+--
+
+DROP TABLE IF EXISTS `netflix`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `netflix` (
+  `name` varchar(100) NOT NULL,
+  `category` varchar(255) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `ico` varchar(255) default NULL,
+  `updated` int(10) unsigned default NULL,
+  `is_queue` int(10) unsigned default NULL,
+  `queue` varchar(32) NOT NULL default '',
+  PRIMARY KEY  (`name`,`queue`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `netflix`
+--
+
+LOCK TABLES `netflix` WRITE;
+/*!40000 ALTER TABLE `netflix` DISABLE KEYS */;
+/*!40000 ALTER TABLE `netflix` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `networkiconmap`
+--
+
+DROP TABLE IF EXISTS `networkiconmap`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `networkiconmap` (
+  `id` int(11) NOT NULL auto_increment,
+  `network` varchar(20) NOT NULL default '',
+  `url` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `network` (`network`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `networkiconmap`
+--
+
+LOCK TABLES `networkiconmap` WRITE;
+/*!40000 ALTER TABLE `networkiconmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `networkiconmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldfind`
+--
+
+DROP TABLE IF EXISTS `oldfind`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldfind` (
+  `recordid` int(11) NOT NULL default '0',
+  `findid` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`recordid`,`findid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldfind`
+--
+
+LOCK TABLES `oldfind` WRITE;
+/*!40000 ALTER TABLE `oldfind` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldfind` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldprogram`
+--
+
+DROP TABLE IF EXISTS `oldprogram`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldprogram` (
+  `oldtitle` varchar(128) character set utf8 collate utf8_bin NOT NULL default '',
+  `airdate` datetime NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY  (`oldtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldprogram`
+--
+
+LOCK TABLES `oldprogram` WRITE;
+/*!40000 ALTER TABLE `oldprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldrecorded`
+--
+
+DROP TABLE IF EXISTS `oldrecorded`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldrecorded` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `seriesid` varchar(40) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `findid` int(11) NOT NULL default '0',
+  `recordid` int(11) NOT NULL default '0',
+  `station` varchar(20) NOT NULL default '',
+  `rectype` int(10) unsigned NOT NULL default '0',
+  `duplicate` tinyint(1) NOT NULL default '0',
+  `recstatus` int(11) NOT NULL default '0',
+  `reactivate` smallint(6) NOT NULL default '0',
+  `generic` tinyint(1) default '0',
+  PRIMARY KEY  (`station`,`starttime`,`title`),
+  KEY `endtime` (`endtime`),
+  KEY `title` (`title`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `recordid` (`recordid`),
+  KEY `recstatus` (`recstatus`,`programid`,`seriesid`),
+  KEY `recstatus_2` (`recstatus`,`title`,`subtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldrecorded`
+--
+
+LOCK TABLES `oldrecorded` WRITE;
+/*!40000 ALTER TABLE `oldrecorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldrecorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `people`
+--
+
+DROP TABLE IF EXISTS `people`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `people` (
+  `person` mediumint(8) unsigned NOT NULL auto_increment,
+  `name` varchar(128) character set utf8 collate utf8_bin NOT NULL default '',
+  PRIMARY KEY  (`person`),
+  UNIQUE KEY `name` (`name`(41))
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `people`
+--
+
+LOCK TABLES `people` WRITE;
+/*!40000 ALTER TABLE `people` DISABLE KEYS */;
+/*!40000 ALTER TABLE `people` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonecallhistory`
+--
+
+DROP TABLE IF EXISTS `phonecallhistory`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonecallhistory` (
+  `recid` int(10) unsigned NOT NULL auto_increment,
+  `displayname` text NOT NULL,
+  `url` text NOT NULL,
+  `timestamp` text NOT NULL,
+  `duration` int(10) unsigned NOT NULL,
+  `directionin` int(10) unsigned NOT NULL,
+  `directoryref` int(10) unsigned default NULL,
+  PRIMARY KEY  (`recid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonecallhistory`
+--
+
+LOCK TABLES `phonecallhistory` WRITE;
+/*!40000 ALTER TABLE `phonecallhistory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `phonecallhistory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonedirectory`
+--
+
+DROP TABLE IF EXISTS `phonedirectory`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonedirectory` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `nickname` text NOT NULL,
+  `firstname` text,
+  `surname` text,
+  `url` text NOT NULL,
+  `directory` text NOT NULL,
+  `photofile` text,
+  `speeddial` int(10) unsigned NOT NULL,
+  `onhomelan` int(10) unsigned default '0',
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonedirectory`
+--
+
+LOCK TABLES `phonedirectory` WRITE;
+/*!40000 ALTER TABLE `phonedirectory` DISABLE KEYS */;
+INSERT INTO `phonedirectory` VALUES (1,'Me(larch5)','Local Myth Host','larch5','','My MythTVs','',1,1);
+/*!40000 ALTER TABLE `phonedirectory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `pidcache`
+--
+
+DROP TABLE IF EXISTS `pidcache`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `pidcache` (
+  `chanid` smallint(6) NOT NULL default '0',
+  `pid` int(11) NOT NULL default '-1',
+  `tableid` int(11) NOT NULL default '-1',
+  KEY `chanid` (`chanid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `pidcache`
+--
+
+LOCK TABLES `pidcache` WRITE;
+/*!40000 ALTER TABLE `pidcache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `pidcache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `playgroup`
+--
+
+DROP TABLE IF EXISTS `playgroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `playgroup` (
+  `name` varchar(32) NOT NULL default '',
+  `titlematch` varchar(255) NOT NULL default '',
+  `skipahead` int(11) NOT NULL default '0',
+  `skipback` int(11) NOT NULL default '0',
+  `timestretch` int(11) NOT NULL default '0',
+  `jump` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `playgroup`
+--
+
+LOCK TABLES `playgroup` WRITE;
+/*!40000 ALTER TABLE `playgroup` DISABLE KEYS */;
+INSERT INTO `playgroup` VALUES ('Default','',30,5,100,0);
+/*!40000 ALTER TABLE `playgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `powerpriority`
+--
+
+DROP TABLE IF EXISTS `powerpriority`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `powerpriority` (
+  `priorityname` varchar(64) character set utf8 collate utf8_bin NOT NULL,
+  `recpriority` int(10) NOT NULL default '0',
+  `selectclause` text NOT NULL,
+  PRIMARY KEY  (`priorityname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `powerpriority`
+--
+
+LOCK TABLES `powerpriority` WRITE;
+/*!40000 ALTER TABLE `powerpriority` DISABLE KEYS */;
+/*!40000 ALTER TABLE `powerpriority` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `profilegroups`
+--
+
+DROP TABLE IF EXISTS `profilegroups`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `profilegroups` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) default NULL,
+  `cardtype` varchar(32) NOT NULL default 'V4L',
+  `is_default` int(1) default '0',
+  `hostname` varchar(64) default NULL,
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `name` (`name`,`hostname`),
+  KEY `cardtype` (`cardtype`)
+) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `profilegroups`
+--
+
+LOCK TABLES `profilegroups` WRITE;
+/*!40000 ALTER TABLE `profilegroups` DISABLE KEYS */;
+INSERT INTO `profilegroups` VALUES (1,'Software Encoders (v4l based)','V4L',1,NULL),(2,'MPEG-2 Encoders (PVR-x50, PVR-500)','MPEG',1,NULL),(3,'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)','MJPEG',1,NULL),(4,'Hardware HDTV','HDTV',1,NULL),(5,'Hardware DVB Encoders','DVB',1,NULL),(6,'Transcoders','TRANSCODE',1,NULL),(7,'FireWire Input','FIREWIRE',1,NULL),(8,'USB Mpeg-4 Encoder (Plextor ConvertX, etc)','GO7007',1,NULL),(14,'Import Recorder','IMPORT',1,NULL),(10,'Freebox Input','Freebox',1,NULL),(11,'HDHomeRun Recorders','HDHOMERUN',1,NULL),(12,'CRC IP Recorders','CRC_IP',1,NULL),(13,'HD-PVR Recorders','HDPVR',1,NULL);
+/*!40000 ALTER TABLE `profilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `program`
+--
+
+DROP TABLE IF EXISTS `program`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `program` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `category_type` varchar(64) NOT NULL default '',
+  `airdate` year(4) NOT NULL default '0000',
+  `stars` float NOT NULL default '0',
+  `previouslyshown` tinyint(4) NOT NULL default '0',
+  `title_pronounce` varchar(128) NOT NULL default '',
+  `stereo` tinyint(1) NOT NULL default '0',
+  `subtitled` tinyint(1) NOT NULL default '0',
+  `hdtv` tinyint(1) NOT NULL default '0',
+  `closecaptioned` tinyint(1) NOT NULL default '0',
+  `partnumber` int(11) NOT NULL default '0',
+  `parttotal` int(11) NOT NULL default '0',
+  `seriesid` varchar(64) NOT NULL default '',
+  `originalairdate` date default NULL,
+  `showtype` varchar(30) NOT NULL default '',
+  `colorcode` varchar(20) NOT NULL default '',
+  `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+  `programid` varchar(64) NOT NULL default '',
+  `manualid` int(10) unsigned NOT NULL default '0',
+  `generic` tinyint(1) default '0',
+  `listingsource` int(11) NOT NULL default '0',
+  `first` tinyint(1) NOT NULL default '0',
+  `last` tinyint(1) NOT NULL default '0',
+  `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') character set latin1 NOT NULL,
+  `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') character set latin1 NOT NULL,
+  `videoprop` set('HDTV','WIDESCREEN','AVC') character set latin1 NOT NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`manualid`),
+  KEY `endtime` (`endtime`),
+  KEY `title` (`title`),
+  KEY `title_pronounce` (`title_pronounce`),
+  KEY `seriesid` (`seriesid`),
+  KEY `id_start_end` (`chanid`,`starttime`,`endtime`),
+  KEY `program_manualid` (`manualid`),
+  KEY `previouslyshown` (`previouslyshown`),
+  KEY `programid` (`programid`,`starttime`),
+  KEY `starttime` (`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `program`
+--
+
+LOCK TABLES `program` WRITE;
+/*!40000 ALTER TABLE `program` DISABLE KEYS */;
+/*!40000 ALTER TABLE `program` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programgenres`
+--
+
+DROP TABLE IF EXISTS `programgenres`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programgenres` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `relevance` char(1) NOT NULL default '',
+  `genre` varchar(30) default NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`relevance`),
+  KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programgenres`
+--
+
+LOCK TABLES `programgenres` WRITE;
+/*!40000 ALTER TABLE `programgenres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programgenres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programrating`
+--
+
+DROP TABLE IF EXISTS `programrating`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programrating` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `system` varchar(8) default NULL,
+  `rating` varchar(16) default NULL,
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+  KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programrating`
+--
+
+LOCK TABLES `programrating` WRITE;
+/*!40000 ALTER TABLE `programrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recgrouppassword`
+--
+
+DROP TABLE IF EXISTS `recgrouppassword`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recgrouppassword` (
+  `recgroup` varchar(32) character set utf8 collate utf8_bin NOT NULL default '',
+  `password` varchar(10) NOT NULL default '',
+  PRIMARY KEY  (`recgroup`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recgrouppassword`
+--
+
+LOCK TABLES `recgrouppassword` WRITE;
+/*!40000 ALTER TABLE `recgrouppassword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recgrouppassword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `record`
+--
+
+DROP TABLE IF EXISTS `record`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `record` (
+  `recordid` int(10) unsigned NOT NULL auto_increment,
+  `type` int(10) unsigned NOT NULL default '0',
+  `chanid` int(10) unsigned default NULL,
+  `starttime` time NOT NULL default '00:00:00',
+  `startdate` date NOT NULL default '0000-00-00',
+  `endtime` time NOT NULL default '00:00:00',
+  `enddate` date NOT NULL default '0000-00-00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `profile` varchar(128) NOT NULL default 'Default',
+  `recpriority` int(10) NOT NULL default '0',
+  `autoexpire` int(11) NOT NULL default '0',
+  `maxepisodes` int(11) NOT NULL default '0',
+  `maxnewest` int(11) NOT NULL default '0',
+  `startoffset` int(11) NOT NULL default '0',
+  `endoffset` int(11) NOT NULL default '0',
+  `recgroup` varchar(32) NOT NULL default 'Default',
+  `dupmethod` int(11) NOT NULL default '6',
+  `dupin` int(11) NOT NULL default '15',
+  `station` varchar(20) NOT NULL default '',
+  `seriesid` varchar(40) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `search` int(10) unsigned NOT NULL default '0',
+  `autotranscode` tinyint(1) NOT NULL default '0',
+  `autocommflag` tinyint(1) NOT NULL default '0',
+  `autouserjob1` tinyint(1) NOT NULL default '0',
+  `autouserjob2` tinyint(1) NOT NULL default '0',
+  `autouserjob3` tinyint(1) NOT NULL default '0',
+  `autouserjob4` tinyint(1) NOT NULL default '0',
+  `findday` tinyint(4) NOT NULL default '0',
+  `findtime` time NOT NULL default '00:00:00',
+  `findid` int(11) NOT NULL default '0',
+  `inactive` tinyint(1) NOT NULL default '0',
+  `parentid` int(11) NOT NULL default '0',
+  `transcoder` int(11) NOT NULL default '0',
+  `tsdefault` float NOT NULL default '1',
+  `playgroup` varchar(32) NOT NULL default 'Default',
+  `prefinput` int(10) NOT NULL default '0',
+  `next_record` datetime NOT NULL,
+  `last_record` datetime NOT NULL,
+  `last_delete` datetime NOT NULL,
+  `storagegroup` varchar(32) NOT NULL default 'Default',
+  `avg_delay` int(11) NOT NULL default '100',
+  PRIMARY KEY  (`recordid`),
+  KEY `chanid` (`chanid`,`starttime`),
+  KEY `title` (`title`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `maxepisodes` (`maxepisodes`),
+  KEY `search` (`search`),
+  KEY `type` (`type`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `record`
+--
+
+LOCK TABLES `record` WRITE;
+/*!40000 ALTER TABLE `record` DISABLE KEYS */;
+/*!40000 ALTER TABLE `record` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recorded`
+--
+
+DROP TABLE IF EXISTS `recorded`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recorded` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `hostname` varchar(64) NOT NULL default '',
+  `bookmark` tinyint(1) NOT NULL default '0',
+  `editing` int(10) unsigned NOT NULL default '0',
+  `cutlist` tinyint(1) NOT NULL default '0',
+  `autoexpire` int(11) NOT NULL default '0',
+  `commflagged` int(10) unsigned NOT NULL default '0',
+  `recgroup` varchar(32) NOT NULL default 'Default',
+  `recordid` int(11) default NULL,
+  `seriesid` varchar(40) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `lastmodified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `filesize` bigint(20) NOT NULL default '0',
+  `stars` float NOT NULL default '0',
+  `previouslyshown` tinyint(1) default '0',
+  `originalairdate` date default NULL,
+  `preserve` tinyint(1) NOT NULL default '0',
+  `findid` int(11) NOT NULL default '0',
+  `deletepending` tinyint(1) NOT NULL default '0',
+  `transcoder` int(11) NOT NULL default '0',
+  `timestretch` float NOT NULL default '1',
+  `recpriority` int(11) NOT NULL default '0',
+  `basename` varchar(255) NOT NULL,
+  `progstart` datetime NOT NULL default '0000-00-00 00:00:00',
+  `progend` datetime NOT NULL default '0000-00-00 00:00:00',
+  `playgroup` varchar(32) NOT NULL default 'Default',
+  `profile` varchar(32) NOT NULL default '',
+  `duplicate` tinyint(1) NOT NULL default '0',
+  `transcoded` tinyint(1) NOT NULL default '0',
+  `watched` tinyint(4) NOT NULL default '0',
+  `storagegroup` varchar(32) NOT NULL default 'Default',
+  `bookmarkupdate` timestamp NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY  (`chanid`,`starttime`),
+  KEY `endtime` (`endtime`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `title` (`title`),
+  KEY `recordid` (`recordid`),
+  KEY `deletepending` (`deletepending`,`lastmodified`),
+  KEY `recgroup` (`recgroup`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recorded`
+--
+
+LOCK TABLES `recorded` WRITE;
+/*!40000 ALTER TABLE `recorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedcredits`
+--
+
+DROP TABLE IF EXISTS `recordedcredits`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedcredits` (
+  `person` mediumint(8) unsigned NOT NULL default '0',
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') character set latin1 NOT NULL default '',
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+  KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedcredits`
+--
+
+LOCK TABLES `recordedcredits` WRITE;
+/*!40000 ALTER TABLE `recordedcredits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedcredits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedfile`
+--
+
+DROP TABLE IF EXISTS `recordedfile`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedfile` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `basename` varchar(128) NOT NULL default '',
+  `filesize` bigint(20) NOT NULL default '0',
+  `width` smallint(5) unsigned NOT NULL default '0',
+  `height` smallint(5) unsigned NOT NULL default '0',
+  `fps` float(6,3) NOT NULL default '0.000',
+  `aspect` float(8,6) NOT NULL default '0.000000',
+  `audio_sample_rate` smallint(5) unsigned NOT NULL default '0',
+  `audio_bits_per_sample` smallint(5) unsigned NOT NULL default '0',
+  `audio_channels` tinyint(3) unsigned NOT NULL default '0',
+  `audio_type` varchar(255) NOT NULL default '',
+  `video_type` varchar(255) NOT NULL default '',
+  `comment` varchar(255) NOT NULL default '',
+  `hostname` varchar(64) NOT NULL,
+  `storagegroup` varchar(32) NOT NULL,
+  `id` int(11) NOT NULL auto_increment,
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`basename`),
+  KEY `basename` (`basename`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedfile`
+--
+
+LOCK TABLES `recordedfile` WRITE;
+/*!40000 ALTER TABLE `recordedfile` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedfile` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedmarkup`
+--
+
+DROP TABLE IF EXISTS `recordedmarkup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedmarkup` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `mark` mediumint(8) unsigned NOT NULL default '0',
+  `type` tinyint(4) NOT NULL default '0',
+  `data` int(11) unsigned default NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedmarkup`
+--
+
+LOCK TABLES `recordedmarkup` WRITE;
+/*!40000 ALTER TABLE `recordedmarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedmarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedprogram`
+--
+
+DROP TABLE IF EXISTS `recordedprogram`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedprogram` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `category_type` varchar(64) NOT NULL default '',
+  `airdate` year(4) NOT NULL default '0000',
+  `stars` float unsigned NOT NULL default '0',
+  `previouslyshown` tinyint(4) NOT NULL default '0',
+  `title_pronounce` varchar(128) NOT NULL default '',
+  `stereo` tinyint(1) NOT NULL default '0',
+  `subtitled` tinyint(1) NOT NULL default '0',
+  `hdtv` tinyint(1) NOT NULL default '0',
+  `closecaptioned` tinyint(1) NOT NULL default '0',
+  `partnumber` int(11) NOT NULL default '0',
+  `parttotal` int(11) NOT NULL default '0',
+  `seriesid` varchar(40) NOT NULL default '',
+  `originalairdate` date default NULL,
+  `showtype` varchar(30) NOT NULL default '',
+  `colorcode` varchar(20) NOT NULL default '',
+  `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `manualid` int(10) unsigned NOT NULL default '0',
+  `generic` tinyint(1) default '0',
+  `listingsource` int(11) NOT NULL default '0',
+  `first` tinyint(1) NOT NULL default '0',
+  `last` tinyint(1) NOT NULL default '0',
+  `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') character set latin1 NOT NULL,
+  `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') character set latin1 NOT NULL,
+  `videoprop` set('HDTV','WIDESCREEN','AVC','720','1080') NOT NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`manualid`),
+  KEY `endtime` (`endtime`),
+  KEY `title` (`title`),
+  KEY `title_pronounce` (`title_pronounce`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `id_start_end` (`chanid`,`starttime`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedprogram`
+--
+
+LOCK TABLES `recordedprogram` WRITE;
+/*!40000 ALTER TABLE `recordedprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedrating`
+--
+
+DROP TABLE IF EXISTS `recordedrating`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedrating` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `system` varchar(8) default NULL,
+  `rating` varchar(16) default NULL,
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+  KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedrating`
+--
+
+LOCK TABLES `recordedrating` WRITE;
+/*!40000 ALTER TABLE `recordedrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedseek`
+--
+
+DROP TABLE IF EXISTS `recordedseek`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedseek` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `mark` mediumint(8) unsigned NOT NULL default '0',
+  `offset` bigint(20) unsigned NOT NULL,
+  `type` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedseek`
+--
+
+LOCK TABLES `recordedseek` WRITE;
+/*!40000 ALTER TABLE `recordedseek` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedseek` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordingprofiles`
+--
+
+DROP TABLE IF EXISTS `recordingprofiles`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordingprofiles` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) default NULL,
+  `videocodec` varchar(128) default NULL,
+  `audiocodec` varchar(128) default NULL,
+  `profilegroup` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `profilegroup` (`profilegroup`)
+) ENGINE=MyISAM AUTO_INCREMENT=58 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordingprofiles`
+--
+
+LOCK TABLES `recordingprofiles` WRITE;
+/*!40000 ALTER TABLE `recordingprofiles` DISABLE KEYS */;
+INSERT INTO `recordingprofiles` VALUES (1,'Default',NULL,NULL,1),(2,'Live TV',NULL,NULL,1),(3,'High Quality',NULL,NULL,1),(4,'Low Quality',NULL,NULL,1),(5,'Default',NULL,NULL,2),(6,'Live TV',NULL,NULL,2),(7,'High Quality',NULL,NULL,2),(8,'Low Quality',NULL,NULL,2),(9,'Default',NULL,NULL,3),(10,'Live TV',NULL,NULL,3),(11,'High Quality',NULL,NULL,3),(12,'Low Quality',NULL,NULL,3),(13,'Default',NULL,NULL,4),(14,'Live TV',NULL,NULL,4),(15,'High Quality',NULL,NULL,4),(16,'Low Quality',NULL,NULL,4),(17,'Default',NULL,NULL,5),(18,'Live TV',NULL,NULL,5),(19,'High Quality',NULL,NULL,5),(20,'Low Quality',NULL,NULL,5),(21,'RTjpeg/MPEG4',NULL,NULL,6),(22,'MPEG2',NULL,NULL,6),(23,'Default',NULL,NULL,8),(24,'Live TV',NULL,NULL,8),(25,'High Quality',NULL,NULL,8),(26,'Low Quality',NULL,NULL,8),(27,'High Quality',NULL,NULL,6),(28,'Medium Quality',NULL,NULL,6),(29,'Low Quality',NULL,NULL,6),(30,'Default',NULL,NULL,10),(31,'Live TV',NULL,NULL,10),(32,'High Quality',NULL,NULL,10),(33,'Low Quality',NULL,NULL,10),(34,'Default',NULL,NULL,11),(35,'Live TV',NULL,NULL,11),(36,'High Quality',NULL,NULL,11),(37,'Low Quality',NULL,NULL,11),(38,'Default',NULL,NULL,12),(39,'Live TV',NULL,NULL,12),(40,'High Quality',NULL,NULL,12),(41,'Low Quality',NULL,NULL,12),(42,'Default',NULL,NULL,7),(43,'Live TV',NULL,NULL,7),(44,'High Quality',NULL,NULL,7),(45,'Low Quality',NULL,NULL,7),(46,'Default',NULL,NULL,9),(47,'Live TV',NULL,NULL,9),(48,'High Quality',NULL,NULL,9),(49,'Low Quality',NULL,NULL,9),(50,'Default',NULL,NULL,13),(51,'Live TV',NULL,NULL,13),(52,'High Quality',NULL,NULL,13),(53,'Low Quality',NULL,NULL,13),(54,'Default',NULL,NULL,14),(55,'Live TV',NULL,NULL,14),(56,'High Quality',NULL,NULL,14),(57,'Low Quality',NULL,NULL,14);
+/*!40000 ALTER TABLE `recordingprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordmatch`
+--
+
+DROP TABLE IF EXISTS `recordmatch`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordmatch` (
+  `recordid` int(10) unsigned default NULL,
+  `chanid` int(10) unsigned default NULL,
+  `starttime` datetime default NULL,
+  `manualid` int(10) unsigned default NULL,
+  `oldrecduplicate` tinyint(1) default NULL,
+  `recduplicate` tinyint(1) default NULL,
+  `findduplicate` tinyint(1) default NULL,
+  `oldrecstatus` int(11) default NULL,
+  KEY `recordid` (`recordid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordmatch`
+--
+
+LOCK TABLES `recordmatch` WRITE;
+/*!40000 ALTER TABLE `recordmatch` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordmatch` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `romdb`
+--
+
+DROP TABLE IF EXISTS `romdb`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `romdb` (
+  `crc` varchar(64) NOT NULL default '',
+  `name` varchar(128) NOT NULL default '',
+  `description` varchar(128) NOT NULL default '',
+  `category` varchar(128) NOT NULL default '',
+  `year` varchar(10) NOT NULL default '',
+  `manufacturer` varchar(128) NOT NULL default '',
+  `country` varchar(128) NOT NULL default '',
+  `publisher` varchar(128) NOT NULL default '',
+  `platform` varchar(64) NOT NULL default '',
+  `filesize` int(12) default NULL,
+  `flags` varchar(64) NOT NULL default '',
+  `version` varchar(64) NOT NULL default '',
+  `binfile` varchar(64) NOT NULL default '',
+  KEY `crc` (`crc`),
+  KEY `year` (`year`),
+  KEY `category` (`category`),
+  KEY `name` (`name`),
+  KEY `description` (`description`),
+  KEY `platform` (`platform`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `romdb`
+--
+
+LOCK TABLES `romdb` WRITE;
+/*!40000 ALTER TABLE `romdb` DISABLE KEYS */;
+/*!40000 ALTER TABLE `romdb` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `schemalock`
+--
+
+DROP TABLE IF EXISTS `schemalock`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `schemalock` (
+  `schemalock` int(1) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `schemalock`
+--
+
+LOCK TABLES `schemalock` WRITE;
+/*!40000 ALTER TABLE `schemalock` DISABLE KEYS */;
+/*!40000 ALTER TABLE `schemalock` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `settings`
+--
+
+DROP TABLE IF EXISTS `settings`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `settings` (
+  `value` varchar(128) NOT NULL default '',
+  `data` text,
+  `hostname` varchar(64) default NULL,
+  KEY `value` (`value`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `settings`
+--
+
+LOCK TABLES `settings` WRITE;
+/*!40000 ALTER TABLE `settings` DISABLE KEYS */;
+INSERT INTO `settings` VALUES ('mythfilldatabaseLastRunStart',NULL,NULL),('mythfilldatabaseLastRunEnd',NULL,NULL),('mythfilldatabaseLastRunStatus',NULL,NULL),('DataDirectMessage',NULL,NULL),('HaveRepeats','0',NULL),('DBSchemaVer','1254',NULL),('DefaultTranscoder','0',NULL),('MythFillSuggestedRunTime','1970-01-01T00:00:00',NULL),('MythFillGrabberSuggestsTime','1',NULL),('MythFillFixProgramIDsHasRunOnce','1','larch5'),('Language','EN_US','larch5'),('BackendServerIP','127.0.0.1','larch5'),('BackendServerPort','6543','larch5'),('BackendStatusPort','6544','larch5'),('SecurityPin','','larch5'),('MasterServerIP','127.0.0.1',NULL),('MasterServerPort','6543',NULL),('TVFormat','NTSC',NULL),('VbiFormat','None',NULL),('FreqTable','us-bcast',NULL),('TimeOffset','None',NULL),('MasterBackendOverride','1',NULL),('DeletesFollowLinks','1',NULL),('TruncateDeletesSlowly','0','larch5'),('HDRingbufferSize','9400',NULL),('MiscStatusScript','','larch5'),('DisableFirewireReset','0','larch5'),('EITTransportTimeout','5',NULL),('EITIgnoresSource','0',NULL),('EITCrawIdleStart','60',NULL),('startupCommand','',NULL),('blockSDWUwithoutClient','1',NULL),('idleWaitForRecordingTime','15',NULL),('StartupSecsBeforeRecording','120',NULL),('WakeupTimeFormat','hh:mm yyyy-MM-dd',NULL),('SetWakeuptimeCommand','',NULL),('ServerHaltCommand','sudo /sbin/halt -p',NULL),('preSDWUCheckCommand','',NULL),('WOLbackendConnectRetry','5',NULL),('WOLbackendCommand','',NULL),('WOLslaveBackendsCommand','',NULL),('JobQueueMaxSimultaneousJobs','1','larch5'),('JobQueueCheckFrequency','60','larch5'),('JobQueueWindowStart','00:00','larch5'),('JobQueueWindowEnd','23:59','larch5'),('JobQueueCPU','0','larch5'),('JobAllowCommFlag','1','larch5'),('JobAllowTranscode','1','larch5'),('JobAllowUserJob1','0','larch5'),('JobAllowUserJob2','0','larch5'),('JobAllowUserJob3','0','larch5'),('JobAllowUserJob4','0','larch5'),('JobsRunOnRecordHost','0',NULL),('AutoCommflagWhileRecording','0',NULL),('JobQueueCommFlagCommand','mythcommflag',NULL),('JobQueueTranscodeCommand','mythtranscode',NULL),('AutoTranscodeBeforeAutoCommflag','0',NULL),('SaveTranscoding','0',NULL),('UserJobDesc1','User Job #1',NULL),('UserJob1','',NULL),('UserJobDesc2','User Job #2',NULL),('UserJob2','',NULL),('UserJobDesc3','User Job #3',NULL),('UserJob3','',NULL),('UserJobDesc4','User Job #4',NULL),('UserJob4','',NULL),('DefaultVideoPlaybackProfile','CPU+','larch5'),('RealtimePriority','1','larch5'),('DecodeExtraAudio','1','larch5'),('AudioNag','1','larch5'),('UseVideoTimebase','0','larch5'),('ClearSavedPosition','1','larch5'),('AltClearSavedPosition','1','larch5'),('JumpToProgramOSD','1','larch5'),('ContinueEmbeddedTVPlay','0','larch5'),('AutomaticSetWatched','0','larch5'),('AlwaysStreamFiles','1','larch5'),('UseOpenGLVSync','0','larch5'),('UseOutputPictureControls','1','larch5'),('AspectOverride','0','larch5'),('AdjustFill','0','larch5'),('LetterboxColour','0','larch5'),('PIPLocation','0','larch5'),('PlaybackExitPrompt','2','larch5'),('EndOfRecordingExitPrompt','1','larch5'),('PlayBoxOrdering','1','larch5'),('PlayBoxEpisodeSort','Date','larch5'),('GeneratePreviewPixmaps','0','larch5'),('PreviewPixmapOffset','64',NULL),('PreviewFromBookmark','1','larch5'),('PlaybackPreview','1','larch5'),('PlaybackBoxStartInTitle','1','larch5'),('ShowGroupInfo','0','larch5'),('AllRecGroupPassword','',NULL),('DisplayRecGroup','All Programs','larch5'),('QueryInitialFilter','0','larch5'),('RememberRecGroup','1','larch5'),('DispRecGroupAsAllProg','0','larch5'),('LiveTVInAllPrograms','0','larch5'),('DisplayGroupDefaultView','0','larch5'),('DisplayGroupTitleSort','0','larch5'),('PlaybackWatchList','1','larch5'),('PlaybackWLStart','0','larch5'),('PlaybackWLAutoExpire','0','larch5'),('PlaybackWLMaxAge','60','larch5'),('PlaybackWLBlackOut','2','larch5'),('SmartForward','0','larch5'),('StickyKeys','0','larch5'),('FFRewReposTime','100','larch5'),('FFRewReverse','1','larch5'),('ExactSeeking','0','larch5'),('AutoCommercialSkip','0','larch5'),('MaximumCommercialSkip','3600',NULL),('CommSkipAllBlanks','1',NULL),('PVR350OutputEnable','0','larch5'),('PVR350EPGAlphaValue','164','larch5'),('PVR350InternalAudioOnly','0','larch5'),('OSDTheme','blueosd','larch5'),('OSDGeneralTimeout','2','larch5'),('OSDProgramInfoTimeout','3','larch5'),('OSDFont','FreeMono.ttf','larch5'),('OSDThemeFontSizeType','default','larch5'),('EnableMHEG','0','larch5'),('PersistentBrowseMode','1','larch5'),('OSDNotifyTimeout','5','larch5'),('UDPNotifyPort','6948','larch5'),('OSDCCFont','FreeMono.ttf','larch5'),('CCBackground','0','larch5'),('DefaultCCMode','0','larch5'),('Prefer708Captions','1','larch5'),('OSDCC708TextZoom','100','larch5'),('OSDCC708DefaultFontType','MonoSerif','larch5'),('OSDCC708MonoSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708CasualFont','FreeMono.ttf','larch5'),('OSDCC708CursiveFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsFont','FreeMono.ttf','larch5'),('OSDCC708MonoSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708CasualItalicFont','FreeMono.ttf','larch5'),('OSDCC708CursiveItalicFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsItalicFont','FreeMono.ttf','larch5'),('ChannelOrdering','channum','larch5'),('ChannelFormat','<num> <sign>','larch5'),('LongChannelFormat','<num> <name>','larch5'),('SmartChannelChange','0','larch5'),('LastFreeCard','0',NULL),('LiveTVPriority','0',NULL),('AutoExpireMethod','2',NULL),('AutoExpireDefault','1',NULL),('RerecordWatched','1',NULL),('AutoExpireWatchedPriority','0',NULL),('AutoExpireLiveTVMaxAge','1',NULL),('AutoExpireDayPriority','3',NULL),('AutoExpireExtraSpace','1',NULL),('AutoExpireInsteadOfDelete','0',NULL),('DeletedFifoOrder','0',NULL),('CommercialSkipMethod','7',NULL),('AggressiveCommDetect','1',NULL),('AutoCommercialFlag','1',NULL),('AutoTranscode','0',NULL),('AutoRunUserJob1','0',NULL),('AutoRunUserJob2','0',NULL),('AutoRunUserJob3','0',NULL),('AutoRunUserJob4','0',NULL),('OverTimeCategory','category name',NULL),('CategoryOverTime','30',NULL),('EPGFillType','12','larch5'),('EPGShowCategoryColors','1','larch5'),('EPGShowCategoryText','1','larch5'),('EPGScrollType','1','larch5'),('EPGShowChannelIcon','1','larch5'),('EPGShowFavorites','0','larch5'),('WatchTVGuide','0','larch5'),('chanPerPage','5','larch5'),('timePerPage','4','larch5'),('UnknownTitle','Unknown','larch5'),('UnknownCategory','Unknown','larch5'),('DefaultTVChannel','3','larch5'),('SelectChangesChannel','0','larch5'),('SelChangeRecThreshold','16','larch5'),('EPGEnableJumpToChannel','0',NULL),('Theme','LinHES','larch5'),('RandomTheme','0','larch5'),('ThemeCacheSize','1','larch5'),('ThemePainter','qt','larch5'),('Style','Desktop Style','larch5'),('ThemeFontSizeType','default','larch5'),('MenuTheme','default','larch5'),('XineramaScreen','0','larch5'),('XineramaMonitorAspectRatio','1.3333','larch5'),('GuiSizeForTV','1','larch5'),('HideMouseCursor','1','larch5'),('RunFrontendInWindow','0','larch5'),('UseVideoModes','0','larch5'),('GuiVidModeResolution','640x480','larch5'),('TVVidModeResolution','320x200','larch5'),('TVVidModeForceAspect','0.0','larch5'),('TVVidModeResolution0','320x200','larch5'),('TVVidModeForceAspect0','0.0','larch5'),('TVVidModeResolution1','320x200','larch5'),('TVVidModeForceAspect1','0.0','larch5'),('TVVidModeResolution2','320x200','larch5'),('TVVidModeForceAspect2','0.0','larch5'),('ISO639Language0','eng','larch5'),('ISO639Language1','eng','larch5'),('DateFormat','ddd MMM d','larch5'),('ShortDateFormat','M/d','larch5'),('TimeFormat','h:mm AP','larch5'),('QtFontSmall','12','larch5'),('QtFontMedium','16','larch5'),('QtFontBig','25','larch5'),('PlayBoxTransparency','1','larch5'),('PlayBoxShading','0','larch5'),('UseVirtualKeyboard','1','larch5'),('LCDEnable','0','larch5'),('LCDShowTime','1','larch5'),('LCDShowMenu','1','larch5'),('LCDShowMusic','1','larch5'),('LCDShowMusicItems','ArtistTitle','larch5'),('LCDShowChannel','1','larch5'),('LCDShowRecStatus','0','larch5'),('LCDShowVolume','1','larch5'),('LCDShowGeneric','1','larch5'),('LCDBacklightOn','1','larch5'),('LCDHeartBeatOn','0','larch5'),('LCDBigClock','0','larch5'),('LCDKeyString','ABCDEF','larch5'),('LCDPopupTime','5','larch5'),('AudioOutputDevice','ALSA:default','larch5'),('PassThruOutputDevice','Default','larch5'),('MaxChannels','2','larch5'),('AudioUpmixType','0','larch5'),('AC3PassThru','0','larch5'),('DTSPassThru','0','larch5'),('AggressiveSoundcardBuffer','0','larch5'),('MythControlsVolume','1','larch5'),('MixerDevice','ALSA:default','larch5'),('MixerControl','PCM','larch5'),('MasterMixerVolume','100','larch5'),('PCMMixerVolume','50','larch5'),('IndividualMuteControl','0','larch5'),('LircKeyPressedApp','','larch5'),('AllowQuitShutdown','4','larch5'),('NoPromptOnExit','1','larch5'),('UseArrowAccels','1','larch5'),('NetworkControlEnabled','0','larch5'),('NetworkControlPort','6546','larch5'),('MonitorDrives','0','larch5'),('MediaChangeEvents','0','larch5'),('IgnoreDevices','','larch5'),('SetupPinCodeRequired','0','larch5'),('OverrideExitMenu','3','larch5'),('HaltCommand','sudo /sbin/halt','larch5'),('RebootCommand','sudo /sbin/reboot','larch5'),('EnableXbox','0','larch5'),('LogEnabled','0',NULL),('LogMaxCount','100','larch5'),('LogPrintLevel','8','larch5'),('LogCleanEnabled','0','larch5'),('LogCleanPeriod','14','larch5'),('LogCleanDays','14','larch5'),('LogCleanMax','30','larch5'),('MythFillEnabled','1',NULL),('MythFillDatabasePath','mythfilldatabase',NULL),('MythFillDatabaseArgs','',NULL),('MythFillDatabaseLog','',NULL),('MythFillPeriod','1',NULL),('MythFillMinHour','2',NULL),('MythFillMaxHour','5',NULL),('SchedMoveHigher','1',NULL),('SchedOpenEnd','0',NULL),('ComplexPriority','0',NULL),('PrefInputPriority','2',NULL),('SingleRecordRecPriority','1',NULL),('FindOneRecordRecPriority','-1',NULL),('ArchiveDBSchemaVer','1005',NULL),('MythArchiveTempDir','/myth/tmp','larch5'),('MythArchiveShareDir','/usr/share/mythtv/mytharchive/','larch5'),('MythArchiveVideoFormat','NTSC','larch5'),('MythArchiveFileFilter','*.mpg *.mov *.avi *.mpeg *.nuv','larch5'),('MythArchiveDVDLocation','/dev/dvd','larch5'),('MythArchiveDVDPlayerCmd','Internal','larch5'),('MythArchiveEncodeToAc3','0','larch5'),('MythArchiveCopyRemoteFiles','0','larch5'),('MythArchiveAlwaysUseMythTranscode','1','larch5'),('MythArchiveUseProjectX','0','larch5'),('MythArchiveAddSubtitles','0','larch5'),('MythArchiveUseFIFO','1','larch5'),('MythArchiveDefaultEncProfile','SP','larch5'),('MythArchiveMainMenuAR','16:9','larch5'),('MythArchiveChapterMenuAR','Video','larch5'),('MythArchiveDateFormat','%a  %b  %d','larch5'),('MythArchiveTimeFormat','%I:%M %p','larch5'),('MythArchiveFfmpegCmd','ffmpeg','larch5'),('MythArchiveMplexCmd','mplex','larch5'),('MythArchiveDvdauthorCmd','dvdauthor','larch5'),('MythArchiveSpumuxCmd','spumux','larch5'),('MythArchiveMpeg2encCmd','mpeg2enc','larch5'),('MythArchiveMkisofsCmd','mkisofs','larch5'),('MythArchiveGrowisofsCmd','growisofs','larch5'),('MythArchiveTcrequantCmd','tcrequant','larch5'),('MythArchiveJpeg2yuvCmd','jpeg2yuv','larch5'),('MythArchiveProjectXCmd','projectx','larch5'),('FlixDBSchemaVer','1004',NULL),('GalleryDBSchemaVer','1003',NULL),('GalleryDir','/myth/gallery','larch5'),('GalleryThumbnailLocation','1','larch5'),('GallerySortOrder','20','larch5'),('GalleryImportDirs','/mnt/cdrom:/mnt/camera','larch5'),('GalleryMoviePlayerCmd','mplayer -fs %s','larch5'),('SlideshowUseOpenGL','0','larch5'),('SlideshowDelay','5','larch5'),('SlideshowOpenGLTransition','none','larch5'),('SlideshowOpenGLTransitionLength','2000','larch5'),('SlideshowTransition','random','larch5'),('SlideshowBackground','black','larch5'),('GameDBSchemaVer','1016',NULL),('MusicDBSchemaVer','1017',NULL),('VisualMode','','larch5'),('MusicLocation','/myth/music/','larch5'),('MusicAudioDevice','default','larch5'),('CDDevice','/dev/cdrom','larch5'),('AutoLookupCD','1','larch5'),('AutoPlayCD','0','larch5'),('KeyboardAccelerators','1','larch5'),('TreeLevels','splitartist artist album title','larch5'),('ArtistTreeGroups','0','larch5'),('NonID3FileNameFormat','GENRE/ARTIST/ALBUM/TRACK_TITLE','larch5'),('Ignore_ID3','0','larch5'),('MusicTagEncoding','utf16','larch5'),('CDWriterEnabled','1','larch5'),('CDDiskSize','1','larch5'),('CDCreateDir','1','larch5'),('CDWriteSpeed','0','larch5'),('CDBlankType','fast','larch5'),('PlayMode','none','larch5'),('ResumeMode','off','larch5'),('MaxSearchResults','300','larch5'),('MusicShowRatings','0','larch5'),('ShowWholeTree','0','larch5'),('ListAsShuffled','0','larch5'),('IntelliRatingWeight','35','larch5'),('IntelliPlayCountWeight','25','larch5'),('IntelliLastPlayWeight','25','larch5'),('IntelliRandomWeight','15','larch5'),('VisualCycleOnSongChange','0','larch5'),('VisualAlbumArtOnSongChange','0','larch5'),('VisualRandomize','0','larch5'),('VisualModeDelay','0','larch5'),('VisualScaleWidth','1','larch5'),('VisualScaleHeight','1','larch5'),('ParanoiaLevel','Full','larch5'),('FilenameTemplate','ARTIST/ALBUM/TRACK-TITLE','larch5'),('NoWhitespace','0','larch5'),('PostCDRipScript','','larch5'),('EjectCDAfterRipping','1','larch5'),('EncoderType','ogg','larch5'),('DefaultRipQuality','1','larch5'),('Mp3UseVBR','0','larch5'),('PhoneDBSchemaVer','1001',NULL),('SipRegisterWithProxy','1','larch5'),('SipProxyName','fwd.pulver.com','larch5'),('SipProxyAuthName','','larch5'),('SipProxyAuthPassword','','larch5'),('MySipName','Me','larch5'),('SipAutoanswer','0','larch5'),('SipBindInterface','eth0','larch5'),('SipLocalPort','5060','larch5'),('NatTraversalMethod','None','larch5'),('NatIpAddress','http://checkip.dyndns.org','larch5'),('AudioLocalPort','21232','larch5'),('VideoLocalPort','21234','larch5'),('MicrophoneDevice','None','larch5'),('CodecPriorityList','GSM;G.711u;G.711a','larch5'),('PlayoutAudioCall','40','larch5'),('PlayoutVideoCall','110','larch5'),('TxResolution','176x144','larch5'),('TransmitFPS','5','larch5'),('TransmitBandwidth','256','larch5'),('CaptureResolution','352x288','larch5'),('TimeToAnswer','10','larch5'),('DefaultVxmlUrl','http://127.0.0.1/vxml/index.vxml','larch5'),('DefaultVoicemailPrompt','I am not at home, please leave a message after the tone','larch5'),('mythvideo.DBSchemaVer','1032',NULL),('VideoStartupDir','/myth/video','larch5'),('VideoArtworkDir','/myth/video_stuff/coverart','larch5'),('Default MythVideo View','2','larch5'),('VideoListUnknownFiletypes','1','larch5'),('VideoBrowserNoDB','1','larch5'),('VideoGalleryNoDB','1','larch5'),('VideoTreeNoDB','1','larch5'),('VideoTreeLoadMetaData','1','larch5'),('VideoNewBrowsable','1','larch5'),('mythvideo.sort_ignores_case','1','larch5'),('mythvideo.db_folder_view','1','larch5'),('mythvideo.VideoTreeRemember','1','larch5'),('mythvideo.ImageCacheSize','50','larch5'),('DVDDeviceLocation','/dev/dvd','larch5'),('VCDDeviceLocation','/dev/cdrom','larch5'),('DVDOnInsertDVD','1','larch5'),('DVDDriveSpeed','2','larch5'),('EnableDVDBookmark','1','larch5'),('DVDBookmarkPrompt','1','larch5'),('DVDBookmarkDays','10','larch5'),('mythvideo.fanartDir','/myth/video_stuff/fanart','larch5'),('mythvideo.screenshotDir','/myth/video_stuff/screenshots','larch5'),('mythvideo.bannerDir','/myth/video_stuff/banners','larch5'),('VideoGalleryColsPerPage','4','larch5'),('VideoGalleryRowsPerPage','3','larch5'),('VideoGallerySubtitle','1','larch5'),('VideoDefaultParentalLevel','4','larch5'),('VideoAggressivePC','0','larch5'),('mythvideo.ParentalLevelFromRating','0','larch5'),('mythvideo.AutoR2PL1','G','larch5'),('mythvideo.AutoR2PL2','PG','larch5'),('mythvideo.AutoR2PL3','PG-13','larch5'),('mythvideo.AutoR2PL4','R:NC-17','larch5'),('VideoDefaultPlayer','mplayer -fs -zoom -quiet -vo xv %s','larch5'),('mythdvd.DVDPlayerCommand','Internal','larch5'),('VCDPlayerCommand','mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv','larch5'),('DVDRipLocation','/myth/tmp','larch5'),('TitlePlayCommand','mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c','larch5'),('SubTitleCommand','-sid %s','larch5'),('TranscodeCommand','transcode','larch5'),('MTDPort','2442','larch5'),('MTDNiceLevel','20','larch5'),('MTDConcurrentTranscodes','1','larch5'),('MTDLogFlag','0','larch5'),('MTDac3Flag','0','larch5'),('MTDxvidFlag','1','larch5'),('mythvideo.TrustTranscodeFRDetect','1','larch5'),('WeatherDBSchemaVer','1004',NULL),('TVVidModeRefreshRate','0','larch5'),('TVVidModeRefreshRate0','0','larch5'),('TVVidModeRefreshRate1','0','larch5'),('TVVidModeRefreshRate2','0','larch5'),('GalleryRecursiveSlideshow','1','larch5'),('WebBrowserZoomLevel','20','larch5'),('WebBrowserCommand','Internal','larch5'),('WebBrowserScrollMode','1','larch5'),('WebBrowserScrollSpeed','4','larch5'),('WebBrowserHideScrollbars','0','larch5'),('RepeatMode','all','larch5'),('MusicAutoShowPlayer','1','larch5'),('HOSTOSsize','5','larch5'),('NetworkControlEnabled','1','larch5'),('Hostpluginmytharchive','1','larch5'),('Hostpluginmythbrowser','1','larch5'),('Hostpluginmythcontrols','1','larch5'),('Hostpluginmythflix','1','larch5'),('Hostpluginmythgallery','1','larch5'),('Hostpluginmythgame','1','larch5'),('HostpluginmythgameFceu','1','larch5'),('HostpluginmythgameMame','1','larch5'),('HostpluginmythgameZsnes','1','larch5'),('Hostpluginmythmovietime','1','larch5'),('Hostpluginmythmusic','1','larch5'),('Hostpluginmythnews','1','larch5'),('Hostpluginmythphone','1','larch5'),('Hostpluginmythsmolt','1','larch5'),('Hostpluginmythvideo','1','larch5'),('Hostpluginmythvideo_dvdcss','0','larch5'),('Hostpluginmythweather','1','larch5'),('HostAudiotype','ALSA','larch5'),('HostpluginmythgameZsnes','1','larch5'),('HostpluginmythgameMame','1','larch5'),('Hostpluginmythvideo_dvdcss','0','larch5'),('Hostpluginmythappletrailers','1','larch5'),('Hostpluginmythstream','1','larch5'),('Hostpluginmythvodka','1','larch5'),('HostMiro','1','larch5'),('HostpluginmythgameXE','1','larch5'),('HostpluginmythgameROMDB','1','larch5'),('HostXine','1','larch5'),('HOSTOSsize','5','larch5'),('HostMyhostname','larch5','larch5'),('NetworkControlEnabled','1','larch5'),('Hostaccessuser','1','larch5'),('WOLbackendReconnectWaitTime','5',NULL),('Hostbootsplash','1','larch5'),('HostIPeth0','192.168.1.1','larch5'),('HostNETMASKeth0','/24    255.255.255.0','larch5'),('HostGWeth0','192.168.1.254','larch5'),('HostDNSeth0','192.168.1.254','larch5'),('HostReceiverType','Hauppauge','larch5'),('HostRemoteType','no_remote','larch5'),('HOSTtemplatetype','Do Nothing','larch5'),('BackupDBLastRunStart','2010-05-23 01:43:11',NULL),('BackupDBLastRunEnd','2010-05-23 01:43:14',NULL),('StorageScheduler','Combination',NULL),('DisableAutomaticBackup','0',NULL),('BackendStopCommand','sudo sv stop mythbackend',NULL),('BackendStartCommand','sudo sv start mythbackend',NULL),('UPnP/WMPSource','0',NULL),('UPnP/RebuildDelay','30','larch5'),('GeneratePreviewRemotely','0','larch5'),('HWAccelPlaybackPreview','0','larch5'),('BrowseAllTuners','0','larch5'),('SubtitleCodec','UTF-8','larch5'),('ChannelGroupRememberLast','0','larch5'),('ChannelGroupDefault','-1','larch5'),('BrowseChannelGroup','0','larch5'),('UseFixedWindowSize','1','larch5'),('ScreenShotPath','/myth/video_stuff/screenshots','larch5'),('LircSocket','/dev/lircd','larch5'),('BrowserDBSchemaVer','1002',NULL),('CDWriterDevice','default','larch5'),('MusicExitAction','prompt','larch5'),('mythvideo.db_group_view','1','larch5'),('mythvideo.db_group_type','0','larch5'),('MovieListCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -M','larch5'),('MoviePosterCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -P','larch5'),('MovieFanartCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -B','larch5'),('MovieDataCommandLine','/usr/share/mythtv/mythvideo/scripts/tmdb.pl -D','larch5'),('mythvideo.TrailersDir','/myth/video_stuff/trailers','larch5'),('mythvideo.TrailersRandomEnabled','1','larch5'),('mythvideo.TrailersRandomCount','3','larch5'),('mythvideo.TVListCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -M','larch5'),('mythvideo.TVPosterCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -P','larch5'),('mythvideo.TVFanartCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -F','larch5'),('mythvideo.TVBannerCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -B','larch5'),('mythvideo.TVDataCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -D','larch5'),('mythvideo.TVTitleSubCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -N','larch5'),('mythvideo.TVScreenshotCommandLine','/usr/share/mythtv/mythvideo/scripts/ttvdb.py -S','larch5'),('mythvideo.EnableAlternatePlayer','1','larch5'),('mythvideo.VideoAlternatePlayer','Internal','larch5'),('AudioDefaultUpmix','1','larch5'),('AdvancedAudioSettings','0','larch5'),('SRCQualityOverride','0','larch5'),('SRCQuality','1','larch5'),('MusicDefaultUpmix','0','larch5');
+/*!40000 ALTER TABLE `settings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `storagegroup`
+--
+
+DROP TABLE IF EXISTS `storagegroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `storagegroup` (
+  `id` int(11) NOT NULL auto_increment,
+  `groupname` varchar(32) NOT NULL,
+  `hostname` varchar(64) NOT NULL default '',
+  `dirname` varchar(235) character set utf8 collate utf8_bin NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `grouphostdir` (`groupname`,`hostname`,`dirname`),
+  KEY `hostname` (`hostname`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `storagegroup`
+--
+
+LOCK TABLES `storagegroup` WRITE;
+/*!40000 ALTER TABLE `storagegroup` DISABLE KEYS */;
+INSERT INTO `storagegroup` VALUES (1,'Default','larch5','/myth/tv/');
+/*!40000 ALTER TABLE `storagegroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `tvchain`
+--
+
+DROP TABLE IF EXISTS `tvchain`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `tvchain` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `chainid` varchar(128) NOT NULL default '',
+  `chainpos` int(10) NOT NULL default '0',
+  `discontinuity` tinyint(1) NOT NULL default '0',
+  `watching` int(10) NOT NULL default '0',
+  `hostprefix` varchar(128) NOT NULL default '',
+  `cardtype` varchar(32) NOT NULL default 'V4L',
+  `input` varchar(32) NOT NULL default '',
+  `channame` varchar(32) NOT NULL default '',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY  (`chanid`,`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `tvchain`
+--
+
+LOCK TABLES `tvchain` WRITE;
+/*!40000 ALTER TABLE `tvchain` DISABLE KEYS */;
+/*!40000 ALTER TABLE `tvchain` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `tvosdmenu`
+--
+
+DROP TABLE IF EXISTS `tvosdmenu`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `tvosdmenu` (
+  `osdcategory` varchar(32) NOT NULL,
+  `livetv` tinyint(4) NOT NULL default '0',
+  `recorded` tinyint(4) NOT NULL default '0',
+  `video` tinyint(4) NOT NULL default '0',
+  `dvd` tinyint(4) NOT NULL default '0',
+  `description` varchar(32) NOT NULL,
+  PRIMARY KEY  (`osdcategory`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `tvosdmenu`
+--
+
+LOCK TABLES `tvosdmenu` WRITE;
+/*!40000 ALTER TABLE `tvosdmenu` DISABLE KEYS */;
+/*!40000 ALTER TABLE `tvosdmenu` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `upnpmedia`
+--
+
+DROP TABLE IF EXISTS `upnpmedia`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `upnpmedia` (
+  `intid` int(10) unsigned NOT NULL default '0',
+  `class` varchar(64) NOT NULL default '',
+  `itemtype` varchar(128) NOT NULL default '',
+  `parentid` int(10) unsigned NOT NULL default '0',
+  `itemproperties` varchar(255) NOT NULL default '',
+  `filepath` varchar(512) NOT NULL default '',
+  `title` varchar(255) NOT NULL default '',
+  `filename` varchar(512) NOT NULL default '',
+  `coverart` varchar(512) NOT NULL default '',
+  PRIMARY KEY  (`intid`),
+  KEY `class` (`class`),
+  KEY `filepath` (`filepath`(333)),
+  KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `upnpmedia`
+--
+
+LOCK TABLES `upnpmedia` WRITE;
+/*!40000 ALTER TABLE `upnpmedia` DISABLE KEYS */;
+/*!40000 ALTER TABLE `upnpmedia` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocast`
+--
+
+DROP TABLE IF EXISTS `videocast`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocast` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `cast` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocast`
+--
+
+LOCK TABLES `videocast` WRITE;
+/*!40000 ALTER TABLE `videocast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocategory`
+--
+
+DROP TABLE IF EXISTS `videocategory`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocategory` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `category` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocategory`
+--
+
+LOCK TABLES `videocategory` WRITE;
+/*!40000 ALTER TABLE `videocategory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocategory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocountry`
+--
+
+DROP TABLE IF EXISTS `videocountry`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocountry` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `country` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocountry`
+--
+
+LOCK TABLES `videocountry` WRITE;
+/*!40000 ALTER TABLE `videocountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videogenre`
+--
+
+DROP TABLE IF EXISTS `videogenre`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videogenre` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `genre` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videogenre`
+--
+
+LOCK TABLES `videogenre` WRITE;
+/*!40000 ALTER TABLE `videogenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videogenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadata`
+--
+
+DROP TABLE IF EXISTS `videometadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadata` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `title` varchar(128) NOT NULL,
+  `subtitle` text NOT NULL,
+  `director` varchar(128) NOT NULL,
+  `plot` text,
+  `rating` varchar(128) NOT NULL,
+  `inetref` varchar(255) NOT NULL,
+  `homepage` text NOT NULL,
+  `year` int(10) unsigned NOT NULL,
+  `releasedate` date NOT NULL,
+  `userrating` float NOT NULL,
+  `length` int(10) unsigned NOT NULL,
+  `season` smallint(5) unsigned NOT NULL default '0',
+  `episode` smallint(5) unsigned NOT NULL default '0',
+  `showlevel` int(10) unsigned NOT NULL,
+  `filename` text NOT NULL,
+  `hash` varchar(128) NOT NULL,
+  `coverfile` text NOT NULL,
+  `childid` int(11) NOT NULL default '-1',
+  `browse` tinyint(1) NOT NULL default '1',
+  `watched` tinyint(1) NOT NULL default '0',
+  `playcommand` varchar(255) default NULL,
+  `category` int(10) unsigned NOT NULL default '0',
+  `trailer` text,
+  `host` text NOT NULL,
+  `screenshot` text,
+  `banner` text,
+  `fanart` text,
+  `insertdate` timestamp NULL default CURRENT_TIMESTAMP,
+  PRIMARY KEY  (`intid`),
+  KEY `director` (`director`),
+  KEY `title` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadata`
+--
+
+LOCK TABLES `videometadata` WRITE;
+/*!40000 ALTER TABLE `videometadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacast`
+--
+
+DROP TABLE IF EXISTS `videometadatacast`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacast` (
+  `idvideo` int(10) unsigned NOT NULL,
+  `idcast` int(10) unsigned NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacast`
+--
+
+LOCK TABLES `videometadatacast` WRITE;
+/*!40000 ALTER TABLE `videometadatacast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacountry`
+--
+
+DROP TABLE IF EXISTS `videometadatacountry`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacountry` (
+  `idvideo` int(10) unsigned NOT NULL,
+  `idcountry` int(10) unsigned NOT NULL,
+  KEY `idvideo` (`idvideo`),
+  KEY `idcountry` (`idcountry`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacountry`
+--
+
+LOCK TABLES `videometadatacountry` WRITE;
+/*!40000 ALTER TABLE `videometadatacountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatagenre`
+--
+
+DROP TABLE IF EXISTS `videometadatagenre`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatagenre` (
+  `idvideo` int(10) unsigned NOT NULL,
+  `idgenre` int(10) unsigned NOT NULL,
+  KEY `idvideo` (`idvideo`),
+  KEY `idgenre` (`idgenre`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatagenre`
+--
+
+LOCK TABLES `videometadatagenre` WRITE;
+/*!40000 ALTER TABLE `videometadatagenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatagenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videosource`
+--
+
+DROP TABLE IF EXISTS `videosource`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videosource` (
+  `sourceid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL default '',
+  `xmltvgrabber` varchar(128) default NULL,
+  `userid` varchar(128) NOT NULL default '',
+  `freqtable` varchar(16) NOT NULL default 'default',
+  `lineupid` varchar(64) default NULL,
+  `password` varchar(64) default NULL,
+  `useeit` smallint(6) NOT NULL default '0',
+  `configpath` varchar(4096) default NULL,
+  `dvb_nit_id` int(6) default '-1',
+  PRIMARY KEY  (`sourceid`),
+  UNIQUE KEY `name` (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videosource`
+--
+
+LOCK TABLES `videosource` WRITE;
+/*!40000 ALTER TABLE `videosource` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videosource` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videotypes`
+--
+
+DROP TABLE IF EXISTS `videotypes`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videotypes` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `extension` varchar(128) NOT NULL,
+  `playcommand` varchar(255) NOT NULL,
+  `f_ignore` tinyint(1) default NULL,
+  `use_default` tinyint(1) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videotypes`
+--
+
+LOCK TABLES `videotypes` WRITE;
+/*!40000 ALTER TABLE `videotypes` DISABLE KEYS */;
+INSERT INTO `videotypes` VALUES (1,'txt','',1,0),(2,'log','',1,0),(3,'mpg','Internal',0,0),(4,'avi','',0,1),(5,'vob','Internal',0,0),(6,'mpeg','Internal',0,0),(7,'VIDEO_TS','Internal',0,0),(8,'iso','Internal',0,0),(9,'img','Internal',0,0),(10,'mkv','Internal',0,1),(11,'mp4','Internal',0,0),(12,'m2ts','Internal',0,0),(13,'evo','Internal',0,0),(14,'divx','Internal',0,0),(15,'mov','Internal',0,0),(16,'qt','Internal',0,0),(17,'wmv','Internal',0,0),(18,'3gp','Internal',0,0),(19,'asf','Internal',0,0),(20,'ogg','Internal',0,0),(21,'ogm','Internal',0,0),(22,'flv','Internal',0,0);
+/*!40000 ALTER TABLE `videotypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherdatalayout`
+--
+
+DROP TABLE IF EXISTS `weatherdatalayout`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherdatalayout` (
+  `location` varchar(64) NOT NULL,
+  `dataitem` varchar(64) NOT NULL,
+  `weatherscreens_screen_id` int(10) unsigned NOT NULL,
+  `weathersourcesettings_sourceid` int(10) unsigned NOT NULL,
+  PRIMARY KEY  (`location`,`dataitem`,`weatherscreens_screen_id`,`weathersourcesettings_sourceid`),
+  KEY `weatherdatalayout_FKIndex1` (`weatherscreens_screen_id`),
+  KEY `weatherdatalayout_FKIndex2` (`weathersourcesettings_sourceid`),
+  CONSTRAINT `weatherdatalayout_ibfk_1` FOREIGN KEY (`weatherscreens_screen_id`) REFERENCES `weatherscreens` (`screen_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT `weatherdatalayout_ibfk_2` FOREIGN KEY (`weathersourcesettings_sourceid`) REFERENCES `weathersourcesettings` (`sourceid`) ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherdatalayout`
+--
+
+LOCK TABLES `weatherdatalayout` WRITE;
+/*!40000 ALTER TABLE `weatherdatalayout` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherdatalayout` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherscreens`
+--
+
+DROP TABLE IF EXISTS `weatherscreens`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherscreens` (
+  `screen_id` int(10) unsigned NOT NULL auto_increment,
+  `draworder` int(10) unsigned NOT NULL,
+  `container` varchar(64) NOT NULL,
+  `hostname` varchar(64) default NULL,
+  `units` tinyint(3) unsigned NOT NULL,
+  PRIMARY KEY  (`screen_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherscreens`
+--
+
+LOCK TABLES `weatherscreens` WRITE;
+/*!40000 ALTER TABLE `weatherscreens` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherscreens` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weathersourcesettings`
+--
+
+DROP TABLE IF EXISTS `weathersourcesettings`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weathersourcesettings` (
+  `sourceid` int(10) unsigned NOT NULL auto_increment,
+  `source_name` varchar(64) NOT NULL,
+  `update_timeout` int(10) unsigned NOT NULL default '600',
+  `retrieve_timeout` int(10) unsigned NOT NULL default '60',
+  `hostname` varchar(64) default NULL,
+  `path` varchar(255) default NULL,
+  `author` varchar(128) default NULL,
+  `version` varchar(32) default NULL,
+  `email` varchar(255) default NULL,
+  `types` mediumtext,
+  `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  PRIMARY KEY  (`sourceid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weathersourcesettings`
+--
+
+LOCK TABLES `weathersourcesettings` WRITE;
+/*!40000 ALTER TABLE `weathersourcesettings` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weathersourcesettings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `websites`
+--
+
+DROP TABLE IF EXISTS `websites`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `websites` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `category` varchar(100) NOT NULL,
+  `name` varchar(100) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  PRIMARY KEY  (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `websites`
+--
+
+LOCK TABLES `websites` WRITE;
+/*!40000 ALTER TABLE `websites` DISABLE KEYS */;
+/*!40000 ALTER TABLE `websites` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2010-05-23  1:43:44
diff --git a/abs/core/mythdb-initial/mythdb.install b/abs/core/mythdb-initial/mythdb.install
new file mode 100755
index 0000000..a4dcb84
--- /dev/null
+++ b/abs/core/mythdb-initial/mythdb.install
@@ -0,0 +1,35 @@
+mydate=`date +%m-%d-%y`
+HOST=`hostname`
+post_install() {
+#echo backup the old database
+	mysqldump mythconverg   >/data/database/mythconverg.${mydate}.sql 
+#	echo dropping the old database
+	mysql -u root -e 'drop database mythconverg;' 
+        mysql -u root -e 'create database mythconverg;'  
+	echo installing the default database
+	if [  $HOST = 'larch5' ]
+	then
+           cp /data/database/mc.sql.initial /data/database/mc.sql.fixed
+	   cp /data/database/permissions.sql  /data/database/permissions.sql.fixed
+	   cp /data/database/custom.sql  /data/database/custom.sql.fixed
+	else
+	    sed -e "s/larch5/$HOST/g" /data/database/mc.sql.initial > /data/database/mc.sql.fixed
+	    sed -e "s/larch5/$HOST/g" /data/database/permissions.sql > /data/database/permissions.sql.fixed
+	    sed -e "s/larch5/$HOST/g" /data/database/custom.sql > /data/database/custom.sql.fixed
+
+	fi
+		
+	mysql mythconverg < /data/database/mc.sql.fixed 2>/dev/null 
+	mysql < /data/database/permissions.sql.fixed 2>/dev/null 
+	mysql mythconverg < /data/database/custom.sql.fixed 2>/dev/null 
+
+	rm /data/database/mc.sql.initial
+	rm /data/database/custom.sql.fixed
+}
+post_upgrade() {
+	echo "nothing to do"
+}
+
+op=$1 
+shift 
+$op $*
diff --git a/abs/core/mythdb-initial/permissions.sql b/abs/core/mythdb-initial/permissions.sql
new file mode 100755
index 0000000..5a36e15
--- /dev/null
+++ b/abs/core/mythdb-initial/permissions.sql
@@ -0,0 +1,11 @@
+ 
+GRANT ALL ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+GRANT FILE ON *.* TO 'mythtv'@'%';
+FLUSH PRIVILEGES;
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+FLUSH PRIVILEGES;
+ALTER DATABASE mythconverg DEFAULT CHARACTER SET latin1;
diff --git a/abs/core/mythstream/PKGBUILD b/abs/core/mythstream/PKGBUILD
new file mode 100644
index 0000000..5137b99
--- /dev/null
+++ b/abs/core/mythstream/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythstream
+pkgver=0.18_3
+pkgrel=10
+pkgdesc="Unofficial MythTV plugin for Internet audio and video streams."
+arch=('i686' 'x86_64')
+url="http://home.kabelfoon.nl/~moongies/streamtuned.html"
+license=('GPL')
+depends=('mythtv' 'perl-xml-simple' 'fftw' 'fftw2' 'perl-xml-xql')
+source=("http://home.kabelfoon.nl/~moongies/sw9vc4htz2/mythstream_mythtv-r21640.tar.gz" "mythstream.patch" "streams.res")
+md5sums=('')
+install=mythstream.install
+groups=('mythtv-extras')
+install=mythstream.install
+
+build() {
+   cd $startdir/src/mythstream_mythtv-r21640
+   ln -s ../../../mythtv/stable-0.23/mythtv/src/mythtv/libs/lib* .
+
+   patch -p1 < ../mythstream.patch || return 1
+
+   export QTDIR=/usr/lib/qt
+   export PATH=$QTDIR/bin:$PATH
+
+   qmake mythstream.pro
+   make qmake || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+   cp $srcdir/streams.res $pkgdir/usr/share/mythtv/mythstream
+}
+
+md5sums=('ba354b83fefe6028c5379fb832a44b6a'
+         '0131d9e05b55141357bc66e2a88a8132'
+         'b7fb47a56b6809938f237632174faeb2')
diff --git a/abs/core/mythstream/mythstream.install b/abs/core/mythstream/mythstream.install
new file mode 100644
index 0000000..3b87835
--- /dev/null
+++ b/abs/core/mythstream/mythstream.install
@@ -0,0 +1,23 @@
+# arg 1:  the new package version
+post_install() {
+  mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp
+  grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
+  echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+  echo "   <button>" >> /tmp/is.xml.tmp
+  echo "     <type>STREAM</type>" >> /tmp/is.xml.tmp
+  echo "     <text>MythStream</text>" >> /tmp/is.xml.tmp
+  echo "     <action>PLUGIN mythstream</action>" >> /tmp/is.xml.tmp 
+  echo "   </button>" >> /tmp/is.xml.tmp
+  echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+  echo "" >> /tmp/is.xml.tmp
+  echo "</mythmenu>" >> /tmp/is.xml.tmp
+  mv /tmp/is.xml.tmp /usr/share/mythtv/themes/defaultmenu/is.xml
+}
+post_remove() {
+	mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp/is.xml.tmp
+	sed -e '/\#MythStream/,/\#MythStream/d' < /tmp/is.xml.tmp > /usr/share/mythtv/themes/defaultmenu/is.xml
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythstream/mythstream.patch b/abs/core/mythstream/mythstream.patch
new file mode 100644
index 0000000..facc1aa
--- /dev/null
+++ b/abs/core/mythstream/mythstream.patch
@@ -0,0 +1,12 @@
+diff -Naur mythstream_mythtv-r21640-old/libs/harvester.h mythstream_mythtv-r21640-new/libs/harvester.h
+--- mythstream_mythtv-r21640-old/libs/harvester.h	2009-10-13 14:49:54.000000000 -0700
++++ mythstream_mythtv-r21640-new/libs/harvester.h	2009-10-13 14:50:38.000000000 -0700
+@@ -23,7 +23,7 @@
+ #include <q3process.h>
+ #include <qthread.h>
+ #include <q3process.h>
+-#include <qhttp.h>
++#include <QtNetwork/qhttp.h>
+ #include <q3dict.h>
+ #include <qmap.h>
+ //Added by qt3to4:
diff --git a/abs/core/mythstream/streams.res b/abs/core/mythstream/streams.res
new file mode 100644
index 0000000..1e48084
--- /dev/null
+++ b/abs/core/mythstream/streams.res
@@ -0,0 +1,281 @@
+
+
+[item]
+Interaction
+Apple movie trailers
+whatever
+trailers
+*apple
+
+[item]
+Interaction
+Browse Shoutcast genres
+http://www.shoutcast.com
+[emptystring]
+*shoutcast/menu
+
+[item]
+Interaction
+Uitzending gemist - laatste uitzendingen (Dutch)
+http://www.uitzendinggemist.nl
+Uitzending gemist selectie
+omroep/menu
+
+[item]
+Interaction
+World Wide Media Project
+[emptystring]
+[emptystring]
+*wwmp/menu
+
+[item]
+Interaction
+tv-links - Monty Python's Flying Circus
+http://tv-links.co.uk/listings/1/2526
+[emptystring]
+tvlinks/listing
+
+[item]
+Interaction
+wwiTV list
+http://wwitv.com/television/tvbar.htm
+List of television stations
+wwitv/countries
+
+[item]
+Podcast feeds
+Beercasting
+http://beercasting.com/rss.xml
+(podcast)
+podcast
+
+[item]
+Podcast feeds
+Feed me weird things
+http://del.icio.us/rss/audio/feedmeweirdthings
+(podcast) http://del.icio.us/rss/audio/feedmeweirdthings
+rdfcast
+
+[item]
+Podcast feeds
+SETI Institute
+http://podcast.seti.org/index.xml
+podcast
+podcast
+
+[item]
+Radio
+BBC World Service
+http://www.bbc.co.uk/worldservice/meta/tx/nb/live_news_au_nb.ram
+International
+[emptystring]
+
+[item]
+Radio
+DR R&B, Denmark
+http://www.dr.dk/netradio/Metafiler/ASX/DR_RogB_128.asx
+Copenhagen, Denmark
+[emptystring]
+
+[item]
+Radio
+Energy Black, Switzerland
+http://broadcast.infomaniak.ch/energyblack-high.mp3.m3u
+Zurich, Switzerland
+[emptystring]
+
+[item]
+Radio
+Fun Radio, belgium
+http://www.funradio.be/funradiobe-low.high.pls
+[emptystring]
+[emptystring]
+
+[item]
+Radio
+Juventus Radio
+http://live.juventus.hu:8000/live.m3u
+Budapest, Hungary
+[emptystring]
+
+[item]
+Radio
+Shoutcast Country
+http://www.shoutcast.com/directory/index.phtml?sgenre=Country&numresult=50
+Country music stations
+shoutcast
+
+[item]
+Radio
+Shoutcast Rock
+http://www.shoutcast.com/directory/index.phtml?sgenre=Rock&numresult=50
+Shoutcast Rock stations
+shoutcast
+
+[item]
+Radio
+The Voice, Norway
+http://213.158.233.199:6006/listen.pls
+Oslo, Norway
+[emptystring]
+
+[item]
+Radio
+WGBH, Boston
+http://streams.wgbh.org/classical.pls
+Boston, Massachusetts
+[emptystring]
+
+[item]
+Radio
+WholeWheatRadio stream
+http://64.62.252.134:2680/listen.pls
+[emptystring]
+[emptystring]
+
+[item]
+TV
+Holland Doc
+mms://livemedia.omroep.nl/vprohollanddoc-bb
+Nederland 4 themakanaal
+[emptystring]
+
+[item]
+TV
+NASA TV
+http://www.nasa.gov/ram/35037main_portal.ram
+[emptystring]
+[emptystring]
+
+[item]
+TV
+NRK News TV
+mms://media00.nrk.no/mms2/nydi/AutoEnc/mn1840.wmv
+Norwegen
+[emptystring]
+
+[item]
+TV
+National Nine News TV
+mms://broadband.netshow.ninemsn.com.au/broadband/news/story1.wmv
+Australia
+[emptystring]
+
+[item]
+TV
+RBC TV
+http://tv.gldn.net:80/rbc
+Russia
+[emptystring]
+
+[item]
+TV
+Tweede Kamer
+mms://213.75.12.78/TKStream3
+Dutch Parliament
+[emptystring]
+
+[item]
+TV
+Uitzending gemist RSS feed
+http://www.uitzendinggemist.nl/index.php/rss
+Laatste uitzendingen
+omroep/rss
+
+[item]
+TV
+United Nations TV
+rtsp://a4.l878435134.c8784.g.lr.akamaistream.net/live/D/4/8784/v0001/reflector:35134
+[emptystring]
+[emptystring]
+
+[item]
+TV
+VPro 3Voor12 Central TV
+mms://livemedia.omroep.nl/vpro3voor12tvcentral-bb
+http://3voor12.vpro.nl
+[emptystring]
+
+[item]
+TV
+VPro 3Voor12 on Stage TV
+mms://livemedia.omroep.nl/vpro3voor12tvonstage-bb
+[emptystring]
+[emptystring]
+
+[item]
+TV
+YLE 24 News TV
+http://ra.yle.fi/ramgen/yle24/video/uusin_rk.rm
+Finland
+[emptystring]
+
+[item]
+TV
+Yomiuri News TV
+http://www.yomiuri.co.jp/stream/vnews/vnews-w.asx
+Japan
+[emptystring]
+
+[item]
+Video
+DailyMotion custom search
+http://www.dailymotion.com/rss/relevance/search/<:search term::funny:>/<:page::1:>
+Edit search term with virtual keyboard
+dailymotion/playall
+
+[item]
+Video
+DailyMotion playlist demo: Alicia Keys Live
+http://www.dailymotion.com/rss/relevance/search/Alicia+Keys+live/1
+Mark streams (M) and play
+dailymotion/playall
+
+[item]
+Video
+Dailymotion download and play: VH1/1
+http://www.dailymotion.com/rss/relevance/search/vh1/1
+[emptystring]
+dailymotion/feed
+
+[item]
+Video
+Dailymotion playlist demo: Amy Winehouse
+http://www.dailymotion.com/rss/relevance/search/Amy+Winehouse+live/1
+Mark streams (M) and play
+dailymotion/playall
+
+[item]
+Video
+YouTube top viewed today
+http://youtube.com/rss/global/top_viewed_today.rss
+Voor andere feeds zie youtube
+youtube/feed
+
+[item]
+stream lists
+Icecast list
+http://dir.xiph.org/yp.xml
+Harvested with icecast.pl script
+icecast
+
+[item]
+stream lists
+OperaCast list
+http://www.operacast.com/opstations.htm
+Stationlist from www.operacast.com
+operacast
+
+[item]
+stream lists
+Operanut list (default parser)
+http://operanut.com/radio.htm
+Some dead streams
+[emptystring]
+
+[item]
+stream lists
+Robins BBC parser
+ask the parser :)
+BBC parsing by Robin Gilks
+*bbc/robins_links
diff --git a/abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD b/abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD
new file mode 100644
index 0000000..2d0cb11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/glass-wide/PKGBUILD
@@ -0,0 +1,15 @@
+pkgname=glass-wide
+pkgver=1
+pkgrel=1
+pkgdesc="glass-wide theme for mythtv .21 ."
+arch=('i686' 'x86_64')
+license=('GPL2')
+url="unkown"
+source="http://iw.net/~brfransen/myth/glass-wide.tar.gz"
+
+build() {
+  cd $startdir/src/
+  mkdir -p $startdir/pkg/usr/share/mythtv/themes
+  cp -a glass-wide $startdir/pkg/usr/share/mythtv/themes
+  rm -rf $startdir/pkg/usr/shar/mythtv/themes/.DS_Store
+}
diff --git a/abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD b/abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD
new file mode 100644
index 0000000..dd05575
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/morethemes/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=morethemes
+pkgver=0.21
+pkgrel=1
+pkgdesc="Additional themes for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org/"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/${pkgname}.tar.bz2")
+md5sums=('53f87f0498bc516585df78ff932785f4')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/themes
+   . /etc/profile.d/qt3.sh
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr || return 1
+
+   qmake $pkgname.pro
+   make qmake || return 1
+   make || return 1
+
+   # basic install
+   make INSTALL_ROOT=$startdir/pkg install || return 1
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD
new file mode 100644
index 0000000..4862a1f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mytharchive/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mytharchive
+pkgver=0.21
+pkgrel=10
+pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'libxmu' 'libjpeg6' 'mysql-python' 'pil' 'dvdauthor' 'mjpegtools' 'transcode')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   svn update
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+
+   sed -i 's#kde3#kde#' configure || return 1
+   ./configure --prefix=/usr --enable-opengl --disable-all \
+               --enable-create-archive --enable-create-dvd --enable-mytharchive || return 1
+ 
+   qmake mythplugins.pro || return 1
+   make qmake || return 1
+   sed -i 's#kde3#kde#' ./mytharchive/mytharchive/Makefile || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..51a27d2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythbrowser/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 7374 2008-07-31 06:53:36Z eric $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythbrowser
+pkgver=0.21
+pkgrel=6
+pkgdesc="Mini web browser for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'wget' 'libxvmc' 'kdelibs3' 'qt3')
+groups=('mythtv-extras')
+options=('!makeflags')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   . /etc/profile.d/kde3.sh
+   svn update
+   sed -i 's#kde3#kde#' configure || return 1
+   ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythbrowser || return 1
+ 
+   qmake mythplugins.pro || return 1
+   make qmake || return 1
+   sed -i 's#kde3#kde#' ./mythbrowser/mythbrowser/Makefile || return 1
+   make || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD
new file mode 100644
index 0000000..669278c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythcontrols/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythcontrols
+pkgver=0.21
+pkgrel=4
+pkgdesc="Experimental controls for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+options=('!makeflags')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   svn update
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythcontrols
+
+   qmake mythplugins.pro
+   make qmake || return 1
+   make  || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD
new file mode 100755
index 0000000..aa1feef
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=mythdb-initial
+pkgver=1
+pkgrel=42
+pkgdesc="setup the initial mythtv database for linhes"
+url=""
+license=""
+depends=(mysql)
+makedepends=()
+conflicts=()
+replaces=()
+backup=()
+install=mythdb.install
+source=(mc.sql permissions.sql)
+md5sums=()
+arch=('i686')
+build() {
+  cd $startdir/src
+  mkdir -p $startdir/pkg/data/database
+  cp mc.sql  $startdir/pkg/data/database/mc.sql.initial
+  cp permissions.sql  $startdir/pkg/data/database/permissions.sql
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog b/abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog
new file mode 100644
index 0000000..c53f2f6
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/__changelog
@@ -0,0 +1,25 @@
+
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES 
+('Hostpluginmytharchive','1','larch5'),
+('Hostpluginmythbrowser','1','larch5'),
+('Hostpluginmythcontrols','1','larch5'),
+('Hostpluginmythflix','1','larch5'),
+('Hostpluginmythgallery','1','larch5'),
+('Hostpluginmythgame','1','larch5'),
+('HostpluginmythgameFceu','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('Hostpluginmythmovietime','1','larch5'),
+('Hostpluginmythmusic','1','larch5'),
+('Hostpluginmythnews','1','larch5'),
+('Hostpluginmythphone','1','larch5'),
+('Hostpluginmythsmolt','1','larch5'),
+('Hostpluginmythvideo','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythweather','1','larch5'),
+('HostAudiotype','ALSA','larch5')
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('WOLbackendReconnectWaitTime','5',NULL);
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql
new file mode 100644
index 0000000..cdb22d4
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mc.sql
@@ -0,0 +1,2835 @@
+-- MySQL dump 10.11
+--
+-- Host: localhost    Database: mythconverg
+-- ------------------------------------------------------
+-- Server version	5.0.60
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `archiveitems`
+--
+
+DROP TABLE IF EXISTS `archiveitems`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `archiveitems` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `type` set('Recording','Video','File') default NULL,
+  `title` varchar(128) default NULL,
+  `subtitle` varchar(128) default NULL,
+  `description` text,
+  `startdate` varchar(30) default NULL,
+  `starttime` varchar(30) default NULL,
+  `size` bigint(20) unsigned NOT NULL,
+  `filename` text NOT NULL,
+  `hascutlist` tinyint(1) NOT NULL default '0',
+  `cutlist` text,
+  PRIMARY KEY  (`intid`),
+  KEY `title` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `archiveitems`
+--
+
+LOCK TABLES `archiveitems` WRITE;
+/*!40000 ALTER TABLE `archiveitems` DISABLE KEYS */;
+/*!40000 ALTER TABLE `archiveitems` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `callsignnetworkmap`
+--
+
+DROP TABLE IF EXISTS `callsignnetworkmap`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `callsignnetworkmap` (
+  `id` int(11) NOT NULL auto_increment,
+  `callsign` varchar(20) NOT NULL default '',
+  `network` varchar(20) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `callsign` (`callsign`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `callsignnetworkmap`
+--
+
+LOCK TABLES `callsignnetworkmap` WRITE;
+/*!40000 ALTER TABLE `callsignnetworkmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `callsignnetworkmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `capturecard`
+--
+
+DROP TABLE IF EXISTS `capturecard`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `capturecard` (
+  `cardid` int(10) unsigned NOT NULL auto_increment,
+  `videodevice` varchar(128) default NULL,
+  `audiodevice` varchar(128) default NULL,
+  `vbidevice` varchar(128) default NULL,
+  `cardtype` varchar(32) default 'V4L',
+  `defaultinput` varchar(32) default 'Television',
+  `audioratelimit` int(11) default NULL,
+  `hostname` varchar(255) default NULL,
+  `dvb_swfilter` int(11) default '0',
+  `dvb_sat_type` int(11) NOT NULL default '0',
+  `dvb_wait_for_seqstart` int(11) NOT NULL default '1',
+  `skipbtaudio` tinyint(1) default '0',
+  `dvb_on_demand` tinyint(4) NOT NULL default '0',
+  `dvb_diseqc_type` smallint(6) default NULL,
+  `firewire_port` int(10) unsigned NOT NULL default '0',
+  `firewire_node` int(10) unsigned NOT NULL default '2',
+  `firewire_speed` int(10) unsigned NOT NULL default '0',
+  `firewire_model` varchar(32) default NULL,
+  `firewire_connection` int(10) unsigned NOT NULL default '0',
+  `dbox2_port` int(10) unsigned NOT NULL default '31338',
+  `dbox2_httpport` int(10) unsigned NOT NULL default '80',
+  `dbox2_host` varchar(32) default NULL,
+  `signal_timeout` int(11) NOT NULL default '1000',
+  `channel_timeout` int(11) NOT NULL default '3000',
+  `dvb_tuning_delay` int(10) unsigned NOT NULL default '0',
+  `contrast` int(11) NOT NULL default '0',
+  `brightness` int(11) NOT NULL default '0',
+  `colour` int(11) NOT NULL default '0',
+  `hue` int(11) NOT NULL default '0',
+  `diseqcid` int(10) unsigned default NULL,
+  `dvb_eitscan` tinyint(1) NOT NULL default '1',
+  PRIMARY KEY  (`cardid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `capturecard`
+--
+
+LOCK TABLES `capturecard` WRITE;
+/*!40000 ALTER TABLE `capturecard` DISABLE KEYS */;
+/*!40000 ALTER TABLE `capturecard` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `cardinput`
+--
+
+DROP TABLE IF EXISTS `cardinput`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `cardinput` (
+  `cardinputid` int(10) unsigned NOT NULL auto_increment,
+  `cardid` int(10) unsigned NOT NULL default '0',
+  `sourceid` int(10) unsigned NOT NULL default '0',
+  `inputname` varchar(32) NOT NULL default '',
+  `externalcommand` varchar(128) default NULL,
+  `preference` int(11) NOT NULL default '0',
+  `shareable` char(1) default 'N',
+  `tunechan` varchar(10) default NULL,
+  `startchan` varchar(10) default NULL,
+  `freetoaironly` tinyint(1) default '1',
+  `diseqc_port` smallint(6) default NULL,
+  `diseqc_pos` float default NULL,
+  `lnb_lof_switch` int(11) default '11700000',
+  `lnb_lof_hi` int(11) default '10600000',
+  `lnb_lof_lo` int(11) default '9750000',
+  `displayname` varchar(64) NOT NULL default '',
+  `radioservices` tinyint(1) default '1',
+  `dishnet_eit` tinyint(1) NOT NULL default '0',
+  `recpriority` int(11) NOT NULL default '0',
+  `quicktune` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `cardinput`
+--
+
+LOCK TABLES `cardinput` WRITE;
+/*!40000 ALTER TABLE `cardinput` DISABLE KEYS */;
+/*!40000 ALTER TABLE `cardinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `channel`
+--
+
+DROP TABLE IF EXISTS `channel`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `channel` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `channum` varchar(10) NOT NULL default '',
+  `freqid` varchar(10) default NULL,
+  `sourceid` int(10) unsigned default NULL,
+  `callsign` varchar(20) NOT NULL default '',
+  `name` varchar(64) NOT NULL default '',
+  `icon` varchar(255) NOT NULL default 'none',
+  `finetune` int(11) default NULL,
+  `videofilters` varchar(255) NOT NULL default '',
+  `xmltvid` varchar(64) NOT NULL default '',
+  `recpriority` int(10) NOT NULL default '0',
+  `contrast` int(11) default '32768',
+  `brightness` int(11) default '32768',
+  `colour` int(11) default '32768',
+  `hue` int(11) default '32768',
+  `tvformat` varchar(10) NOT NULL default 'Default',
+  `commfree` tinyint(4) NOT NULL default '0',
+  `visible` tinyint(1) NOT NULL default '1',
+  `outputfilters` varchar(255) NOT NULL default '',
+  `useonairguide` tinyint(1) default '0',
+  `mplexid` smallint(6) default NULL,
+  `serviceid` mediumint(8) unsigned default NULL,
+  `atscsrcid` int(11) default NULL,
+  `tmoffset` int(11) NOT NULL default '0',
+  `atsc_major_chan` int(10) unsigned NOT NULL default '0',
+  `atsc_minor_chan` int(10) unsigned NOT NULL default '0',
+  `last_record` datetime NOT NULL,
+  `default_authority` varchar(32) NOT NULL default '',
+  `commmethod` int(11) NOT NULL default '-1',
+  PRIMARY KEY  (`chanid`),
+  KEY `channel_src` (`channum`,`sourceid`),
+  KEY `sourceid` (`sourceid`,`xmltvid`,`chanid`),
+  KEY `visible` (`visible`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `channel`
+--
+
+LOCK TABLES `channel` WRITE;
+/*!40000 ALTER TABLE `channel` DISABLE KEYS */;
+/*!40000 ALTER TABLE `channel` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `codecparams`
+--
+
+DROP TABLE IF EXISTS `codecparams`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `codecparams` (
+  `profile` int(10) unsigned NOT NULL default '0',
+  `name` varchar(128) NOT NULL default '',
+  `value` varchar(128) default NULL,
+  PRIMARY KEY  (`profile`,`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `codecparams`
+--
+
+LOCK TABLES `codecparams` WRITE;
+/*!40000 ALTER TABLE `codecparams` DISABLE KEYS */;
+/*!40000 ALTER TABLE `codecparams` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `credits`
+--
+
+DROP TABLE IF EXISTS `credits`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `credits` (
+  `person` mediumint(8) unsigned NOT NULL default '0',
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL default '',
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+  KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `credits`
+--
+
+LOCK TABLES `credits` WRITE;
+/*!40000 ALTER TABLE `credits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `credits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `customexample`
+--
+
+DROP TABLE IF EXISTS `customexample`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `customexample` (
+  `rulename` varchar(64) NOT NULL,
+  `fromclause` text NOT NULL,
+  `whereclause` text NOT NULL,
+  `search` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`rulename`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `customexample`
+--
+
+LOCK TABLES `customexample` WRITE;
+/*!40000 ALTER TABLE `customexample` DISABLE KEYS */;
+INSERT INTO `customexample` (`rulename`, `fromclause`, `whereclause`, `search`) VALUES ('New Flix','','program.category_type = \'movie\' AND program.airdate >= \n     YEAR(DATE_SUB(NOW(), INTERVAL 1 YEAR)) \nAND program.stars > 0.5 ',1);
+/*!40000 ALTER TABLE `customexample` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_config`
+--
+
+DROP TABLE IF EXISTS `diseqc_config`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_config` (
+  `cardinputid` int(10) unsigned NOT NULL,
+  `diseqcid` int(10) unsigned NOT NULL,
+  `value` varchar(16) NOT NULL default '',
+  KEY `id` (`cardinputid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_config`
+--
+
+LOCK TABLES `diseqc_config` WRITE;
+/*!40000 ALTER TABLE `diseqc_config` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_config` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `diseqc_tree`
+--
+
+DROP TABLE IF EXISTS `diseqc_tree`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `diseqc_tree` (
+  `diseqcid` int(10) unsigned NOT NULL auto_increment,
+  `parentid` int(10) unsigned default NULL,
+  `ordinal` tinyint(3) unsigned NOT NULL,
+  `type` varchar(16) NOT NULL default '',
+  `subtype` varchar(16) NOT NULL default '',
+  `description` varchar(32) NOT NULL default '',
+  `switch_ports` tinyint(3) unsigned NOT NULL default '0',
+  `rotor_hi_speed` float NOT NULL default '0',
+  `rotor_lo_speed` float NOT NULL default '0',
+  `rotor_positions` varchar(255) NOT NULL default '',
+  `lnb_lof_switch` int(10) NOT NULL default '0',
+  `lnb_lof_hi` int(10) NOT NULL default '0',
+  `lnb_lof_lo` int(10) NOT NULL default '0',
+  `cmd_repeat` int(11) NOT NULL default '1',
+  `lnb_pol_inv` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`diseqcid`),
+  KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `diseqc_tree`
+--
+
+LOCK TABLES `diseqc_tree` WRITE;
+/*!40000 ALTER TABLE `diseqc_tree` DISABLE KEYS */;
+/*!40000 ALTER TABLE `diseqc_tree` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofilegroups`
+--
+
+DROP TABLE IF EXISTS `displayprofilegroups`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofilegroups` (
+  `name` varchar(128) NOT NULL,
+  `hostname` varchar(255) NOT NULL,
+  `profilegroupid` int(10) unsigned NOT NULL auto_increment,
+  PRIMARY KEY  (`name`,`hostname`),
+  UNIQUE KEY `profilegroupid` (`profilegroupid`)
+) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofilegroups`
+--
+
+LOCK TABLES `displayprofilegroups` WRITE;
+/*!40000 ALTER TABLE `displayprofilegroups` DISABLE KEYS */;
+INSERT INTO `displayprofilegroups` (`name`, `hostname`, `profilegroupid`) VALUES ('CPU++','larch5',1),('CPU+','larch5',2),('CPU--','larch5',3),('High Quality','larch5',4),('Normal','larch5',5),('Slim','larch5',6);
+/*!40000 ALTER TABLE `displayprofilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `displayprofiles`
+--
+
+DROP TABLE IF EXISTS `displayprofiles`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `displayprofiles` (
+  `profilegroupid` int(10) unsigned NOT NULL,
+  `profileid` int(10) unsigned NOT NULL auto_increment,
+  `value` varchar(128) NOT NULL,
+  `data` varchar(255) NOT NULL default '',
+  KEY `profilegroupid` (`profilegroupid`),
+  KEY `profileid` (`profileid`,`value`),
+  KEY `profileid_2` (`profileid`)
+) ENGINE=MyISAM AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `displayprofiles`
+--
+
+LOCK TABLES `displayprofiles` WRITE;
+/*!40000 ALTER TABLE `displayprofiles` DISABLE KEYS */;
+INSERT INTO `displayprofiles` (`profilegroupid`, `profileid`, `value`, `data`) VALUES (1,1,'pref_priority','1'),(1,1,'pref_cmp0','> 0 0'),(1,1,'pref_decoder','ffmpeg'),(1,1,'pref_max_cpus','1'),(1,1,'pref_videorenderer','xv-blit'),(1,1,'pref_osdrenderer','softblend'),(1,1,'pref_osdfade','1'),(1,1,'pref_deint0','bobdeint'),(1,1,'pref_deint1','linearblend'),(1,1,'pref_filters',''),(1,2,'pref_priority','2'),(1,2,'pref_cmp0','> 0 0'),(1,2,'pref_decoder','ffmpeg'),(1,2,'pref_max_cpus','1'),(1,2,'pref_videorenderer','quartz-blit'),(1,2,'pref_osdrenderer','softblend'),(1,2,'pref_osdfade','1'),(1,2,'pref_deint0','linearblend'),(1,2,'pref_deint1','linearblend'),(1,2,'pref_filters',''),(2,3,'pref_priority','1'),(2,3,'pref_cmp0','<= 720 576'),(2,3,'pref_cmp1','> 0 0'),(2,3,'pref_decoder','ffmpeg'),(2,3,'pref_max_cpus','1'),(2,3,'pref_videorenderer','xv-blit'),(2,3,'pref_osdrenderer','softblend'),(2,3,'pref_osdfade','1'),(2,3,'pref_deint0','bobdeint'),(2,3,'pref_deint1','linearblend'),(2,3,'pref_filters',''),(2,4,'pref_priority','2'),(2,4,'pref_cmp0','<= 1280 720'),(2,4,'pref_cmp1','> 720 576'),(2,4,'pref_decoder','xvmc'),(2,4,'pref_max_cpus','1'),(2,4,'pref_videorenderer','xvmc-blit'),(2,4,'pref_osdrenderer','opengl'),(2,4,'pref_osdfade','1'),(2,4,'pref_deint0','bobdeint'),(2,4,'pref_deint1','onefield'),(2,4,'pref_filters',''),(2,5,'pref_priority','3'),(2,5,'pref_cmp0','<= 1280 720'),(2,5,'pref_cmp1','> 720 576'),(2,5,'pref_decoder','libmpeg2'),(2,5,'pref_max_cpus','1'),(2,5,'pref_videorenderer','xv-blit'),(2,5,'pref_osdrenderer','softblend'),(2,5,'pref_osdfade','1'),(2,5,'pref_deint0','bobdeint'),(2,5,'pref_deint1','onefield'),(2,5,'pref_filters',''),(2,6,'pref_priority','4'),(2,6,'pref_cmp0','> 0 0'),(2,6,'pref_decoder','xvmc'),(2,6,'pref_max_cpus','1'),(2,6,'pref_videorenderer','xvmc-blit'),(2,6,'pref_osdrenderer','ia44blend'),(2,6,'pref_osdfade','0'),(2,6,'pref_deint0','bobdeint'),(2,6,'pref_deint1','onefield'),(2,6,'pref_filters',''),(2,7,'pref_priority','5'),(2,7,'pref_cmp0','> 0 0'),(2,7,'pref_decoder','libmpeg2'),(2,7,'pref_max_cpus','1'),(2,7,'pref_videorenderer','xv-blit'),(2,7,'pref_osdrenderer','chromakey'),(2,7,'pref_osdfade','0'),(2,7,'pref_deint0','bobdeint'),(2,7,'pref_deint1','onefield'),(2,7,'pref_filters',''),(3,8,'pref_priority','1'),(3,8,'pref_cmp0','<= 720 576'),(3,8,'pref_cmp1','> 0 0'),(3,8,'pref_decoder','ivtv'),(3,8,'pref_max_cpus','1'),(3,8,'pref_videorenderer','ivtv'),(3,8,'pref_osdrenderer','ivtv'),(3,8,'pref_osdfade','1'),(3,8,'pref_deint0','none'),(3,8,'pref_deint1','none'),(3,8,'pref_filters',''),(3,9,'pref_priority','2'),(3,9,'pref_cmp0','<= 720 576'),(3,9,'pref_cmp1','> 0 0'),(3,9,'pref_decoder','xvmc'),(3,9,'pref_max_cpus','1'),(3,9,'pref_videorenderer','xvmc-blit'),(3,9,'pref_osdrenderer','ia44blend'),(3,9,'pref_osdfade','0'),(3,9,'pref_deint0','bobdeint'),(3,9,'pref_deint1','onefield'),(3,9,'pref_filters',''),(3,10,'pref_priority','3'),(3,10,'pref_cmp0','<= 1280 720'),(3,10,'pref_cmp1','> 720 576'),(3,10,'pref_decoder','xvmc'),(3,10,'pref_max_cpus','1'),(3,10,'pref_videorenderer','xvmc-blit'),(3,10,'pref_osdrenderer','ia44blend'),(3,10,'pref_osdfade','0'),(3,10,'pref_deint0','bobdeint'),(3,10,'pref_deint1','onefield'),(3,10,'pref_filters',''),(3,11,'pref_priority','4'),(3,11,'pref_cmp0','> 0 0'),(3,11,'pref_decoder','xvmc'),(3,11,'pref_max_cpus','1'),(3,11,'pref_videorenderer','xvmc-blit'),(3,11,'pref_osdrenderer','ia44blend'),(3,11,'pref_osdfade','0'),(3,11,'pref_deint0','bobdeint'),(3,11,'pref_deint1','onefield'),(3,11,'pref_filters',''),(3,12,'pref_priority','5'),(3,12,'pref_cmp0','> 0 0'),(3,12,'pref_decoder','libmpeg2'),(3,12,'pref_max_cpus','1'),(3,12,'pref_videorenderer','xv-blit'),(3,12,'pref_osdrenderer','chromakey'),(3,12,'pref_osdfade','0'),(3,12,'pref_deint0','none'),(3,12,'pref_deint1','none'),(3,12,'pref_filters',''),(4,13,'pref_priority','1'),(4,13,'pref_cmp0','>= 1920 1080'),(4,13,'pref_decoder','ffmpeg'),(4,13,'pref_max_cpus','2'),(4,13,'pref_videorenderer','xv-blit'),(4,13,'pref_osdrenderer','softblend'),(4,13,'pref_osdfade','1'),(4,13,'pref_deint0','linearblend'),(4,13,'pref_deint1','linearblend'),(4,13,'pref_filters',''),(4,14,'pref_priority','2'),(4,14,'pref_cmp0','> 0 0'),(4,14,'pref_decoder','ffmpeg'),(4,14,'pref_max_cpus','1'),(4,14,'pref_videorenderer','xv-blit'),(4,14,'pref_osdrenderer','softblend'),(4,14,'pref_osdfade','1'),(4,14,'pref_deint0','yadifdoubleprocessdeint'),(4,14,'pref_deint1','yadifdeint'),(4,14,'pref_filters',''),(4,15,'pref_priority','3'),(4,15,'pref_cmp0','>= 1920 1080'),(4,15,'pref_decoder','ffmpeg'),(4,15,'pref_max_cpus','2'),(4,15,'pref_videorenderer','quartz-blit'),(4,15,'pref_osdrenderer','softblend'),(4,15,'pref_osdfade','1'),(4,15,'pref_deint0','linearblend'),(4,15,'pref_deint1','linearblend'),(4,15,'pref_filters',''),(4,16,'pref_priority','4'),(4,16,'pref_cmp0','> 0 0'),(4,16,'pref_decoder','ffmpeg'),(4,16,'pref_max_cpus','1'),(4,16,'pref_videorenderer','quartz-blit'),(4,16,'pref_osdrenderer','softblend'),(4,16,'pref_osdfade','1'),(4,16,'pref_deint0','yadifdoubleprocessdeint'),(4,16,'pref_deint1','yadifdeint'),(4,16,'pref_filters',''),(5,17,'pref_priority','1'),(5,17,'pref_cmp0','>= 1280 720'),(5,17,'pref_decoder','ffmpeg'),(5,17,'pref_max_cpus','1'),(5,17,'pref_videorenderer','xv-blit'),(5,17,'pref_osdrenderer','softblend'),(5,17,'pref_osdfade','0'),(5,17,'pref_deint0','linearblend'),(5,17,'pref_deint1','linearblend'),(5,17,'pref_filters',''),(5,18,'pref_priority','2'),(5,18,'pref_cmp0','> 0 0'),(5,18,'pref_decoder','ffmpeg'),(5,18,'pref_max_cpus','1'),(5,18,'pref_videorenderer','xv-blit'),(5,18,'pref_osdrenderer','softblend'),(5,18,'pref_osdfade','1'),(5,18,'pref_deint0','greedyhdoubleprocessdeint'),(5,18,'pref_deint1','kerneldeint'),(5,18,'pref_filters',''),(5,19,'pref_priority','3'),(5,19,'pref_cmp0','>= 1280 720'),(5,19,'pref_decoder','ffmpeg'),(5,19,'pref_max_cpus','1'),(5,19,'pref_videorenderer','quartz-blit'),(5,19,'pref_osdrenderer','softblend'),(5,19,'pref_osdfade','0'),(5,19,'pref_deint0','linearblend'),(5,19,'pref_deint1','linearblend'),(5,19,'pref_filters',''),(5,20,'pref_priority','4'),(5,20,'pref_cmp0','> 0 0'),(5,20,'pref_decoder','ffmpeg'),(5,20,'pref_max_cpus','1'),(5,20,'pref_videorenderer','quartz-blit'),(5,20,'pref_osdrenderer','softblend'),(5,20,'pref_osdfade','1'),(5,20,'pref_deint0','greedyhdoubleprocessdeint'),(5,20,'pref_deint1','kerneldeint'),(5,20,'pref_filters',''),(6,21,'pref_priority','1'),(6,21,'pref_cmp0','>= 1280 720'),(6,21,'pref_decoder','ffmpeg'),(6,21,'pref_max_cpus','1'),(6,21,'pref_videorenderer','xv-blit'),(6,21,'pref_osdrenderer','softblend'),(6,21,'pref_osdfade','0'),(6,21,'pref_deint0','onefield'),(6,21,'pref_deint1','onefield'),(6,21,'pref_filters',''),(6,22,'pref_priority','2'),(6,22,'pref_cmp0','> 0 0'),(6,22,'pref_decoder','ffmpeg'),(6,22,'pref_max_cpus','1'),(6,22,'pref_videorenderer','xv-blit'),(6,22,'pref_osdrenderer','softblend'),(6,22,'pref_osdfade','1'),(6,22,'pref_deint0','linearblend'),(6,22,'pref_deint1','linearblend'),(6,22,'pref_filters',''),(6,23,'pref_priority','3'),(6,23,'pref_cmp0','>= 1280 720'),(6,23,'pref_decoder','ffmpeg'),(6,23,'pref_max_cpus','1'),(6,23,'pref_videorenderer','quartz-blit'),(6,23,'pref_osdrenderer','softblend'),(6,23,'pref_osdfade','0'),(6,23,'pref_deint0','onefield'),(6,23,'pref_deint1','onefield'),(6,23,'pref_filters',''),(6,24,'pref_priority','4'),(6,24,'pref_cmp0','> 0 0'),(6,24,'pref_decoder','ffmpeg'),(6,24,'pref_max_cpus','1'),(6,24,'pref_videorenderer','quartz-blit'),(6,24,'pref_osdrenderer','softblend'),(6,24,'pref_osdfade','1'),(6,24,'pref_deint0','linearblend'),(6,24,'pref_deint1','linearblend'),(6,24,'pref_filters','');
+/*!40000 ALTER TABLE `displayprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_multiplex`
+--
+
+DROP TABLE IF EXISTS `dtv_multiplex`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_multiplex` (
+  `mplexid` smallint(6) NOT NULL auto_increment,
+  `sourceid` smallint(6) default NULL,
+  `transportid` int(11) default NULL,
+  `networkid` int(11) default NULL,
+  `frequency` int(11) default NULL,
+  `inversion` char(1) default 'a',
+  `symbolrate` int(11) default NULL,
+  `fec` varchar(10) default 'auto',
+  `polarity` char(1) default NULL,
+  `modulation` varchar(10) default 'auto',
+  `bandwidth` char(1) default 'a',
+  `lp_code_rate` varchar(10) default 'auto',
+  `transmission_mode` char(1) default 'a',
+  `guard_interval` varchar(10) default 'auto',
+  `visible` smallint(1) NOT NULL default '0',
+  `constellation` varchar(10) default 'auto',
+  `hierarchy` varchar(10) default 'auto',
+  `hp_code_rate` varchar(10) default 'auto',
+  `sistandard` varchar(10) default 'dvb',
+  `serviceversion` smallint(6) default '33',
+  `updatetimestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  PRIMARY KEY  (`mplexid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_multiplex`
+--
+
+LOCK TABLES `dtv_multiplex` WRITE;
+/*!40000 ALTER TABLE `dtv_multiplex` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dtv_multiplex` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dtv_privatetypes`
+--
+
+DROP TABLE IF EXISTS `dtv_privatetypes`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dtv_privatetypes` (
+  `sitype` varchar(4) NOT NULL default '',
+  `networkid` int(11) NOT NULL default '0',
+  `private_type` varchar(20) NOT NULL default '',
+  `private_value` varchar(100) NOT NULL default ''
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dtv_privatetypes`
+--
+
+LOCK TABLES `dtv_privatetypes` WRITE;
+/*!40000 ALTER TABLE `dtv_privatetypes` DISABLE KEYS */;
+INSERT INTO `dtv_privatetypes` (`sitype`, `networkid`, `private_type`, `private_value`) VALUES ('dvb',9018,'channel_numbers','131'),('dvb',9018,'guide_fixup','2'),('dvb',256,'guide_fixup','1'),('dvb',257,'guide_fixup','1'),('dvb',256,'tv_types','1,150,134,133'),('dvb',257,'tv_types','1,150,134,133'),('dvb',4100,'sdt_mapping','1'),('dvb',4101,'sdt_mapping','1'),('dvb',4102,'sdt_mapping','1'),('dvb',4103,'sdt_mapping','1'),('dvb',4104,'sdt_mapping','1'),('dvb',4105,'sdt_mapping','1'),('dvb',4106,'sdt_mapping','1'),('dvb',4107,'sdt_mapping','1'),('dvb',4097,'sdt_mapping','1'),('dvb',4098,'sdt_mapping','1'),('dvb',4100,'tv_types','1,145,154'),('dvb',4101,'tv_types','1,145,154'),('dvb',4102,'tv_types','1,145,154'),('dvb',4103,'tv_types','1,145,154'),('dvb',4104,'tv_types','1,145,154'),('dvb',4105,'tv_types','1,145,154'),('dvb',4106,'tv_types','1,145,154'),('dvb',4107,'tv_types','1,145,154'),('dvb',4097,'tv_types','1,145,154'),('dvb',4098,'tv_types','1,145,154'),('dvb',4100,'guide_fixup','1'),('dvb',4101,'guide_fixup','1'),('dvb',4102,'guide_fixup','1'),('dvb',4103,'guide_fixup','1'),('dvb',4104,'guide_fixup','1'),('dvb',4105,'guide_fixup','1'),('dvb',4106,'guide_fixup','1'),('dvb',4107,'guide_fixup','1'),('dvb',4096,'guide_fixup','5'),('dvb',4097,'guide_fixup','1'),('dvb',4098,'guide_fixup','1'),('dvb',94,'tv_types','1,128'),('atsc',1793,'guide_fixup','3'),('dvb',40999,'guide_fixup','4'),('dvb',70,'force_guide_present','yes'),('dvb',70,'guide_ranges','80,80,96,96'),('dvb',4112,'channel_numbers','131'),('dvb',4115,'channel_numbers','131'),('dvb',4116,'channel_numbers','131'),('dvb',12802,'channel_numbers','131'),('dvb',12803,'channel_numbers','131'),('dvb',12829,'channel_numbers','131'),('dvb',40999,'parse_subtitle_list','1070,1308,1041,1306,1307,1030,1016,1131,1068,1069'),('dvb',4096,'guide_fixup','5');
+/*!40000 ALTER TABLE `dtv_privatetypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdbookmark`
+--
+
+DROP TABLE IF EXISTS `dvdbookmark`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdbookmark` (
+  `serialid` varchar(16) NOT NULL default '',
+  `name` varchar(32) default NULL,
+  `title` smallint(6) NOT NULL default '0',
+  `audionum` tinyint(4) NOT NULL default '-1',
+  `subtitlenum` tinyint(4) NOT NULL default '-1',
+  `framenum` bigint(20) NOT NULL default '0',
+  `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  PRIMARY KEY  (`serialid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdbookmark`
+--
+
+LOCK TABLES `dvdbookmark` WRITE;
+/*!40000 ALTER TABLE `dvdbookmark` DISABLE KEYS */;
+/*!40000 ALTER TABLE `dvdbookmark` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdinput`
+--
+
+DROP TABLE IF EXISTS `dvdinput`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdinput` (
+  `intid` int(10) unsigned NOT NULL,
+  `hsize` int(10) unsigned default NULL,
+  `vsize` int(10) unsigned default NULL,
+  `ar_num` int(10) unsigned default NULL,
+  `ar_denom` int(10) unsigned default NULL,
+  `fr_code` int(10) unsigned default NULL,
+  `letterbox` tinyint(1) default NULL,
+  `v_format` varchar(16) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdinput`
+--
+
+LOCK TABLES `dvdinput` WRITE;
+/*!40000 ALTER TABLE `dvdinput` DISABLE KEYS */;
+INSERT INTO `dvdinput` (`intid`, `hsize`, `vsize`, `ar_num`, `ar_denom`, `fr_code`, `letterbox`, `v_format`) VALUES (1,720,480,16,9,1,1,'ntsc'),(2,720,480,16,9,1,0,'ntsc'),(3,720,480,4,3,1,1,'ntsc'),(4,720,480,4,3,1,0,'ntsc'),(5,720,576,16,9,3,1,'pal'),(6,720,576,16,9,3,0,'pal'),(7,720,576,4,3,3,1,'pal'),(8,720,576,4,3,3,0,'pal');
+/*!40000 ALTER TABLE `dvdinput` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `dvdtranscode`
+--
+
+DROP TABLE IF EXISTS `dvdtranscode`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `dvdtranscode` (
+  `intid` int(11) NOT NULL auto_increment,
+  `input` int(10) unsigned default NULL,
+  `name` varchar(128) NOT NULL,
+  `sync_mode` int(10) unsigned default NULL,
+  `use_yv12` tinyint(1) default NULL,
+  `cliptop` int(11) default NULL,
+  `clipbottom` int(11) default NULL,
+  `clipleft` int(11) default NULL,
+  `clipright` int(11) default NULL,
+  `f_resize_h` int(11) default NULL,
+  `f_resize_w` int(11) default NULL,
+  `hq_resize_h` int(11) default NULL,
+  `hq_resize_w` int(11) default NULL,
+  `grow_h` int(11) default NULL,
+  `grow_w` int(11) default NULL,
+  `clip2top` int(11) default NULL,
+  `clip2bottom` int(11) default NULL,
+  `clip2left` int(11) default NULL,
+  `clip2right` int(11) default NULL,
+  `codec` varchar(128) NOT NULL,
+  `codec_param` varchar(128) default NULL,
+  `bitrate` int(11) default NULL,
+  `a_sample_r` int(11) default NULL,
+  `a_bitrate` int(11) default NULL,
+  `two_pass` tinyint(1) default NULL,
+  `tc_param` varchar(128) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `dvdtranscode`
+--
+
+LOCK TABLES `dvdtranscode` WRITE;
+/*!40000 ALTER TABLE `dvdtranscode` DISABLE KEYS */;
+INSERT INTO `dvdtranscode` (`intid`, `input`, `name`, `sync_mode`, `use_yv12`, `cliptop`, `clipbottom`, `clipleft`, `clipright`, `f_resize_h`, `f_resize_w`, `hq_resize_h`, `hq_resize_w`, `grow_h`, `grow_w`, `clip2top`, `clip2bottom`, `clip2left`, `clip2right`, `codec`, `codec_param`, `bitrate`, `a_sample_r`, `a_bitrate`, `two_pass`, `tc_param`) VALUES (1,1,'Good',2,1,16,16,0,0,2,0,0,0,0,0,32,32,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(2,2,'Excellent',2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(3,2,'Good',2,1,0,0,8,8,0,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(4,2,'Medium',2,1,0,0,8,8,5,5,0,0,0,0,0,0,0,0,'divx5',NULL,1200,NULL,NULL,0,NULL),(5,3,'Good',2,1,0,0,0,0,0,0,0,0,2,0,80,80,8,8,'divx5',NULL,0,NULL,NULL,0,NULL),(6,4,'Excellent',2,1,0,0,0,0,0,0,0,0,2,0,0,0,0,0,'divx5',NULL,0,NULL,NULL,1,NULL),(7,4,'Good',2,1,0,0,8,8,0,2,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(8,5,'Good',1,1,16,16,0,0,5,0,0,0,0,0,40,40,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(9,6,'Good',1,1,0,0,16,16,5,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL),(10,7,'Good',1,1,0,0,0,0,1,0,0,0,0,0,76,76,8,8,'divx5',NULL,1618,NULL,NULL,0,NULL),(11,8,'Good',1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,'divx5',NULL,1618,NULL,NULL,0,NULL);
+/*!40000 ALTER TABLE `dvdtranscode` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `eit_cache`
+--
+
+DROP TABLE IF EXISTS `eit_cache`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `eit_cache` (
+  `chanid` int(10) NOT NULL,
+  `eventid` int(10) unsigned NOT NULL default '0',
+  `tableid` tinyint(3) unsigned NOT NULL,
+  `version` tinyint(3) unsigned NOT NULL,
+  `endtime` int(10) unsigned NOT NULL,
+  `status` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`chanid`,`eventid`,`status`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `eit_cache`
+--
+
+LOCK TABLES `eit_cache` WRITE;
+/*!40000 ALTER TABLE `eit_cache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `eit_cache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `favorites`
+--
+
+DROP TABLE IF EXISTS `favorites`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `favorites` (
+  `favid` int(11) unsigned NOT NULL auto_increment,
+  `userid` int(11) unsigned NOT NULL default '0',
+  `chanid` int(11) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`favid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `favorites`
+--
+
+LOCK TABLES `favorites` WRITE;
+/*!40000 ALTER TABLE `favorites` DISABLE KEYS */;
+/*!40000 ALTER TABLE `favorites` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `filemarkup`
+--
+
+DROP TABLE IF EXISTS `filemarkup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `filemarkup` (
+  `filename` text NOT NULL,
+  `mark` mediumint(8) unsigned NOT NULL default '0',
+  `offset` bigint(20) unsigned default NULL,
+  `type` tinyint(4) NOT NULL default '0',
+  KEY `filename` (`filename`(255))
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `filemarkup`
+--
+
+LOCK TABLES `filemarkup` WRITE;
+/*!40000 ALTER TABLE `filemarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `filemarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gallerymetadata`
+--
+
+DROP TABLE IF EXISTS `gallerymetadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gallerymetadata` (
+  `image` varchar(255) NOT NULL,
+  `angle` int(11) NOT NULL,
+  PRIMARY KEY  (`image`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gallerymetadata`
+--
+
+LOCK TABLES `gallerymetadata` WRITE;
+/*!40000 ALTER TABLE `gallerymetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gallerymetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gamemetadata`
+--
+
+DROP TABLE IF EXISTS `gamemetadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gamemetadata` (
+  `system` varchar(128) NOT NULL default '',
+  `romname` varchar(128) NOT NULL default '',
+  `gamename` varchar(128) NOT NULL default '',
+  `genre` varchar(128) NOT NULL default '',
+  `year` varchar(10) NOT NULL default '',
+  `publisher` varchar(128) NOT NULL default '',
+  `favorite` tinyint(1) default NULL,
+  `rompath` varchar(255) NOT NULL default '',
+  `gametype` varchar(64) NOT NULL default '',
+  `diskcount` tinyint(1) NOT NULL default '1',
+  `country` varchar(128) NOT NULL default '',
+  `crc_value` varchar(64) NOT NULL default '',
+  `display` tinyint(1) NOT NULL default '1',
+  `version` varchar(64) NOT NULL default '',
+  KEY `system` (`system`),
+  KEY `year` (`year`),
+  KEY `romname` (`romname`),
+  KEY `gamename` (`gamename`),
+  KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gamemetadata`
+--
+
+LOCK TABLES `gamemetadata` WRITE;
+/*!40000 ALTER TABLE `gamemetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gamemetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `gameplayers`
+--
+
+DROP TABLE IF EXISTS `gameplayers`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `gameplayers` (
+  `gameplayerid` int(10) unsigned NOT NULL auto_increment,
+  `playername` varchar(64) NOT NULL default '',
+  `workingpath` varchar(255) NOT NULL default '',
+  `rompath` varchar(255) NOT NULL default '',
+  `screenshots` varchar(255) NOT NULL default '',
+  `commandline` text NOT NULL,
+  `gametype` varchar(64) NOT NULL default '',
+  `extensions` varchar(128) NOT NULL default '',
+  `spandisks` tinyint(1) NOT NULL default '0',
+  PRIMARY KEY  (`gameplayerid`),
+  UNIQUE KEY `playername` (`playername`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `gameplayers`
+--
+
+LOCK TABLES `gameplayers` WRITE;
+/*!40000 ALTER TABLE `gameplayers` DISABLE KEYS */;
+/*!40000 ALTER TABLE `gameplayers` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `housekeeping`
+--
+
+DROP TABLE IF EXISTS `housekeeping`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `housekeeping` (
+  `tag` varchar(64) NOT NULL default '',
+  `lastrun` datetime default NULL,
+  PRIMARY KEY  (`tag`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `housekeeping`
+--
+
+LOCK TABLES `housekeeping` WRITE;
+/*!40000 ALTER TABLE `housekeeping` DISABLE KEYS */;
+/*!40000 ALTER TABLE `housekeeping` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inputgroup`
+--
+
+DROP TABLE IF EXISTS `inputgroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inputgroup` (
+  `cardinputid` int(10) unsigned NOT NULL,
+  `inputgroupid` int(10) unsigned NOT NULL,
+  `inputgroupname` varchar(32) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inputgroup`
+--
+
+LOCK TABLES `inputgroup` WRITE;
+/*!40000 ALTER TABLE `inputgroup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inputgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `inuseprograms`
+--
+
+DROP TABLE IF EXISTS `inuseprograms`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `inuseprograms` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `recusage` varchar(128) NOT NULL default '',
+  `lastupdatetime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `hostname` varchar(255) NOT NULL default '',
+  `rechost` varchar(64) NOT NULL,
+  `recdir` varchar(255) NOT NULL default '',
+  KEY `chanid` (`chanid`,`starttime`),
+  KEY `recusage` (`recusage`,`lastupdatetime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `inuseprograms`
+--
+
+LOCK TABLES `inuseprograms` WRITE;
+/*!40000 ALTER TABLE `inuseprograms` DISABLE KEYS */;
+/*!40000 ALTER TABLE `inuseprograms` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jobqueue`
+--
+
+DROP TABLE IF EXISTS `jobqueue`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jobqueue` (
+  `id` int(11) NOT NULL auto_increment,
+  `chanid` int(10) NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `inserttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `type` int(11) NOT NULL default '0',
+  `cmds` int(11) NOT NULL default '0',
+  `flags` int(11) NOT NULL default '0',
+  `status` int(11) NOT NULL default '0',
+  `statustime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `hostname` varchar(255) NOT NULL default '',
+  `args` blob NOT NULL,
+  `comment` varchar(128) NOT NULL default '',
+  `schedruntime` datetime NOT NULL default '2007-01-01 00:00:00',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`type`,`inserttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jobqueue`
+--
+
+LOCK TABLES `jobqueue` WRITE;
+/*!40000 ALTER TABLE `jobqueue` DISABLE KEYS */;
+/*!40000 ALTER TABLE `jobqueue` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `jumppoints`
+--
+
+DROP TABLE IF EXISTS `jumppoints`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `jumppoints` (
+  `destination` varchar(128) NOT NULL default '',
+  `description` varchar(255) default NULL,
+  `keylist` varchar(128) default NULL,
+  `hostname` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`destination`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `jumppoints`
+--
+
+LOCK TABLES `jumppoints` WRITE;
+/*!40000 ALTER TABLE `jumppoints` DISABLE KEYS */;
+INSERT INTO `jumppoints` (`destination`, `description`, `keylist`, `hostname`) VALUES ('Reload Theme','','','larch5'),('Main Menu','','','larch5'),('Program Guide','','','larch5'),('Program Finder','','','larch5'),('Manage Recordings / Fix Conflicts','','','larch5'),('Program Recording Priorities','','','larch5'),('Channel Recording Priorities','','','larch5'),('TV Recording Playback','','','larch5'),('TV Recording Deletion','','','larch5'),('Live TV','','','larch5'),('Live TV In Guide','','','larch5'),('Manual Record Scheduling','','','larch5'),('Status Screen','','','larch5'),('Previously Recorded','','','larch5'),('Netflix Browser','Browse Netflix titles','','larch5'),('Netflix Queue','Administer Netflix Queue','','larch5'),('Netflix History','View Netflix History','','larch5'),('MythGallery','Image viewer / slideshow','','larch5'),('MythGame','Game frontend','','larch5'),('Play music','','','larch5'),('Select music playlists','','','larch5'),('Rip CD','','','larch5'),('Scan music','','','larch5'),('Show Music Miniplayer','','','larch5'),('MythNews','RSS News feed reader','','larch5'),('MythVideo','The MythVideo default view','','larch5'),('Video Manager','The MythVideo video manager','','larch5'),('Video Browser','The MythVideo video browser','','larch5'),('Video Listings','The MythVideo video listings','','larch5'),('Video Gallery','The MythVideo video gallery','','larch5'),('Play DVD','Play a DVD','','larch5'),('Play VCD','Play a VCD','','larch5'),('Rip DVD','Import a DVD into your MythVideo database','','larch5'),('MythWeather','Weather forecasts','','larch5');
+/*!40000 ALTER TABLE `jumppoints` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keybindings`
+--
+
+DROP TABLE IF EXISTS `keybindings`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keybindings` (
+  `context` varchar(32) NOT NULL default '',
+  `action` varchar(32) NOT NULL default '',
+  `description` varchar(255) default NULL,
+  `keylist` varchar(128) default NULL,
+  `hostname` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`context`,`action`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keybindings`
+--
+
+LOCK TABLES `keybindings` WRITE;
+/*!40000 ALTER TABLE `keybindings` DISABLE KEYS */;
+INSERT INTO `keybindings` (`context`, `action`, `description`, `keylist`, `hostname`) VALUES ('Global','UP','Up Arrow','Up','larch5'),('Global','DOWN','Down Arrow','Down','larch5'),('Global','LEFT','Left Arrow','Left','larch5'),('Global','RIGHT','Right Arrow','Right','larch5'),('Global','SELECT','Select','Return,Enter,Space','larch5'),('Global','ESCAPE','Escape','Esc','larch5'),('Global','MENU','Pop-up menu','M','larch5'),('Global','INFO','More information','I','larch5'),('Global','PAGEUP','Page Up','PgUp','larch5'),('Global','PAGEDOWN','Page Down','PgDown','larch5'),('Global','PREVVIEW','Previous View','Home','larch5'),('Global','NEXTVIEW','Next View','End','larch5'),('Global','HELP','Help','F1','larch5'),('Global','EJECT','Eject Removable Media','','larch5'),('Global','0','0','0','larch5'),('Global','1','1','1','larch5'),('Global','2','2','2','larch5'),('Global','3','3','3','larch5'),('Global','4','4','4','larch5'),('Global','5','5','5','larch5'),('Global','6','6','6','larch5'),('Global','7','7','7','larch5'),('Global','8','8','8','larch5'),('Global','9','9','9','larch5'),('qt','DELETE','Delete','D','larch5'),('qt','EDIT','Edit','E','larch5'),('TV Frontend','PAGEUP','Page Up','3','larch5'),('TV Frontend','PAGEDOWN','Page Down','9','larch5'),('TV Frontend','PAGETOP','Page to top of list','','larch5'),('TV Frontend','PAGEMIDDLE','Page to middle of list','','larch5'),('TV Frontend','PAGEBOTTOM','Page to bottom of list','','larch5'),('TV Frontend','DELETE','Delete Program','D','larch5'),('TV Frontend','PLAYBACK','Play Program','P','larch5'),('TV Frontend','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Frontend','DAYLEFT','Page the program guide back one day','Home,7','larch5'),('TV Frontend','DAYRIGHT','Page the program guide forward one day','End,1','larch5'),('TV Frontend','PAGELEFT','Page the program guide left',',,<','larch5'),('TV Frontend','PAGERIGHT','Page the program guide right','>,.','larch5'),('TV Frontend','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Frontend','TOGGLEEPGORDER','Reverse the channel order in the program guide','0','larch5'),('TV Frontend','GUIDE','Show the Program Guide','S','larch5'),('TV Frontend','FINDER','Show the Program Finder','#','larch5'),('TV Frontend','NEXTFAV','Toggle showing all channels or just favorites in the program guide.','/','larch5'),('TV Frontend','CHANUPDATE','Switch channels without exiting guide in Live TV mode.','X','larch5'),('TV Frontend','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Frontend','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Frontend','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Frontend','RANKINC','Increase program or channel rank','Right','larch5'),('TV Frontend','RANKDEC','Decrease program or channel rank','Left','larch5'),('TV Frontend','UPCOMING','List upcoming episodes','O','larch5'),('TV Frontend','DETAILS','Show program details','U','larch5'),('TV Frontend','VIEWCARD','Switch Capture Card view','Y','larch5'),('TV Frontend','VIEWINPUT','Switch Capture Card view','C','larch5'),('TV Frontend','CUSTOMEDIT','Edit Custom Record Rule','E','larch5'),('TV Frontend','CHANGERECGROUP','Change Recording Group','','larch5'),('TV Frontend','CHANGEGROUPVIEW','Change Group View','','larch5'),('TV Playback','CLEAROSD','Clear OSD','Backspace','larch5'),('TV Playback','PAUSE','Pause','P','larch5'),('TV Playback','DELETE','Delete Program','D','larch5'),('TV Playback','SEEKFFWD','Fast Forward','Right','larch5'),('TV Playback','SEEKRWND','Rewind','Left','larch5'),('TV Playback','ARBSEEK','Arbitrary Seek','*','larch5'),('TV Playback','CHANNELUP','Channel up','Up','larch5'),('TV Playback','CHANNELDOWN','Channel down','Down','larch5'),('TV Playback','NEXTFAV','Switch to the next favorite channel','/','larch5'),('TV Playback','PREVCHAN','Switch to the previous channel','H','larch5'),('TV Playback','JUMPFFWD','Jump ahead','PgDown','larch5'),('TV Playback','JUMPRWND','Jump back','PgUp','larch5'),('TV Playback','JUMPBKMRK','Jump to bookmark','K','larch5'),('TV Playback','FFWDSTICKY','Fast Forward (Sticky) or Forward one frame while paused','>,.','larch5'),('TV Playback','RWNDSTICKY','Rewind (Sticky) or Rewind one frame while paused',',,<','larch5'),('TV Playback','NEXTSOURCE','Next Video Source','Y','larch5'),('TV Playback','PREVSOURCE','Previous Video Source','Ctrl+Y','larch5'),('TV Playback','NEXTINPUT','Next Input','C','larch5'),('TV Playback','NEXTCARD','Next Card','','larch5'),('TV Playback','SKIPCOMMERCIAL','Skip Commercial','Z,End','larch5'),('TV Playback','SKIPCOMMBACK','Skip Commercial (Reverse)','Q,Home','larch5'),('TV Playback','JUMPSTART','Jump to the start of the recording.','Ctrl+B','larch5'),('TV Playback','TOGGLEBROWSE','Toggle channel browse mode','O','larch5'),('TV Playback','TOGGLERECORD','Toggle recording status of current program','R','larch5'),('TV Playback','TOGGLEFAV','Toggle the current channel as a favorite','?','larch5'),('TV Playback','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('TV Playback','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('TV Playback','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('TV Playback','TOGGLEPIPMODE','Toggle Picture-in-Picture mode','V','larch5'),('TV Playback','TOGGLEPIPWINDOW','Toggle active PiP window','B','larch5'),('TV Playback','SWAPPIP','Swap PiP/Main','N','larch5'),('TV Playback','TOGGLEASPECT','Toggle the video aspect ratio','Ctrl+W','larch5'),('TV Playback','TOGGLEFILL','Next Preconfigured Zoom mode','W','larch5'),('TV Playback','TOGGLECC','Toggle any captions','T','larch5'),('TV Playback','TOGGLETTC','Toggle Teletext Captions','','larch5'),('TV Playback','TOGGLESUBTITLE','Toggle Subtitles','','larch5'),('TV Playback','TOGGLECC608','Toggle VBI CC','','larch5'),('TV Playback','TOGGLECC708','Toggle ATSC CC','','larch5'),('TV Playback','TOGGLETTM','Toggle Teletext Menu','','larch5'),('TV Playback','SELECTAUDIO_0','Play audio track 1','','larch5'),('TV Playback','SELECTAUDIO_1','Play audio track 2','','larch5'),('TV Playback','SELECTSUBTITLE_0','Display subtitle 1','','larch5'),('TV Playback','SELECTSUBTITLE_1','Display subtitle 2','','larch5'),('TV Playback','SELECTCC608_0','Display VBI CC1','','larch5'),('TV Playback','SELECTCC608_1','Display VBI CC2','','larch5'),('TV Playback','SELECTCC608_2','Display VBI CC3','','larch5'),('TV Playback','SELECTCC608_3','Display VBI CC4','','larch5'),('TV Playback','SELECTCC708_0','Display ATSC CC1','','larch5'),('TV Playback','SELECTCC708_1','Display ATSC CC2','','larch5'),('TV Playback','SELECTCC708_2','Display ATSC CC3','','larch5'),('TV Playback','SELECTCC708_3','Display ATSC CC4','','larch5'),('TV Playback','NEXTAUDIO','Next audio track','+','larch5'),('TV Playback','PREVAUDIO','Previous audio track','-','larch5'),('TV Playback','NEXTSUBTITLE','Next subtitle track','','larch5'),('TV Playback','PREVSUBTITLE','Previous subtitle track','','larch5'),('TV Playback','NEXTCC608','Next VBI CC track','','larch5'),('TV Playback','PREVCC608','Previous VBI CC track','','larch5'),('TV Playback','NEXTCC708','Next ATSC CC track','','larch5'),('TV Playback','PREVCC708','Previous ATSC CC track','','larch5'),('TV Playback','NEXTCC','Next of any captions','','larch5'),('TV Playback','NEXTSCAN','Next video scan overidemode','','larch5'),('TV Playback','QUEUETRANSCODE','Queue the current recording for transcoding','X','larch5'),('TV Playback','SPEEDINC','Increase the playback speed','U','larch5'),('TV Playback','SPEEDDEC','Decrease the playback speed','J','larch5'),('TV Playback','ADJUSTSTRETCH','Turn on time stretch control','A','larch5'),('TV Playback','STRETCHINC','Increase time stretch speed','','larch5'),('TV Playback','STRETCHDEC','Decrease time stretch speed','','larch5'),('TV Playback','TOGGLESTRETCH','Toggle time stretch speed','','larch5'),('TV Playback','TOGGLEAUDIOSYNC','Turn on audio sync adjustment controls','','larch5'),('TV Playback','TOGGLEPICCONTROLS','Playback picture adjustments','F','larch5'),('TV Playback','TOGGLECHANCONTROLS','Recording picture adjustments for this channel','Ctrl+G','larch5'),('TV Playback','TOGGLERECCONTROLS','Recording picture adjustments for this recorder','G','larch5'),('TV Playback','TOGGLEEDIT','Start Edit Mode','E','larch5'),('TV Playback','CYCLECOMMSKIPMODE','Cycle Commercial Skip mode','','larch5'),('TV Playback','GUIDE','Show the Program Guide','S','larch5'),('TV Playback','FINDER','Show the Program Finder','#','larch5'),('TV Playback','TOGGLESLEEP','Toggle the Sleep Timer','F8','larch5'),('TV Playback','PLAY','Play','Ctrl+P','larch5'),('TV Playback','JUMPPREV','Jump to previously played recording','','larch5'),('TV Playback','JUMPREC','Display menu of recorded programs to jump to','','larch5'),('TV Playback','VIEWSCHEDULED','Display scheduled recording list','','larch5'),('TV Playback','SIGNALMON','Monitor Signal Quality','Alt+F7','larch5'),('TV Playback','JUMPTODVDROOTMENU','Jump to the DVD Root Menu','','larch5'),('TV Playback','EXITSHOWNOPROMPTS','Exit Show without any prompts','','larch5'),('TV Playback','SCREENSHOT','Save screenshot of current video frame','','larch5'),('TV Playback','MENURED','Menu Red','F2','larch5'),('TV Playback','MENUGREEN','Menu Green','F3','larch5'),('TV Playback','MENUYELLOW','Menu Yellow','F4','larch5'),('TV Playback','MENUBLUE','Menu Blue','F5','larch5'),('TV Playback','TEXTEXIT','Menu Exit','F6','larch5'),('TV Playback','MENUTEXT','Menu Text','F7','larch5'),('TV Playback','MENUEPG','Menu EPG','F12','larch5'),('TV Editing','CLEARMAP','Clear editing cut points','C,Q,Home','larch5'),('TV Editing','INVERTMAP','Invert Begin/End cut points','I','larch5'),('TV Editing','LOADCOMMSKIP','Load cut list from commercial skips','Z,End','larch5'),('TV Editing','NEXTCUT','Jump to the next cut point','PgDown','larch5'),('TV Editing','PREVCUT','Jump to the previous cut point','PgUp','larch5'),('TV Editing','BIGJUMPREW','Jump back 10x the normal amount',',,<','larch5'),('TV Editing','BIGJUMPFWD','Jump forward 10x the normal amount','>,.','larch5'),('TV Editing','TOGGLEEDIT','Exit out of Edit Mode','E','larch5'),('Teletext Menu','NEXTPAGE','Next Page','Down','larch5'),('Teletext Menu','PREVPAGE','Previous Page','Up','larch5'),('Teletext Menu','NEXTSUBPAGE','Next Subpage','Right','larch5'),('Teletext Menu','PREVSUBPAGE','Previous Subpage','Left','larch5'),('Teletext Menu','TOGGLETT','Toggle Teletext','T','larch5'),('Teletext Menu','MENURED','Menu Red','F2','larch5'),('Teletext Menu','MENUGREEN','Menu Green','F3','larch5'),('Teletext Menu','MENUYELLOW','Menu Yellow','F4','larch5'),('Teletext Menu','MENUBLUE','Menu Blue','F5','larch5'),('Teletext Menu','MENUWHITE','Menu White','F6','larch5'),('Teletext Menu','TOGGLEBACKGROUND','Toggle Background','F7','larch5'),('Teletext Menu','REVEAL','Reveal hidden Text','F8','larch5'),('Archive','TOGGLECUT','Toggle use cut list state for selected program','C','larch5'),('NetFlix','MOVETOTOP','Moves movie to top of queue','1','larch5'),('NetFlix','REMOVE','Removes movie from queue','D','larch5'),('Gallery','PLAY','Start/Stop Slideshow','P','larch5'),('Gallery','HOME','Go to the first image in thumbnail view','Home','larch5'),('Gallery','END','Go to the last image in thumbnail view','End','larch5'),('Gallery','MENU','Toggle activating menu in thumbnail view','M','larch5'),('Gallery','SLIDESHOW','Start Slideshow in thumbnail view','S','larch5'),('Gallery','RANDOMSHOW','Start Random Slideshow in thumbnail view','R','larch5'),('Gallery','ROTRIGHT','Rotate image right 90 degrees','],3','larch5'),('Gallery','ROTLEFT','Rotate image left 90 degrees','[,1','larch5'),('Gallery','ZOOMOUT','Zoom image out','7','larch5'),('Gallery','ZOOMIN','Zoom image in','9','larch5'),('Gallery','SCROLLUP','Scroll image up','2','larch5'),('Gallery','SCROLLLEFT','Scroll image left','4','larch5'),('Gallery','SCROLLRIGHT','Scroll image right','6','larch5'),('Gallery','SCROLLDOWN','Scroll image down','8','larch5'),('Gallery','RECENTER','Recenter image','5','larch5'),('Gallery','FULLSIZE','Full-size (un-zoom) image','0','larch5'),('Gallery','UPLEFT','Go to the upper-left corner of the image','PgUp','larch5'),('Gallery','LOWRIGHT','Go to the lower-right corner of the image','PgDown','larch5'),('Gallery','INFO','Toggle Showing Information about Image','I','larch5'),('Gallery','DELETE','Delete marked images or current image if none are marked','D','larch5'),('Gallery','MARK','Mark image','T','larch5'),('Gallery','FULLSCREEN','Toggle scale to fullscreen/scale to fit','W','larch5'),('Game','TOGGLEFAV','Toggle the current game as a favorite','?,/','larch5'),('Game','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Game','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','DELETE','Delete track from playlist','D','larch5'),('Music','NEXTTRACK','Move to the next track','>,.,Z,End','larch5'),('Music','PREVTRACK','Move to the previous track',',,<,Q,Home','larch5'),('Music','FFWD','Fast forward','PgDown','larch5'),('Music','RWND','Rewind','PgUp','larch5'),('Music','PAUSE','Pause/Start playback','P','larch5'),('Music','PLAY','Start playback','','larch5'),('Music','STOP','Stop playback','O','larch5'),('Music','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Music','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Music','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Music','CYCLEVIS','Cycle visualizer mode','6','larch5'),('Music','BLANKSCR','Blank screen','5','larch5'),('Music','THMBUP','Increase rating','9','larch5'),('Music','THMBDOWN','Decrease rating','7','larch5'),('Music','REFRESH','Refresh music tree','8','larch5'),('Music','FILTER','Filter All My Music','F','larch5'),('Music','INCSEARCH','Show incremental search dialog','Ctrl+S','larch5'),('Music','INCSEARCHNEXT','Incremental search find next match','Ctrl+N','larch5'),('Music','SPEEDUP','Increase Play Speed','W','larch5'),('Music','SPEEDDOWN','Decrease Play Speed','X','larch5'),('News','RETRIEVENEWS','Update news items','I','larch5'),('News','FORCERETRIEVE','Force update news items','M','larch5'),('News','CANCEL','Cancel news item updating','C','larch5'),('Phone','0','0','0','larch5'),('Phone','1','1','1','larch5'),('Phone','2','2','2','larch5'),('Phone','3','3','3','larch5'),('Phone','4','4','4','larch5'),('Phone','5','5','5','larch5'),('Phone','6','6','6','larch5'),('Phone','7','7','7','larch5'),('Phone','8','8','8','larch5'),('Phone','9','9','9','larch5'),('Phone','HASH','HASH','#','larch5'),('Phone','STAR','STAR','*','larch5'),('Phone','Up','Up','Up','larch5'),('Phone','Down','Down','Down','larch5'),('Phone','Left','Left','Left','larch5'),('Phone','Right','Right','Right','larch5'),('Phone','VOLUMEDOWN','Volume down','[,{,F10,Volume Down','larch5'),('Phone','VOLUMEUP','Volume up','],},F11,Volume Up','larch5'),('Phone','MUTE','Mute','|,\\,F9,Volume Mute','larch5'),('Phone','ZOOMIN','Zoom the video window in','>,.,Z,End','larch5'),('Phone','ZOOMOUT','Zoom the video window out',',,<,Q,Home','larch5'),('Phone','FULLSCRN','Show received video full-screen','P','larch5'),('Phone','HANGUP','Hangup an active call','O','larch5'),('Phone','LOOPBACK','Loopback Video','L','larch5'),('Video','FILTER','Open video filter dialog','F','larch5'),('Video','DELETE','Delete video','D','larch5'),('Video','BROWSE','Change browsable in video manager','B','larch5'),('Video','INCPARENT','Increase Parental Level','],},F11','larch5'),('Video','DECPARENT','Decrease Parental Level','[,{,F10','larch5'),('Video','HOME','Go to the first video','Home','larch5'),('Video','END','Go to the last video','End','larch5'),('Weather','PAUSE','Pause current page','P','larch5'),('Weather','SEARCH','Search List','/','larch5'),('Weather','NEXTSEARCH','Search List','n','larch5'),('Weather','UPDATE','Search List','u','larch5'),('Weather','DELETE','Delete screen from list','D','larch5');
+/*!40000 ALTER TABLE `keybindings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `keyword`
+--
+
+DROP TABLE IF EXISTS `keyword`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `keyword` (
+  `phrase` varchar(128) NOT NULL default '',
+  `searchtype` int(10) unsigned NOT NULL default '3',
+  UNIQUE KEY `phrase` (`phrase`,`searchtype`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `keyword`
+--
+
+LOCK TABLES `keyword` WRITE;
+/*!40000 ALTER TABLE `keyword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `keyword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albumart`
+--
+
+DROP TABLE IF EXISTS `music_albumart`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albumart` (
+  `albumart_id` int(20) NOT NULL auto_increment,
+  `filename` varchar(255) NOT NULL default '',
+  `directory_id` int(20) NOT NULL default '0',
+  `imagetype` tinyint(3) NOT NULL default '0',
+  `song_id` int(11) NOT NULL default '0',
+  `embedded` tinyint(1) NOT NULL default '0',
+  PRIMARY KEY  (`albumart_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albumart`
+--
+
+LOCK TABLES `music_albumart` WRITE;
+/*!40000 ALTER TABLE `music_albumart` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albumart` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_albums`
+--
+
+DROP TABLE IF EXISTS `music_albums`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_albums` (
+  `album_id` int(11) unsigned NOT NULL auto_increment,
+  `artist_id` int(11) unsigned NOT NULL default '0',
+  `album_name` varchar(255) NOT NULL default '',
+  `year` smallint(6) NOT NULL default '0',
+  `compilation` tinyint(1) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`album_id`),
+  KEY `idx_album_name` (`album_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_albums`
+--
+
+LOCK TABLES `music_albums` WRITE;
+/*!40000 ALTER TABLE `music_albums` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_albums` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_artists`
+--
+
+DROP TABLE IF EXISTS `music_artists`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_artists` (
+  `artist_id` int(11) unsigned NOT NULL auto_increment,
+  `artist_name` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`artist_id`),
+  KEY `idx_artist_name` (`artist_name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_artists`
+--
+
+LOCK TABLES `music_artists` WRITE;
+/*!40000 ALTER TABLE `music_artists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_artists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_directories`
+--
+
+DROP TABLE IF EXISTS `music_directories`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_directories` (
+  `directory_id` int(20) NOT NULL auto_increment,
+  `path` text NOT NULL,
+  `parent_id` int(20) NOT NULL default '0',
+  PRIMARY KEY  (`directory_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_directories`
+--
+
+LOCK TABLES `music_directories` WRITE;
+/*!40000 ALTER TABLE `music_directories` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_directories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_genres`
+--
+
+DROP TABLE IF EXISTS `music_genres`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_genres` (
+  `genre_id` int(11) unsigned NOT NULL auto_increment,
+  `genre` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`genre_id`),
+  KEY `idx_genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_genres`
+--
+
+LOCK TABLES `music_genres` WRITE;
+/*!40000 ALTER TABLE `music_genres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_genres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_playlists`
+--
+
+DROP TABLE IF EXISTS `music_playlists`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_playlists` (
+  `playlist_id` int(11) unsigned NOT NULL auto_increment,
+  `playlist_name` varchar(255) NOT NULL default '',
+  `playlist_songs` text NOT NULL,
+  `last_accessed` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `length` int(11) unsigned NOT NULL default '0',
+  `songcount` smallint(8) unsigned NOT NULL default '0',
+  `hostname` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`playlist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_playlists`
+--
+
+LOCK TABLES `music_playlists` WRITE;
+/*!40000 ALTER TABLE `music_playlists` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_playlists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_categories`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_categories`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_categories` (
+  `categoryid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL,
+  PRIMARY KEY  (`categoryid`),
+  KEY `name` (`name`)
+) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_categories`
+--
+
+LOCK TABLES `music_smartplaylist_categories` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_categories` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_categories` (`categoryid`, `name`) VALUES (1,'Decades'),(2,'Favourite Tracks'),(3,'New Tracks');
+/*!40000 ALTER TABLE `music_smartplaylist_categories` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylist_items`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylist_items`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylist_items` (
+  `smartplaylistitemid` int(10) unsigned NOT NULL auto_increment,
+  `smartplaylistid` int(10) unsigned NOT NULL,
+  `field` varchar(50) NOT NULL,
+  `operator` varchar(20) NOT NULL,
+  `value1` varchar(255) NOT NULL,
+  `value2` varchar(255) NOT NULL,
+  PRIMARY KEY  (`smartplaylistitemid`),
+  KEY `smartplaylistid` (`smartplaylistid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylist_items`
+--
+
+LOCK TABLES `music_smartplaylist_items` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylist_items` DISABLE KEYS */;
+INSERT INTO `music_smartplaylist_items` (`smartplaylistitemid`, `smartplaylistid`, `field`, `operator`, `value1`, `value2`) VALUES (1,1,'Year','is between','1960','1969'),(2,2,'Year','is between','1970','1979'),(3,3,'Year','is between','1980','1989'),(4,4,'Year','is between','1990','1999'),(5,5,'Year','is between','2000','2009'),(6,6,'Rating','is greater than','7','0'),(7,7,'Play Count','is greater than','0','0'),(8,8,'Play Count','is equal to','0','0');
+/*!40000 ALTER TABLE `music_smartplaylist_items` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_smartplaylists`
+--
+
+DROP TABLE IF EXISTS `music_smartplaylists`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_smartplaylists` (
+  `smartplaylistid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL,
+  `categoryid` int(10) unsigned NOT NULL,
+  `matchtype` set('All','Any') NOT NULL default 'All',
+  `orderby` varchar(128) NOT NULL default '',
+  `limitto` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`smartplaylistid`),
+  KEY `name` (`name`),
+  KEY `categoryid` (`categoryid`)
+) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_smartplaylists`
+--
+
+LOCK TABLES `music_smartplaylists` WRITE;
+/*!40000 ALTER TABLE `music_smartplaylists` DISABLE KEYS */;
+INSERT INTO `music_smartplaylists` (`smartplaylistid`, `name`, `categoryid`, `matchtype`, `orderby`, `limitto`) VALUES (1,'1960\'s',1,'All','Artist (A)',0),(2,'1970\'s',1,'All','Artist (A)',0),(3,'1980\'s',1,'All','Artist (A)',0),(4,'1990\'s',1,'All','Artist (A)',0),(5,'2000\'s',1,'All','Artist (A)',0),(6,'Favorite Tracks',2,'All','Artist (A), Album (A)',0),(7,'100 Most Played Tracks',2,'All','Play Count (D)',100),(8,'Never Played Tracks',3,'All','Artist (A), Album (A)',0);
+/*!40000 ALTER TABLE `music_smartplaylists` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_songs`
+--
+
+DROP TABLE IF EXISTS `music_songs`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_songs` (
+  `song_id` int(11) unsigned NOT NULL auto_increment,
+  `filename` text NOT NULL,
+  `name` varchar(255) NOT NULL default '',
+  `track` smallint(6) unsigned NOT NULL default '0',
+  `artist_id` int(11) unsigned NOT NULL default '0',
+  `album_id` int(11) unsigned NOT NULL default '0',
+  `genre_id` int(11) unsigned NOT NULL default '0',
+  `year` smallint(6) NOT NULL default '0',
+  `length` int(11) unsigned NOT NULL default '0',
+  `numplays` int(11) unsigned NOT NULL default '0',
+  `rating` tinyint(4) unsigned NOT NULL default '0',
+  `lastplay` datetime default NULL,
+  `date_entered` datetime default NULL,
+  `date_modified` datetime default NULL,
+  `format` varchar(4) NOT NULL default '0',
+  `mythdigest` varchar(255) default NULL,
+  `size` bigint(20) unsigned default NULL,
+  `description` varchar(255) default NULL,
+  `comment` varchar(255) default NULL,
+  `disc_count` smallint(5) unsigned default '0',
+  `disc_number` smallint(5) unsigned default '0',
+  `track_count` smallint(5) unsigned default '0',
+  `start_time` int(10) unsigned default '0',
+  `stop_time` int(10) unsigned default NULL,
+  `eq_preset` varchar(255) default NULL,
+  `relative_volume` tinyint(4) default '0',
+  `sample_rate` int(10) unsigned default '0',
+  `bitrate` int(10) unsigned default '0',
+  `bpm` smallint(5) unsigned default NULL,
+  `directory_id` int(20) NOT NULL default '0',
+  PRIMARY KEY  (`song_id`),
+  KEY `idx_name` (`name`),
+  KEY `idx_mythdigest` (`mythdigest`),
+  KEY `directory_id` (`directory_id`),
+  KEY `album_id` (`album_id`),
+  KEY `genre_id` (`genre_id`),
+  KEY `artist_id` (`artist_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_songs`
+--
+
+LOCK TABLES `music_songs` WRITE;
+/*!40000 ALTER TABLE `music_songs` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_songs` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `music_stats`
+--
+
+DROP TABLE IF EXISTS `music_stats`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `music_stats` (
+  `num_artists` smallint(5) unsigned NOT NULL default '0',
+  `num_albums` smallint(5) unsigned NOT NULL default '0',
+  `num_songs` mediumint(8) unsigned NOT NULL default '0',
+  `num_genres` tinyint(3) unsigned NOT NULL default '0',
+  `total_time` varchar(12) NOT NULL default '0',
+  `total_size` varchar(10) NOT NULL default '0'
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `music_stats`
+--
+
+LOCK TABLES `music_stats` WRITE;
+/*!40000 ALTER TABLE `music_stats` DISABLE KEYS */;
+/*!40000 ALTER TABLE `music_stats` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `musicmetadata`
+--
+
+DROP TABLE IF EXISTS `musicmetadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `musicmetadata` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `artist` varchar(128) NOT NULL,
+  `compilation_artist` varchar(128) NOT NULL,
+  `album` varchar(128) NOT NULL,
+  `title` varchar(128) NOT NULL,
+  `genre` varchar(128) NOT NULL,
+  `year` int(10) unsigned NOT NULL,
+  `tracknum` int(10) unsigned NOT NULL,
+  `length` int(10) unsigned NOT NULL,
+  `filename` text NOT NULL,
+  `rating` int(10) unsigned NOT NULL default '5',
+  `lastplay` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `playcount` int(10) unsigned NOT NULL default '0',
+  `mythdigest` varchar(255) default NULL,
+  `size` bigint(20) unsigned default NULL,
+  `date_added` datetime default NULL,
+  `date_modified` datetime default NULL,
+  `format` varchar(4) default NULL,
+  `description` varchar(255) default NULL,
+  `comment` varchar(255) default NULL,
+  `compilation` tinyint(4) default '0',
+  `composer` varchar(255) default NULL,
+  `disc_count` smallint(5) unsigned default '0',
+  `disc_number` smallint(5) unsigned default '0',
+  `track_count` smallint(5) unsigned default '0',
+  `start_time` int(10) unsigned default '0',
+  `stop_time` int(10) unsigned default NULL,
+  `eq_preset` varchar(255) default NULL,
+  `relative_volume` tinyint(4) default '0',
+  `sample_rate` int(10) unsigned default NULL,
+  `bpm` smallint(5) unsigned default NULL,
+  PRIMARY KEY  (`intid`),
+  KEY `artist` (`artist`),
+  KEY `album` (`album`),
+  KEY `title` (`title`),
+  KEY `genre` (`genre`),
+  KEY `mythdigest` (`mythdigest`),
+  KEY `compilation_artist` (`compilation_artist`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `musicmetadata`
+--
+
+LOCK TABLES `musicmetadata` WRITE;
+/*!40000 ALTER TABLE `musicmetadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `musicmetadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `musicplaylist`
+--
+
+DROP TABLE IF EXISTS `musicplaylist`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `musicplaylist` (
+  `playlistid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL,
+  `hostname` varchar(255) default NULL,
+  `songlist` text NOT NULL,
+  PRIMARY KEY  (`playlistid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `musicplaylist`
+--
+
+LOCK TABLES `musicplaylist` WRITE;
+/*!40000 ALTER TABLE `musicplaylist` DISABLE KEYS */;
+/*!40000 ALTER TABLE `musicplaylist` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `mythlog`
+--
+
+DROP TABLE IF EXISTS `mythlog`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `mythlog` (
+  `logid` int(10) unsigned NOT NULL auto_increment,
+  `module` varchar(32) NOT NULL default '',
+  `priority` int(11) NOT NULL default '0',
+  `acknowledged` tinyint(1) default '0',
+  `logdate` datetime default NULL,
+  `host` varchar(128) default NULL,
+  `message` varchar(255) NOT NULL default '',
+  `details` text,
+  PRIMARY KEY  (`logid`),
+  KEY `module` (`module`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `mythlog`
+--
+
+LOCK TABLES `mythlog` WRITE;
+/*!40000 ALTER TABLE `mythlog` DISABLE KEYS */;
+/*!40000 ALTER TABLE `mythlog` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `netflix`
+--
+
+DROP TABLE IF EXISTS `netflix`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `netflix` (
+  `name` varchar(100) NOT NULL,
+  `category` varchar(255) NOT NULL,
+  `url` varchar(255) NOT NULL,
+  `ico` varchar(255) default NULL,
+  `updated` int(10) unsigned default NULL,
+  `is_queue` int(10) unsigned default NULL,
+  `queue` varchar(32) NOT NULL default '',
+  PRIMARY KEY  (`name`,`queue`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `netflix`
+--
+
+LOCK TABLES `netflix` WRITE;
+/*!40000 ALTER TABLE `netflix` DISABLE KEYS */;
+/*!40000 ALTER TABLE `netflix` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `networkiconmap`
+--
+
+DROP TABLE IF EXISTS `networkiconmap`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `networkiconmap` (
+  `id` int(11) NOT NULL auto_increment,
+  `network` varchar(20) NOT NULL default '',
+  `url` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `network` (`network`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `networkiconmap`
+--
+
+LOCK TABLES `networkiconmap` WRITE;
+/*!40000 ALTER TABLE `networkiconmap` DISABLE KEYS */;
+/*!40000 ALTER TABLE `networkiconmap` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldfind`
+--
+
+DROP TABLE IF EXISTS `oldfind`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldfind` (
+  `recordid` int(11) NOT NULL default '0',
+  `findid` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`recordid`,`findid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldfind`
+--
+
+LOCK TABLES `oldfind` WRITE;
+/*!40000 ALTER TABLE `oldfind` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldfind` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldprogram`
+--
+
+DROP TABLE IF EXISTS `oldprogram`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldprogram` (
+  `oldtitle` varchar(128) NOT NULL default '',
+  `airdate` datetime NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY  (`oldtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldprogram`
+--
+
+LOCK TABLES `oldprogram` WRITE;
+/*!40000 ALTER TABLE `oldprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `oldrecorded`
+--
+
+DROP TABLE IF EXISTS `oldrecorded`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `oldrecorded` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `seriesid` varchar(40) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `findid` int(11) NOT NULL default '0',
+  `recordid` int(11) NOT NULL default '0',
+  `station` varchar(20) NOT NULL default '',
+  `rectype` int(10) unsigned NOT NULL default '0',
+  `duplicate` tinyint(1) NOT NULL default '0',
+  `recstatus` int(11) NOT NULL default '0',
+  `reactivate` smallint(6) NOT NULL default '0',
+  `generic` tinyint(1) default '0',
+  PRIMARY KEY  (`station`,`starttime`,`title`),
+  KEY `endtime` (`endtime`),
+  KEY `title` (`title`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `recordid` (`recordid`),
+  KEY `recstatus` (`recstatus`,`programid`,`seriesid`),
+  KEY `recstatus_2` (`recstatus`,`title`,`subtitle`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `oldrecorded`
+--
+
+LOCK TABLES `oldrecorded` WRITE;
+/*!40000 ALTER TABLE `oldrecorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `oldrecorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `people`
+--
+
+DROP TABLE IF EXISTS `people`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `people` (
+  `person` mediumint(8) unsigned NOT NULL auto_increment,
+  `name` char(128) NOT NULL default '',
+  PRIMARY KEY  (`person`),
+  UNIQUE KEY `name` (`name`(41))
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `people`
+--
+
+LOCK TABLES `people` WRITE;
+/*!40000 ALTER TABLE `people` DISABLE KEYS */;
+/*!40000 ALTER TABLE `people` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonecallhistory`
+--
+
+DROP TABLE IF EXISTS `phonecallhistory`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonecallhistory` (
+  `recid` int(10) unsigned NOT NULL auto_increment,
+  `displayname` text NOT NULL,
+  `url` text NOT NULL,
+  `timestamp` text NOT NULL,
+  `duration` int(10) unsigned NOT NULL,
+  `directionin` int(10) unsigned NOT NULL,
+  `directoryref` int(10) unsigned default NULL,
+  PRIMARY KEY  (`recid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonecallhistory`
+--
+
+LOCK TABLES `phonecallhistory` WRITE;
+/*!40000 ALTER TABLE `phonecallhistory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `phonecallhistory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `phonedirectory`
+--
+
+DROP TABLE IF EXISTS `phonedirectory`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `phonedirectory` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `nickname` text NOT NULL,
+  `firstname` text,
+  `surname` text,
+  `url` text NOT NULL,
+  `directory` text NOT NULL,
+  `photofile` text,
+  `speeddial` int(10) unsigned NOT NULL,
+  `onhomelan` int(10) unsigned default '0',
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `phonedirectory`
+--
+
+LOCK TABLES `phonedirectory` WRITE;
+/*!40000 ALTER TABLE `phonedirectory` DISABLE KEYS */;
+INSERT INTO `phonedirectory` (`intid`, `nickname`, `firstname`, `surname`, `url`, `directory`, `photofile`, `speeddial`, `onhomelan`) VALUES (1,'Me(larch5)','Local Myth Host','larch5','','My MythTVs','',1,1);
+/*!40000 ALTER TABLE `phonedirectory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `pidcache`
+--
+
+DROP TABLE IF EXISTS `pidcache`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `pidcache` (
+  `chanid` smallint(6) NOT NULL default '0',
+  `pid` int(11) NOT NULL default '-1',
+  `tableid` int(11) NOT NULL default '-1',
+  KEY `chanid` (`chanid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `pidcache`
+--
+
+LOCK TABLES `pidcache` WRITE;
+/*!40000 ALTER TABLE `pidcache` DISABLE KEYS */;
+/*!40000 ALTER TABLE `pidcache` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `playgroup`
+--
+
+DROP TABLE IF EXISTS `playgroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `playgroup` (
+  `name` varchar(32) NOT NULL default '',
+  `titlematch` varchar(255) NOT NULL default '',
+  `skipahead` int(11) NOT NULL default '0',
+  `skipback` int(11) NOT NULL default '0',
+  `timestretch` int(11) NOT NULL default '0',
+  `jump` int(11) NOT NULL default '0',
+  PRIMARY KEY  (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `playgroup`
+--
+
+LOCK TABLES `playgroup` WRITE;
+/*!40000 ALTER TABLE `playgroup` DISABLE KEYS */;
+INSERT INTO `playgroup` (`name`, `titlematch`, `skipahead`, `skipback`, `timestretch`, `jump`) VALUES ('Default','',30,5,100,0);
+/*!40000 ALTER TABLE `playgroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `powerpriority`
+--
+
+DROP TABLE IF EXISTS `powerpriority`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `powerpriority` (
+  `priorityname` varchar(64) NOT NULL,
+  `recpriority` int(10) NOT NULL default '0',
+  `selectclause` text NOT NULL,
+  PRIMARY KEY  (`priorityname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `powerpriority`
+--
+
+LOCK TABLES `powerpriority` WRITE;
+/*!40000 ALTER TABLE `powerpriority` DISABLE KEYS */;
+/*!40000 ALTER TABLE `powerpriority` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `profilegroups`
+--
+
+DROP TABLE IF EXISTS `profilegroups`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `profilegroups` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) default NULL,
+  `cardtype` varchar(32) NOT NULL default 'V4L',
+  `is_default` int(1) default '0',
+  `hostname` varchar(255) default NULL,
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `name` (`name`,`hostname`),
+  KEY `cardtype` (`cardtype`)
+) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `profilegroups`
+--
+
+LOCK TABLES `profilegroups` WRITE;
+/*!40000 ALTER TABLE `profilegroups` DISABLE KEYS */;
+INSERT INTO `profilegroups` (`id`, `name`, `cardtype`, `is_default`, `hostname`) VALUES (1,'Software Encoders (v4l based)','V4L',1,NULL),(2,'MPEG-2 Encoders (PVR-x50, PVR-500)','MPEG',1,NULL),(3,'Hardware MJPEG Encoders (Matrox G200-TV, Miro DC10, etc)','MJPEG',1,NULL),(4,'Hardware HDTV','HDTV',1,NULL),(5,'Hardware DVB Encoders','DVB',1,NULL),(6,'Transcoders','TRANSCODE',1,NULL),(7,'FireWire Input','FIREWIRE',1,NULL),(8,'USB Mpeg-4 Encoder (Plextor ConvertX, etc)','GO7007',1,NULL),(9,'DBOX2 Input','DBOX2',1,NULL),(10,'Freebox Input','Freebox',1,NULL),(11,'HDHomeRun Recorders','HDHOMERUN',1,NULL),(12,'CRC IP Recorders','CRC_IP',1,NULL);
+/*!40000 ALTER TABLE `profilegroups` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `program`
+--
+
+DROP TABLE IF EXISTS `program`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `program` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `category_type` varchar(64) NOT NULL default '',
+  `airdate` year(4) NOT NULL default '0000',
+  `stars` float NOT NULL default '0',
+  `previouslyshown` tinyint(4) NOT NULL default '0',
+  `title_pronounce` varchar(128) NOT NULL default '',
+  `stereo` tinyint(1) NOT NULL default '0',
+  `subtitled` tinyint(1) NOT NULL default '0',
+  `hdtv` tinyint(1) NOT NULL default '0',
+  `closecaptioned` tinyint(1) NOT NULL default '0',
+  `partnumber` int(11) NOT NULL default '0',
+  `parttotal` int(11) NOT NULL default '0',
+  `seriesid` varchar(40) NOT NULL default '',
+  `originalairdate` date default NULL,
+  `showtype` varchar(30) NOT NULL default '',
+  `colorcode` varchar(20) NOT NULL default '',
+  `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `manualid` int(10) unsigned NOT NULL default '0',
+  `generic` tinyint(1) default '0',
+  `listingsource` int(11) NOT NULL default '0',
+  `first` tinyint(1) NOT NULL default '0',
+  `last` tinyint(1) NOT NULL default '0',
+  `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') NOT NULL,
+  `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') NOT NULL,
+  `videoprop` set('HDTV','WIDESCREEN','AVC') NOT NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`manualid`),
+  KEY `endtime` (`endtime`),
+  KEY `title` (`title`),
+  KEY `title_pronounce` (`title_pronounce`),
+  KEY `seriesid` (`seriesid`),
+  KEY `id_start_end` (`chanid`,`starttime`,`endtime`),
+  KEY `program_manualid` (`manualid`),
+  KEY `previouslyshown` (`previouslyshown`),
+  KEY `programid` (`programid`,`starttime`),
+  KEY `starttime` (`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `program`
+--
+
+LOCK TABLES `program` WRITE;
+/*!40000 ALTER TABLE `program` DISABLE KEYS */;
+/*!40000 ALTER TABLE `program` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programgenres`
+--
+
+DROP TABLE IF EXISTS `programgenres`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programgenres` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `relevance` char(1) NOT NULL default '',
+  `genre` char(30) default NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`relevance`),
+  KEY `genre` (`genre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programgenres`
+--
+
+LOCK TABLES `programgenres` WRITE;
+/*!40000 ALTER TABLE `programgenres` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programgenres` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `programrating`
+--
+
+DROP TABLE IF EXISTS `programrating`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `programrating` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `system` char(8) NOT NULL default '',
+  `rating` char(16) default NULL,
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+  KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `programrating`
+--
+
+LOCK TABLES `programrating` WRITE;
+/*!40000 ALTER TABLE `programrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `programrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recgrouppassword`
+--
+
+DROP TABLE IF EXISTS `recgrouppassword`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recgrouppassword` (
+  `recgroup` varchar(32) NOT NULL default '',
+  `password` varchar(10) NOT NULL default '',
+  PRIMARY KEY  (`recgroup`),
+  UNIQUE KEY `recgroup` (`recgroup`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recgrouppassword`
+--
+
+LOCK TABLES `recgrouppassword` WRITE;
+/*!40000 ALTER TABLE `recgrouppassword` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recgrouppassword` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `record`
+--
+
+DROP TABLE IF EXISTS `record`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `record` (
+  `recordid` int(10) unsigned NOT NULL auto_increment,
+  `type` int(10) unsigned NOT NULL default '0',
+  `chanid` int(10) unsigned default NULL,
+  `starttime` time NOT NULL default '00:00:00',
+  `startdate` date NOT NULL default '0000-00-00',
+  `endtime` time NOT NULL default '00:00:00',
+  `enddate` date NOT NULL default '0000-00-00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `profile` varchar(128) NOT NULL default 'Default',
+  `recpriority` int(10) NOT NULL default '0',
+  `autoexpire` int(11) NOT NULL default '0',
+  `maxepisodes` int(11) NOT NULL default '0',
+  `maxnewest` int(11) NOT NULL default '0',
+  `startoffset` int(11) NOT NULL default '0',
+  `endoffset` int(11) NOT NULL default '0',
+  `recgroup` varchar(32) NOT NULL default 'Default',
+  `dupmethod` int(11) NOT NULL default '6',
+  `dupin` int(11) NOT NULL default '15',
+  `station` varchar(20) NOT NULL default '',
+  `seriesid` varchar(40) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `search` int(10) unsigned NOT NULL default '0',
+  `autotranscode` tinyint(1) NOT NULL default '0',
+  `autocommflag` tinyint(1) NOT NULL default '0',
+  `autouserjob1` tinyint(1) NOT NULL default '0',
+  `autouserjob2` tinyint(1) NOT NULL default '0',
+  `autouserjob3` tinyint(1) NOT NULL default '0',
+  `autouserjob4` tinyint(1) NOT NULL default '0',
+  `findday` tinyint(4) NOT NULL default '0',
+  `findtime` time NOT NULL default '00:00:00',
+  `findid` int(11) NOT NULL default '0',
+  `inactive` tinyint(1) NOT NULL default '0',
+  `parentid` int(11) NOT NULL default '0',
+  `transcoder` int(11) NOT NULL default '0',
+  `tsdefault` float NOT NULL default '1',
+  `playgroup` varchar(32) NOT NULL default 'Default',
+  `prefinput` int(10) NOT NULL default '0',
+  `next_record` datetime NOT NULL,
+  `last_record` datetime NOT NULL,
+  `last_delete` datetime NOT NULL,
+  `storagegroup` varchar(32) NOT NULL default 'Default',
+  `avg_delay` int(11) NOT NULL default '100',
+  PRIMARY KEY  (`recordid`),
+  KEY `chanid` (`chanid`,`starttime`),
+  KEY `title` (`title`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `maxepisodes` (`maxepisodes`),
+  KEY `search` (`search`),
+  KEY `type` (`type`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `record`
+--
+
+LOCK TABLES `record` WRITE;
+/*!40000 ALTER TABLE `record` DISABLE KEYS */;
+/*!40000 ALTER TABLE `record` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recorded`
+--
+
+DROP TABLE IF EXISTS `recorded`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recorded` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `hostname` varchar(255) NOT NULL default '',
+  `bookmark` tinyint(1) NOT NULL default '0',
+  `editing` int(10) unsigned NOT NULL default '0',
+  `cutlist` tinyint(1) NOT NULL default '0',
+  `autoexpire` int(11) NOT NULL default '0',
+  `commflagged` int(10) unsigned NOT NULL default '0',
+  `recgroup` varchar(32) NOT NULL default 'Default',
+  `recordid` int(11) default NULL,
+  `seriesid` varchar(40) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `lastmodified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
+  `filesize` bigint(20) NOT NULL default '0',
+  `stars` float NOT NULL default '0',
+  `previouslyshown` tinyint(1) default '0',
+  `originalairdate` date default NULL,
+  `preserve` tinyint(1) NOT NULL default '0',
+  `findid` int(11) NOT NULL default '0',
+  `deletepending` tinyint(1) NOT NULL default '0',
+  `transcoder` int(11) NOT NULL default '0',
+  `timestretch` float NOT NULL default '1',
+  `recpriority` int(11) NOT NULL default '0',
+  `basename` varchar(255) NOT NULL,
+  `progstart` datetime NOT NULL default '0000-00-00 00:00:00',
+  `progend` datetime NOT NULL default '0000-00-00 00:00:00',
+  `playgroup` varchar(32) NOT NULL default 'Default',
+  `profile` varchar(32) NOT NULL default '',
+  `duplicate` tinyint(1) NOT NULL default '0',
+  `transcoded` tinyint(1) NOT NULL default '0',
+  `watched` tinyint(4) NOT NULL default '0',
+  `storagegroup` varchar(32) NOT NULL default 'Default',
+  PRIMARY KEY  (`chanid`,`starttime`),
+  KEY `endtime` (`endtime`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `title` (`title`),
+  KEY `recordid` (`recordid`),
+  KEY `deletepending` (`deletepending`,`lastmodified`),
+  KEY `recgroup` (`recgroup`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recorded`
+--
+
+LOCK TABLES `recorded` WRITE;
+/*!40000 ALTER TABLE `recorded` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recorded` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedcredits`
+--
+
+DROP TABLE IF EXISTS `recordedcredits`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedcredits` (
+  `person` mediumint(8) unsigned NOT NULL default '0',
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `role` set('actor','director','producer','executive_producer','writer','guest_star','host','adapter','presenter','commentator','guest') NOT NULL default '',
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`person`,`role`),
+  KEY `person` (`person`,`role`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedcredits`
+--
+
+LOCK TABLES `recordedcredits` WRITE;
+/*!40000 ALTER TABLE `recordedcredits` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedcredits` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedfile`
+--
+
+DROP TABLE IF EXISTS `recordedfile`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedfile` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `basename` varchar(128) NOT NULL default '',
+  `filesize` bigint(20) NOT NULL default '0',
+  `width` smallint(5) unsigned NOT NULL default '0',
+  `height` smallint(5) unsigned NOT NULL default '0',
+  `fps` float(6,3) NOT NULL default '0.000',
+  `aspect` float(8,6) NOT NULL default '0.000000',
+  `audio_sample_rate` smallint(5) unsigned NOT NULL default '0',
+  `audio_bits_per_sample` smallint(5) unsigned NOT NULL default '0',
+  `audio_channels` tinyint(3) unsigned NOT NULL default '0',
+  `audio_type` varchar(255) NOT NULL default '',
+  `video_type` varchar(255) NOT NULL default '',
+  `comment` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`chanid`,`starttime`),
+  KEY `basename` (`basename`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedfile`
+--
+
+LOCK TABLES `recordedfile` WRITE;
+/*!40000 ALTER TABLE `recordedfile` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedfile` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedmarkup`
+--
+
+DROP TABLE IF EXISTS `recordedmarkup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedmarkup` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `mark` mediumint(8) unsigned NOT NULL default '0',
+  `offset` varchar(32) default NULL,
+  `type` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedmarkup`
+--
+
+LOCK TABLES `recordedmarkup` WRITE;
+/*!40000 ALTER TABLE `recordedmarkup` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedmarkup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedprogram`
+--
+
+DROP TABLE IF EXISTS `recordedprogram`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedprogram` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `title` varchar(128) NOT NULL default '',
+  `subtitle` varchar(128) NOT NULL default '',
+  `description` text NOT NULL,
+  `category` varchar(64) NOT NULL default '',
+  `category_type` varchar(64) NOT NULL default '',
+  `airdate` year(4) NOT NULL default '0000',
+  `stars` float unsigned NOT NULL default '0',
+  `previouslyshown` tinyint(4) NOT NULL default '0',
+  `title_pronounce` varchar(128) NOT NULL default '',
+  `stereo` tinyint(1) NOT NULL default '0',
+  `subtitled` tinyint(1) NOT NULL default '0',
+  `hdtv` tinyint(1) NOT NULL default '0',
+  `closecaptioned` tinyint(1) NOT NULL default '0',
+  `partnumber` int(11) NOT NULL default '0',
+  `parttotal` int(11) NOT NULL default '0',
+  `seriesid` varchar(40) NOT NULL default '',
+  `originalairdate` date default NULL,
+  `showtype` varchar(30) NOT NULL default '',
+  `colorcode` varchar(20) NOT NULL default '',
+  `syndicatedepisodenumber` varchar(20) NOT NULL default '',
+  `programid` varchar(40) NOT NULL default '',
+  `manualid` int(10) unsigned NOT NULL default '0',
+  `generic` tinyint(1) default '0',
+  `listingsource` int(11) NOT NULL default '0',
+  `first` tinyint(1) NOT NULL default '0',
+  `last` tinyint(1) NOT NULL default '0',
+  `audioprop` set('STEREO','MONO','SURROUND','DOLBY','HARDHEAR','VISUALIMPAIR') NOT NULL,
+  `subtitletypes` set('HARDHEAR','NORMAL','ONSCREEN','SIGNED') NOT NULL,
+  `videoprop` set('HDTV','WIDESCREEN','AVC') NOT NULL,
+  PRIMARY KEY  (`chanid`,`starttime`,`manualid`),
+  KEY `endtime` (`endtime`),
+  KEY `title` (`title`),
+  KEY `title_pronounce` (`title_pronounce`),
+  KEY `seriesid` (`seriesid`),
+  KEY `programid` (`programid`),
+  KEY `id_start_end` (`chanid`,`starttime`,`endtime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedprogram`
+--
+
+LOCK TABLES `recordedprogram` WRITE;
+/*!40000 ALTER TABLE `recordedprogram` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedprogram` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedrating`
+--
+
+DROP TABLE IF EXISTS `recordedrating`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedrating` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `system` char(8) NOT NULL default '',
+  `rating` char(16) default NULL,
+  UNIQUE KEY `chanid` (`chanid`,`starttime`,`system`,`rating`),
+  KEY `starttime` (`starttime`,`system`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedrating`
+--
+
+LOCK TABLES `recordedrating` WRITE;
+/*!40000 ALTER TABLE `recordedrating` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedrating` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordedseek`
+--
+
+DROP TABLE IF EXISTS `recordedseek`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordedseek` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `mark` mediumint(8) unsigned NOT NULL default '0',
+  `offset` bigint(20) unsigned NOT NULL,
+  `type` tinyint(4) NOT NULL default '0',
+  PRIMARY KEY  (`chanid`,`starttime`,`type`,`mark`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordedseek`
+--
+
+LOCK TABLES `recordedseek` WRITE;
+/*!40000 ALTER TABLE `recordedseek` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordedseek` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordingprofiles`
+--
+
+DROP TABLE IF EXISTS `recordingprofiles`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordingprofiles` (
+  `id` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) default NULL,
+  `videocodec` varchar(128) default NULL,
+  `audiocodec` varchar(128) default NULL,
+  `profilegroup` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`id`),
+  KEY `profilegroup` (`profilegroup`)
+) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordingprofiles`
+--
+
+LOCK TABLES `recordingprofiles` WRITE;
+/*!40000 ALTER TABLE `recordingprofiles` DISABLE KEYS */;
+INSERT INTO `recordingprofiles` (`id`, `name`, `videocodec`, `audiocodec`, `profilegroup`) VALUES (1,'Default',NULL,NULL,1),(2,'Live TV',NULL,NULL,1),(3,'High Quality',NULL,NULL,1),(4,'Low Quality',NULL,NULL,1),(5,'Default',NULL,NULL,2),(6,'Live TV',NULL,NULL,2),(7,'High Quality',NULL,NULL,2),(8,'Low Quality',NULL,NULL,2),(9,'Default',NULL,NULL,3),(10,'Live TV',NULL,NULL,3),(11,'High Quality',NULL,NULL,3),(12,'Low Quality',NULL,NULL,3),(13,'Default',NULL,NULL,4),(14,'Live TV',NULL,NULL,4),(15,'High Quality',NULL,NULL,4),(16,'Low Quality',NULL,NULL,4),(17,'Default',NULL,NULL,5),(18,'Live TV',NULL,NULL,5),(19,'High Quality',NULL,NULL,5),(20,'Low Quality',NULL,NULL,5),(21,'RTjpeg/MPEG4',NULL,NULL,6),(22,'MPEG2',NULL,NULL,6),(23,'Default',NULL,NULL,8),(24,'Live TV',NULL,NULL,8),(25,'High Quality',NULL,NULL,8),(26,'Low Quality',NULL,NULL,8),(27,'High Quality',NULL,NULL,6),(28,'Medium Quality',NULL,NULL,6),(29,'Low Quality',NULL,NULL,6),(30,'Default',NULL,NULL,10),(31,'Live TV',NULL,NULL,10),(32,'High Quality',NULL,NULL,10),(33,'Low Quality',NULL,NULL,10),(34,'Default',NULL,NULL,11),(35,'Live TV',NULL,NULL,11),(36,'High Quality',NULL,NULL,11),(37,'Low Quality',NULL,NULL,11),(38,'Default',NULL,NULL,12),(39,'Live TV',NULL,NULL,12),(40,'High Quality',NULL,NULL,12),(41,'Low Quality',NULL,NULL,12),(42,'Default',NULL,NULL,7),(43,'Live TV',NULL,NULL,7),(44,'High Quality',NULL,NULL,7),(45,'Low Quality',NULL,NULL,7),(46,'Default',NULL,NULL,9),(47,'Live TV',NULL,NULL,9),(48,'High Quality',NULL,NULL,9),(49,'Low Quality',NULL,NULL,9);
+/*!40000 ALTER TABLE `recordingprofiles` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `recordmatch`
+--
+
+DROP TABLE IF EXISTS `recordmatch`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `recordmatch` (
+  `recordid` int(10) unsigned default NULL,
+  `chanid` int(10) unsigned default NULL,
+  `starttime` datetime default NULL,
+  `manualid` int(10) unsigned default NULL,
+  `oldrecduplicate` tinyint(1) default NULL,
+  `recduplicate` tinyint(1) default NULL,
+  `findduplicate` tinyint(1) default NULL,
+  `oldrecstatus` int(11) default NULL,
+  KEY `recordid` (`recordid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `recordmatch`
+--
+
+LOCK TABLES `recordmatch` WRITE;
+/*!40000 ALTER TABLE `recordmatch` DISABLE KEYS */;
+/*!40000 ALTER TABLE `recordmatch` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `romdb`
+--
+
+DROP TABLE IF EXISTS `romdb`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `romdb` (
+  `crc` varchar(64) NOT NULL default '',
+  `name` varchar(128) NOT NULL default '',
+  `description` varchar(128) NOT NULL default '',
+  `category` varchar(128) NOT NULL default '',
+  `year` varchar(10) NOT NULL default '',
+  `manufacturer` varchar(128) NOT NULL default '',
+  `country` varchar(128) NOT NULL default '',
+  `publisher` varchar(128) NOT NULL default '',
+  `platform` varchar(64) NOT NULL default '',
+  `filesize` int(12) default NULL,
+  `flags` varchar(64) NOT NULL default '',
+  `version` varchar(64) NOT NULL default '',
+  `binfile` varchar(64) NOT NULL default '',
+  KEY `crc` (`crc`),
+  KEY `year` (`year`),
+  KEY `category` (`category`),
+  KEY `name` (`name`),
+  KEY `description` (`description`),
+  KEY `platform` (`platform`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `romdb`
+--
+
+LOCK TABLES `romdb` WRITE;
+/*!40000 ALTER TABLE `romdb` DISABLE KEYS */;
+/*!40000 ALTER TABLE `romdb` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `schemalock`
+--
+
+DROP TABLE IF EXISTS `schemalock`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `schemalock` (
+  `schemalock` int(1) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `schemalock`
+--
+
+LOCK TABLES `schemalock` WRITE;
+/*!40000 ALTER TABLE `schemalock` DISABLE KEYS */;
+/*!40000 ALTER TABLE `schemalock` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `settings`
+--
+
+DROP TABLE IF EXISTS `settings`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `settings` (
+  `value` varchar(128) NOT NULL default '',
+  `data` text,
+  `hostname` varchar(255) default NULL,
+  KEY `value` (`value`,`hostname`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `settings`
+--
+
+LOCK TABLES `settings` WRITE;
+/*!40000 ALTER TABLE `settings` DISABLE KEYS */;
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES ('mythfilldatabaseLastRunStart',NULL,NULL),('mythfilldatabaseLastRunEnd',NULL,NULL),('mythfilldatabaseLastRunStatus',NULL,NULL),('DataDirectMessage',NULL,NULL),('HaveRepeats','0',NULL),('DBSchemaVer','1214',NULL),('DefaultTranscoder','0',NULL),('MythFillSuggestedRunTime','1970-01-01T00:00:00',NULL),('MythFillGrabberSuggestsTime','1',NULL),('MythFillFixProgramIDsHasRunOnce','1','larch5'),('Language','EN','larch5'),('BackendServerIP','127.0.0.1','larch5'),('BackendServerPort','6543','larch5'),('BackendStatusPort','6544','larch5'),('SecurityPin','','larch5'),('MasterServerIP','127.0.0.1',NULL),('MasterServerPort','6543',NULL),('TVFormat','NTSC',NULL),('VbiFormat','None',NULL),('FreqTable','us-bcast',NULL),('TimeOffset','None',NULL),('MasterBackendOverride','1',NULL),('DeletesFollowLinks','1',NULL),('TruncateDeletesSlowly','0','larch5'),('HDRingbufferSize','9400',NULL),('MiscStatusScript','','larch5'),('DisableFirewireReset','0','larch5'),('EITTransportTimeout','5',NULL),('EITIgnoresSource','0',NULL),('EITCrawIdleStart','60',NULL),('startupCommand','',NULL),('blockSDWUwithoutClient','1',NULL),('idleWaitForRecordingTime','15',NULL),('StartupSecsBeforeRecording','120',NULL),('WakeupTimeFormat','hh:mm yyyy-MM-dd',NULL),('SetWakeuptimeCommand','',NULL),('ServerHaltCommand','sudo /sbin/halt -p',NULL),('preSDWUCheckCommand','',NULL),('WOLbackendConnectRetry','5',NULL),('WOLbackendCommand','',NULL),('WOLslaveBackendsCommand','',NULL),('JobQueueMaxSimultaneousJobs','1','larch5'),('JobQueueCheckFrequency','60','larch5'),('JobQueueWindowStart','00:00','larch5'),('JobQueueWindowEnd','23:59','larch5'),('JobQueueCPU','0','larch5'),('JobAllowCommFlag','1','larch5'),('JobAllowTranscode','1','larch5'),('JobAllowUserJob1','0','larch5'),('JobAllowUserJob2','0','larch5'),('JobAllowUserJob3','0','larch5'),('JobAllowUserJob4','0','larch5'),('JobsRunOnRecordHost','0',NULL),('AutoCommflagWhileRecording','0',NULL),('JobQueueCommFlagCommand','mythcommflag',NULL),('JobQueueTranscodeCommand','mythtranscode',NULL),('AutoTranscodeBeforeAutoCommflag','0',NULL),('SaveTranscoding','0',NULL),('UserJobDesc1','User Job #1',NULL),('UserJob1','',NULL),('UserJobDesc2','User Job #2',NULL),('UserJob2','',NULL),('UserJobDesc3','User Job #3',NULL),('UserJob3','',NULL),('UserJobDesc4','User Job #4',NULL),('UserJob4','',NULL),('DefaultVideoPlaybackProfile','CPU+','larch5'),('RealtimePriority','1','larch5'),('DecodeExtraAudio','1','larch5'),('AudioNag','1','larch5'),('UseVideoTimebase','0','larch5'),('ClearSavedPosition','1','larch5'),('AltClearSavedPosition','1','larch5'),('JumpToProgramOSD','1','larch5'),('ContinueEmbeddedTVPlay','0','larch5'),('AutomaticSetWatched','0','larch5'),('AlwaysStreamFiles','1','larch5'),('UseOpenGLVSync','0','larch5'),('UseOutputPictureControls','1','larch5'),('AspectOverride','0','larch5'),('AdjustFill','0','larch5'),('LetterboxColour','0','larch5'),('PIPLocation','0','larch5'),('PlaybackExitPrompt','2','larch5'),('EndOfRecordingExitPrompt','1','larch5'),('PlayBoxOrdering','1','larch5'),('PlayBoxEpisodeSort','Date','larch5'),('GeneratePreviewPixmaps','0','larch5'),('PreviewPixmapOffset','64',NULL),('PreviewFromBookmark','1','larch5'),('PlaybackPreview','1','larch5'),('PlaybackBoxStartInTitle','1','larch5'),('ShowGroupInfo','0','larch5'),('AllRecGroupPassword','',NULL),('DisplayRecGroup','All Programs','larch5'),('QueryInitialFilter','0','larch5'),('RememberRecGroup','1','larch5'),('DispRecGroupAsAllProg','0','larch5'),('LiveTVInAllPrograms','0','larch5'),('DisplayGroupDefaultView','0','larch5'),('DisplayGroupTitleSort','0','larch5'),('PlaybackWatchList','1','larch5'),('PlaybackWLStart','0','larch5'),('PlaybackWLAutoExpire','0','larch5'),('PlaybackWLMaxAge','60','larch5'),('PlaybackWLBlackOut','2','larch5'),('SmartForward','0','larch5'),('StickyKeys','0','larch5'),('FFRewReposTime','100','larch5'),('FFRewReverse','1','larch5'),('ExactSeeking','0','larch5'),('AutoCommercialSkip','0','larch5'),('MaximumCommercialSkip','3600',NULL),('CommSkipAllBlanks','1',NULL),('PVR350OutputEnable','0','larch5'),('PVR350EPGAlphaValue','164','larch5'),('PVR350InternalAudioOnly','0','larch5'),('OSDTheme','blueosd','larch5'),('OSDGeneralTimeout','2','larch5'),('OSDProgramInfoTimeout','3','larch5'),('OSDFont','FreeMono.ttf','larch5'),('OSDThemeFontSizeType','default','larch5'),('EnableMHEG','0','larch5'),('PersistentBrowseMode','1','larch5'),('OSDNotifyTimeout','5','larch5'),('UDPNotifyPort','6948','larch5'),('OSDCCFont','FreeMono.ttf','larch5'),('CCBackground','0','larch5'),('DefaultCCMode','0','larch5'),('Prefer708Captions','1','larch5'),('OSDCC708TextZoom','100','larch5'),('OSDCC708DefaultFontType','MonoSerif','larch5'),('OSDCC708MonoSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifFont','FreeMono.ttf','larch5'),('OSDCC708CasualFont','FreeMono.ttf','larch5'),('OSDCC708CursiveFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsFont','FreeMono.ttf','larch5'),('OSDCC708MonoSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708MonoSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708PropSansSerifItalicFont','FreeMono.ttf','larch5'),('OSDCC708CasualItalicFont','FreeMono.ttf','larch5'),('OSDCC708CursiveItalicFont','FreeMono.ttf','larch5'),('OSDCC708CapitalsItalicFont','FreeMono.ttf','larch5'),('ChannelOrdering','channum','larch5'),('ChannelFormat','<num> <sign>','larch5'),('LongChannelFormat','<num> <name>','larch5'),('SmartChannelChange','0','larch5'),('LastFreeCard','0',NULL),('LiveTVPriority','0',NULL),('AutoExpireMethod','2',NULL),('AutoExpireDefault','1',NULL),('RerecordWatched','1',NULL),('AutoExpireWatchedPriority','0',NULL),('AutoExpireLiveTVMaxAge','1',NULL),('AutoExpireDayPriority','3',NULL),('AutoExpireExtraSpace','1',NULL),('AutoExpireInsteadOfDelete','0',NULL),('DeletedFifoOrder','0',NULL),('CommercialSkipMethod','255',NULL),('AggressiveCommDetect','1',NULL),('AutoCommercialFlag','1',NULL),('AutoTranscode','0',NULL),('AutoRunUserJob1','0',NULL),('AutoRunUserJob2','0',NULL),('AutoRunUserJob3','0',NULL),('AutoRunUserJob4','0',NULL),('OverTimeCategory','category name',NULL),('CategoryOverTime','30',NULL),('EPGFillType','12','larch5'),('EPGShowCategoryColors','1','larch5'),('EPGShowCategoryText','1','larch5'),('EPGScrollType','1','larch5'),('EPGShowChannelIcon','1','larch5'),('EPGShowFavorites','0','larch5'),('WatchTVGuide','0','larch5'),('chanPerPage','5','larch5'),('timePerPage','4','larch5'),('UnknownTitle','Unknown','larch5'),('UnknownCategory','Unknown','larch5'),('DefaultTVChannel','3','larch5'),('SelectChangesChannel','0','larch5'),('SelChangeRecThreshold','16','larch5'),('EPGEnableJumpToChannel','0',NULL),('Theme','LinHES','larch5'),('RandomTheme','0','larch5'),('ThemeCacheSize','1','larch5'),('ThemePainter','qt','larch5'),('Style','Desktop Style','larch5'),('ThemeFontSizeType','default','larch5'),('MenuTheme','default','larch5'),('XineramaScreen','0','larch5'),('XineramaMonitorAspectRatio','1.3333','larch5'),('GuiSizeForTV','1','larch5'),('HideMouseCursor','1','larch5'),('RunFrontendInWindow','0','larch5'),('UseVideoModes','0','larch5'),('GuiVidModeResolution','640x480','larch5'),('TVVidModeResolution','320x200','larch5'),('TVVidModeForceAspect','0.0','larch5'),('TVVidModeResolution0','320x200','larch5'),('TVVidModeForceAspect0','0.0','larch5'),('TVVidModeResolution1','320x200','larch5'),('TVVidModeForceAspect1','0.0','larch5'),('TVVidModeResolution2','320x200','larch5'),('TVVidModeForceAspect2','0.0','larch5'),('ISO639Language0','eng','larch5'),('ISO639Language1','eng','larch5'),('DateFormat','ddd MMM d','larch5'),('ShortDateFormat','M/d','larch5'),('TimeFormat','h:mm AP','larch5'),('QtFontSmall','12','larch5'),('QtFontMedium','16','larch5'),('QtFontBig','25','larch5'),('PlayBoxTransparency','1','larch5'),('PlayBoxShading','0','larch5'),('UseVirtualKeyboard','1','larch5'),('LCDEnable','0','larch5'),('LCDShowTime','1','larch5'),('LCDShowMenu','1','larch5'),('LCDShowMusic','1','larch5'),('LCDShowMusicItems','ArtistTitle','larch5'),('LCDShowChannel','1','larch5'),('LCDShowRecStatus','0','larch5'),('LCDShowVolume','1','larch5'),('LCDShowGeneric','1','larch5'),('LCDBacklightOn','1','larch5'),('LCDHeartBeatOn','0','larch5'),('LCDBigClock','0','larch5'),('LCDKeyString','ABCDEF','larch5'),('LCDPopupTime','5','larch5'),('AudioOutputDevice','ALSA:default','larch5'),('PassThruOutputDevice','Default','larch5'),('MaxChannels','2','larch5'),('AudioUpmixType','0','larch5'),('AC3PassThru','0','larch5'),('DTSPassThru','0','larch5'),('AggressiveSoundcardBuffer','0','larch5'),('MythControlsVolume','1','larch5'),('MixerDevice','ALSA:default','larch5'),('MixerControl','PCM','larch5'),('MasterMixerVolume','100','larch5'),('PCMMixerVolume','50','larch5'),('IndividualMuteControl','0','larch5'),('LircKeyPressedApp','','larch5'),('AllowQuitShutdown','4','larch5'),('NoPromptOnExit','1','larch5'),('UseArrowAccels','1','larch5'),('NetworkControlEnabled','0','larch5'),('NetworkControlPort','6546','larch5'),('MonitorDrives','0','larch5'),('MediaChangeEvents','0','larch5'),('IgnoreDevices','','larch5'),('SetupPinCodeRequired','0','larch5'),('OverrideExitMenu','0','larch5'),('HaltCommand','sudo /sbin/halt','larch5'),('RebootCommand','sudo /sbin/reboot','larch5'),('EnableXbox','0','larch5'),('LogEnabled','0',NULL),('LogMaxCount','100','larch5'),('LogPrintLevel','8','larch5'),('LogCleanEnabled','0','larch5'),('LogCleanPeriod','14','larch5'),('LogCleanDays','14','larch5'),('LogCleanMax','30','larch5'),('MythFillEnabled','1',NULL),('MythFillDatabasePath','mythfilldatabase',NULL),('MythFillDatabaseArgs','',NULL),('MythFillDatabaseLog','',NULL),('MythFillPeriod','1',NULL),('MythFillMinHour','2',NULL),('MythFillMaxHour','5',NULL),('SchedMoveHigher','1',NULL),('SchedOpenEnd','0',NULL),('ComplexPriority','0',NULL),('PrefInputPriority','2',NULL),('SingleRecordRecPriority','1',NULL),('FindOneRecordRecPriority','-1',NULL),('ArchiveDBSchemaVer','1001',NULL),('MythArchiveTempDir','/myth/tmp','larch5'),('MythArchiveShareDir','/usr/share/mythtv/mytharchive/','larch5'),('MythArchiveVideoFormat','NTSC','larch5'),('MythArchiveFileFilter','*.mpg *.mov *.avi *.mpeg *.nuv','larch5'),('MythArchiveDVDLocation','/dev/dvd','larch5'),('MythArchiveDVDPlayerCmd','Internal','larch5'),('MythArchiveEncodeToAc3','0','larch5'),('MythArchiveCopyRemoteFiles','0','larch5'),('MythArchiveAlwaysUseMythTranscode','1','larch5'),('MythArchiveUseProjectX','0','larch5'),('MythArchiveAddSubtitles','0','larch5'),('MythArchiveUseFIFO','1','larch5'),('MythArchiveDefaultEncProfile','SP','larch5'),('MythArchiveMainMenuAR','16:9','larch5'),('MythArchiveChapterMenuAR','Video','larch5'),('MythArchiveDateFormat','%a  %b  %d','larch5'),('MythArchiveTimeFormat','%I:%M %p','larch5'),('MythArchiveFfmpegCmd','ffmpeg','larch5'),('MythArchiveMplexCmd','mplex','larch5'),('MythArchiveDvdauthorCmd','dvdauthor','larch5'),('MythArchiveSpumuxCmd','spumux','larch5'),('MythArchiveMpeg2encCmd','mpeg2enc','larch5'),('MythArchiveMkisofsCmd','mkisofs','larch5'),('MythArchiveGrowisofsCmd','growisofs','larch5'),('MythArchiveTcrequantCmd','tcrequant','larch5'),('MythArchiveJpeg2yuvCmd','jpeg2yuv','larch5'),('MythArchiveProjectXCmd','projectx','larch5'),('FlixDBSchemaVer','1001',NULL),('GalleryDBSchemaVer','1000',NULL),('GalleryDir','/myth/gallery','larch5'),('GalleryThumbnailLocation','1','larch5'),('GallerySortOrder','20','larch5'),('GalleryImportDirs','/mnt/cdrom:/mnt/camera','larch5'),('GalleryMoviePlayerCmd','mplayer -fs %s','larch5'),('SlideshowUseOpenGL','0','larch5'),('SlideshowDelay','5','larch5'),('SlideshowOpenGLTransition','none','larch5'),('SlideshowOpenGLTransitionLength','2000','larch5'),('SlideshowTransition','random','larch5'),('SlideshowBackground','black','larch5'),('GameDBSchemaVer','1012',NULL),('MusicDBSchemaVer','1013',NULL),('VisualMode','','larch5'),('MusicLocation','/myth/music/','larch5'),('MusicAudioDevice','default','larch5'),('CDDevice','/dev/cdrom','larch5'),('AutoLookupCD','1','larch5'),('AutoPlayCD','0','larch5'),('KeyboardAccelerators','1','larch5'),('TreeLevels','splitartist artist album title','larch5'),('ArtistTreeGroups','0','larch5'),('NonID3FileNameFormat','GENRE/ARTIST/ALBUM/TRACK_TITLE','larch5'),('Ignore_ID3','0','larch5'),('MusicTagEncoding','utf16','larch5'),('CDWriterEnabled','1','larch5'),('CDDiskSize','1','larch5'),('CDCreateDir','1','larch5'),('CDWriteSpeed','0','larch5'),('CDBlankType','fast','larch5'),('PlayMode','none','larch5'),('ResumeMode','off','larch5'),('MaxSearchResults','300','larch5'),('MusicShowRatings','0','larch5'),('ShowWholeTree','0','larch5'),('ListAsShuffled','0','larch5'),('IntelliRatingWeight','35','larch5'),('IntelliPlayCountWeight','25','larch5'),('IntelliLastPlayWeight','25','larch5'),('IntelliRandomWeight','15','larch5'),('VisualCycleOnSongChange','0','larch5'),('VisualAlbumArtOnSongChange','0','larch5'),('VisualRandomize','0','larch5'),('VisualModeDelay','0','larch5'),('VisualScaleWidth','1','larch5'),('VisualScaleHeight','1','larch5'),('ParanoiaLevel','Full','larch5'),('FilenameTemplate','ARTIST/ALBUM/TRACK-TITLE','larch5'),('NoWhitespace','0','larch5'),('PostCDRipScript','','larch5'),('EjectCDAfterRipping','1','larch5'),('EncoderType','ogg','larch5'),('DefaultRipQuality','1','larch5'),('Mp3UseVBR','0','larch5'),('PhoneDBSchemaVer','1001',NULL),('SipRegisterWithProxy','1','larch5'),('SipProxyName','fwd.pulver.com','larch5'),('SipProxyAuthName','','larch5'),('SipProxyAuthPassword','','larch5'),('MySipName','Me','larch5'),('SipAutoanswer','0','larch5'),('SipBindInterface','eth0','larch5'),('SipLocalPort','5060','larch5'),('NatTraversalMethod','None','larch5'),('NatIpAddress','http://checkip.dyndns.org','larch5'),('AudioLocalPort','21232','larch5'),('VideoLocalPort','21234','larch5'),('MicrophoneDevice','None','larch5'),('CodecPriorityList','GSM;G.711u;G.711a','larch5'),('PlayoutAudioCall','40','larch5'),('PlayoutVideoCall','110','larch5'),('TxResolution','176x144','larch5'),('TransmitFPS','5','larch5'),('TransmitBandwidth','256','larch5'),('CaptureResolution','352x288','larch5'),('TimeToAnswer','10','larch5'),('DefaultVxmlUrl','http://127.0.0.1/vxml/index.vxml','larch5'),('DefaultVoicemailPrompt','I am not at home, please leave a message after the tone','larch5'),('mythvideo.DBSchemaVer','1016',NULL),('VideoStartupDir','/myth/video','larch5'),('VideoArtworkDir','/myth/video/.covers','larch5'),('Default MythVideo View','2','larch5'),('VideoListUnknownFiletypes','1','larch5'),('VideoBrowserNoDB','1','larch5'),('VideoGalleryNoDB','1','larch5'),('VideoTreeNoDB','1','larch5'),('VideoTreeLoadMetaData','1','larch5'),('VideoNewBrowsable','1','larch5'),('mythvideo.sort_ignores_case','1','larch5'),('mythvideo.db_folder_view','1','larch5'),('mythvideo.VideoTreeRemember','1','larch5'),('mythvideo.ImageCacheSize','50','larch5'),('DVDDeviceLocation','/dev/dvd','larch5'),('VCDDeviceLocation','/dev/cdrom','larch5'),('DVDOnInsertDVD','1','larch5'),('DVDDriveSpeed','2','larch5'),('EnableDVDBookmark','1','larch5'),('DVDBookmarkPrompt','1','larch5'),('DVDBookmarkDays','10','larch5'),('MovieListCommandLine','/usr/share/mythtv/mythvideo/scripts/imdb.pl -M tv=no;video=no','larch5'),('MoviePosterCommandLine','/usr/share/mythtv/mythvideo/scripts/imdb.pl -P','larch5'),('MovieDataCommandLine','/usr/share/mythtv/mythvideo/scripts/imdb.pl -D','larch5'),('VideoGalleryColsPerPage','4','larch5'),('VideoGalleryRowsPerPage','3','larch5'),('VideoGallerySubtitle','1','larch5'),('VideoDefaultParentalLevel','4','larch5'),('VideoAggressivePC','0','larch5'),('mythvideo.ParentalLevelFromRating','0','larch5'),('mythvideo.AutoR2PL1','G','larch5'),('mythvideo.AutoR2PL2','PG','larch5'),('mythvideo.AutoR2PL3','PG-13','larch5'),('mythvideo.AutoR2PL4','R:NC-17','larch5'),('VideoDefaultPlayer','mplayer -fs -zoom -quiet -vo xv %s','larch5'),('mythdvd.DVDPlayerCommand','Internal','larch5'),('VCDPlayerCommand','mplayer vcd:// -cdrom-device %d -fs -zoom -vo xv','larch5'),('DVDRipLocation','/myth/tmp','larch5'),('TitlePlayCommand','mplayer dvd://%t -dvd-device %d -fs -zoom -vo xv -aid %a -channels %c','larch5'),('SubTitleCommand','-sid %s','larch5'),('TranscodeCommand','transcode','larch5'),('MTDPort','2442','larch5'),('MTDNiceLevel','20','larch5'),('MTDConcurrentTranscodes','1','larch5'),('MTDLogFlag','0','larch5'),('MTDac3Flag','0','larch5'),('MTDxvidFlag','1','larch5'),('mythvideo.TrustTranscodeFRDetect','1','larch5'),('WeatherDBSchemaVer','1000',NULL),('TVVidModeRefreshRate','0','larch5'),('TVVidModeRefreshRate0','0','larch5'),('TVVidModeRefreshRate1','0','larch5'),('TVVidModeRefreshRate2','0','larch5'),('GalleryRecursiveSlideshow','1','larch5'),('WebBrowserZoomLevel','20','larch5'),('WebBrowserCommand','/usr/bin/mythbrowser','larch5'),('WebBrowserScrollMode','1','larch5'),('WebBrowserScrollSpeed','4','larch5'),('WebBrowserHideScrollbars','0','larch5'),('RepeatMode','all','larch5'),('MusicAutoShowPlayer','1','larch5'),('HOSTOSsize','5','larch5'),('HostMyhostname','type_hostname_here','larch5'),('NetworkControlEnabled','1','larch5');
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('Hostpluginmytharchive','1','larch5'),
+('Hostpluginmythbrowser','1','larch5'),
+('Hostpluginmythcontrols','1','larch5'),
+('Hostpluginmythflix','1','larch5'),
+('Hostpluginmythgallery','1','larch5'),
+('Hostpluginmythgame','1','larch5'),
+('HostpluginmythgameFceu','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('Hostpluginmythmovietime','1','larch5'),
+('Hostpluginmythmusic','1','larch5'),
+('Hostpluginmythnews','1','larch5'),
+('Hostpluginmythphone','1','larch5'),
+('Hostpluginmythsmolt','1','larch5'),
+('Hostpluginmythvideo','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythweather','1','larch5'),
+('HostAudiotype','ALSA','larch5'),
+('HostpluginmythgameZsnes','1','larch5'),
+('HostpluginmythgameMame','1','larch5'),
+('Hostpluginmythvideo_dvdcss','0','larch5'),
+('Hostpluginmythappletrailers','1','larch5'),
+('Hostpluginmythstream','1','larch5'),
+('Hostpluginmythvodka','1','larch5'),
+('HostMiro','1','larch5'),
+('HostpluginmythgameXE','1','larch5'),
+('HostpluginmythgameROMDB','1','larch5'),
+('HostXine','1','larch5'),
+('HOSTOSsize','5','larch5'),
+('HostMyhostname','type_hostname_here','larch5'),
+('NetworkControlEnabled','1','larch5'),
+('Hostaccessuser','1','larch5');
+
+INSERT INTO `settings` (`value`, `data`, `hostname`) VALUES
+('WOLbackendReconnectWaitTime','5',NULL);
+
+
+/*!40000 ALTER TABLE `settings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `storagegroup`
+--
+
+DROP TABLE IF EXISTS `storagegroup`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `storagegroup` (
+  `id` int(11) NOT NULL auto_increment,
+  `groupname` varchar(32) NOT NULL,
+  `hostname` varchar(64) NOT NULL default '',
+  `dirname` varchar(255) NOT NULL default '',
+  PRIMARY KEY  (`id`),
+  UNIQUE KEY `grouphostdir` (`groupname`,`hostname`,`dirname`),
+  KEY `hostname` (`hostname`)
+) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `storagegroup`
+--
+
+LOCK TABLES `storagegroup` WRITE;
+/*!40000 ALTER TABLE `storagegroup` DISABLE KEYS */;
+INSERT INTO `storagegroup` (`id`, `groupname`, `hostname`, `dirname`) VALUES (1,'Default','larch5','/myth/tv/');
+/*!40000 ALTER TABLE `storagegroup` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `tvchain`
+--
+
+DROP TABLE IF EXISTS `tvchain`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `tvchain` (
+  `chanid` int(10) unsigned NOT NULL default '0',
+  `starttime` datetime NOT NULL default '0000-00-00 00:00:00',
+  `chainid` varchar(128) NOT NULL default '',
+  `chainpos` int(10) NOT NULL default '0',
+  `discontinuity` tinyint(1) NOT NULL default '0',
+  `watching` int(10) NOT NULL default '0',
+  `hostprefix` varchar(128) NOT NULL default '',
+  `cardtype` varchar(32) NOT NULL default 'V4L',
+  `input` varchar(32) NOT NULL default '',
+  `channame` varchar(32) NOT NULL default '',
+  `endtime` datetime NOT NULL default '0000-00-00 00:00:00',
+  PRIMARY KEY  (`chanid`,`starttime`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `tvchain`
+--
+
+LOCK TABLES `tvchain` WRITE;
+/*!40000 ALTER TABLE `tvchain` DISABLE KEYS */;
+/*!40000 ALTER TABLE `tvchain` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `upnpmedia`
+--
+
+DROP TABLE IF EXISTS `upnpmedia`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `upnpmedia` (
+  `intid` int(10) unsigned NOT NULL default '0',
+  `class` varchar(64) NOT NULL default '',
+  `itemtype` varchar(128) NOT NULL default '',
+  `parentid` int(10) unsigned NOT NULL default '0',
+  `itemproperties` varchar(255) NOT NULL default '',
+  `filepath` varchar(512) NOT NULL default '',
+  `title` varchar(255) NOT NULL default '',
+  `filename` varchar(512) NOT NULL default '',
+  `coverart` varchar(512) NOT NULL default '',
+  PRIMARY KEY  (`intid`),
+  KEY `class` (`class`),
+  KEY `filepath` (`filepath`),
+  KEY `parentid` (`parentid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `upnpmedia`
+--
+
+LOCK TABLES `upnpmedia` WRITE;
+/*!40000 ALTER TABLE `upnpmedia` DISABLE KEYS */;
+/*!40000 ALTER TABLE `upnpmedia` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocast`
+--
+
+DROP TABLE IF EXISTS `videocast`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocast` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `cast` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocast`
+--
+
+LOCK TABLES `videocast` WRITE;
+/*!40000 ALTER TABLE `videocast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocategory`
+--
+
+DROP TABLE IF EXISTS `videocategory`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocategory` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `category` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocategory`
+--
+
+LOCK TABLES `videocategory` WRITE;
+/*!40000 ALTER TABLE `videocategory` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocategory` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videocountry`
+--
+
+DROP TABLE IF EXISTS `videocountry`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videocountry` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `country` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videocountry`
+--
+
+LOCK TABLES `videocountry` WRITE;
+/*!40000 ALTER TABLE `videocountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videocountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videogenre`
+--
+
+DROP TABLE IF EXISTS `videogenre`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videogenre` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `genre` varchar(128) NOT NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videogenre`
+--
+
+LOCK TABLES `videogenre` WRITE;
+/*!40000 ALTER TABLE `videogenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videogenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadata`
+--
+
+DROP TABLE IF EXISTS `videometadata`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadata` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `title` varchar(128) NOT NULL,
+  `director` varchar(128) NOT NULL,
+  `plot` text,
+  `rating` varchar(128) NOT NULL,
+  `inetref` varchar(255) NOT NULL,
+  `year` int(10) unsigned NOT NULL,
+  `userrating` float NOT NULL,
+  `length` int(10) unsigned NOT NULL,
+  `showlevel` int(10) unsigned NOT NULL,
+  `filename` text NOT NULL,
+  `coverfile` text NOT NULL,
+  `childid` int(11) NOT NULL default '-1',
+  `browse` tinyint(1) NOT NULL default '1',
+  `playcommand` varchar(255) default NULL,
+  `category` int(10) unsigned NOT NULL default '0',
+  PRIMARY KEY  (`intid`),
+  KEY `director` (`director`),
+  KEY `title` (`title`),
+  KEY `title_2` (`title`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadata`
+--
+
+LOCK TABLES `videometadata` WRITE;
+/*!40000 ALTER TABLE `videometadata` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadata` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacast`
+--
+
+DROP TABLE IF EXISTS `videometadatacast`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacast` (
+  `idvideo` int(10) unsigned NOT NULL,
+  `idcast` int(10) unsigned NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacast`
+--
+
+LOCK TABLES `videometadatacast` WRITE;
+/*!40000 ALTER TABLE `videometadatacast` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacast` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatacountry`
+--
+
+DROP TABLE IF EXISTS `videometadatacountry`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatacountry` (
+  `idvideo` int(10) unsigned NOT NULL,
+  `idcountry` int(10) unsigned NOT NULL,
+  KEY `idvideo` (`idvideo`),
+  KEY `idcountry` (`idcountry`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatacountry`
+--
+
+LOCK TABLES `videometadatacountry` WRITE;
+/*!40000 ALTER TABLE `videometadatacountry` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatacountry` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videometadatagenre`
+--
+
+DROP TABLE IF EXISTS `videometadatagenre`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videometadatagenre` (
+  `idvideo` int(10) unsigned NOT NULL,
+  `idgenre` int(10) unsigned NOT NULL,
+  KEY `idvideo` (`idvideo`),
+  KEY `idgenre` (`idgenre`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videometadatagenre`
+--
+
+LOCK TABLES `videometadatagenre` WRITE;
+/*!40000 ALTER TABLE `videometadatagenre` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videometadatagenre` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videosource`
+--
+
+DROP TABLE IF EXISTS `videosource`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videosource` (
+  `sourceid` int(10) unsigned NOT NULL auto_increment,
+  `name` varchar(128) NOT NULL default '',
+  `xmltvgrabber` varchar(128) default NULL,
+  `userid` varchar(128) NOT NULL default '',
+  `freqtable` varchar(16) NOT NULL default 'default',
+  `lineupid` varchar(64) default NULL,
+  `password` varchar(64) default NULL,
+  `useeit` smallint(6) NOT NULL default '0',
+  PRIMARY KEY  (`sourceid`),
+  UNIQUE KEY `name` (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videosource`
+--
+
+LOCK TABLES `videosource` WRITE;
+/*!40000 ALTER TABLE `videosource` DISABLE KEYS */;
+/*!40000 ALTER TABLE `videosource` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `videotypes`
+--
+
+DROP TABLE IF EXISTS `videotypes`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `videotypes` (
+  `intid` int(10) unsigned NOT NULL auto_increment,
+  `extension` varchar(128) NOT NULL,
+  `playcommand` varchar(255) NOT NULL,
+  `f_ignore` tinyint(1) default NULL,
+  `use_default` tinyint(1) default NULL,
+  PRIMARY KEY  (`intid`)
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `videotypes`
+--
+
+LOCK TABLES `videotypes` WRITE;
+/*!40000 ALTER TABLE `videotypes` DISABLE KEYS */;
+INSERT INTO `videotypes` (`intid`, `extension`, `playcommand`, `f_ignore`, `use_default`) VALUES (1,'txt','',1,0),(2,'log','',1,0),(3,'mpg','Internal',0,0),(4,'avi','',0,1),(5,'vob','Internal',0,0),(6,'mpeg','Internal',0,0),(7,'VIDEO_TS','Internal',0,0),(8,'iso','Internal',0,0),(9,'img','Internal',0,0),(10,'mkv','Internal',0,1);
+/*!40000 ALTER TABLE `videotypes` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherdatalayout`
+--
+
+DROP TABLE IF EXISTS `weatherdatalayout`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherdatalayout` (
+  `location` varchar(64) NOT NULL,
+  `dataitem` varchar(64) NOT NULL,
+  `weatherscreens_screen_id` int(10) unsigned NOT NULL,
+  `weathersourcesettings_sourceid` int(10) unsigned NOT NULL,
+  PRIMARY KEY  (`location`,`dataitem`,`weatherscreens_screen_id`,`weathersourcesettings_sourceid`),
+  KEY `weatherdatalayout_FKIndex1` (`weatherscreens_screen_id`),
+  KEY `weatherdatalayout_FKIndex2` (`weathersourcesettings_sourceid`),
+  CONSTRAINT `weatherdatalayout_ibfk_1` FOREIGN KEY (`weatherscreens_screen_id`) REFERENCES `weatherscreens` (`screen_id`) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT `weatherdatalayout_ibfk_2` FOREIGN KEY (`weathersourcesettings_sourceid`) REFERENCES `weathersourcesettings` (`sourceid`) ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherdatalayout`
+--
+
+LOCK TABLES `weatherdatalayout` WRITE;
+/*!40000 ALTER TABLE `weatherdatalayout` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherdatalayout` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weatherscreens`
+--
+
+DROP TABLE IF EXISTS `weatherscreens`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weatherscreens` (
+  `screen_id` int(10) unsigned NOT NULL auto_increment,
+  `draworder` int(10) unsigned NOT NULL,
+  `container` varchar(64) NOT NULL,
+  `hostname` varchar(255) default NULL,
+  `units` tinyint(3) unsigned NOT NULL,
+  PRIMARY KEY  (`screen_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weatherscreens`
+--
+
+LOCK TABLES `weatherscreens` WRITE;
+/*!40000 ALTER TABLE `weatherscreens` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weatherscreens` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `weathersourcesettings`
+--
+
+DROP TABLE IF EXISTS `weathersourcesettings`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `weathersourcesettings` (
+  `sourceid` int(10) unsigned NOT NULL auto_increment,
+  `source_name` varchar(64) NOT NULL,
+  `update_timeout` int(10) unsigned NOT NULL default '600',
+  `retrieve_timeout` int(10) unsigned NOT NULL default '60',
+  `hostname` varchar(255) default NULL,
+  `path` varchar(255) default NULL,
+  `author` varchar(128) default NULL,
+  `version` varchar(32) default NULL,
+  `email` varchar(255) default NULL,
+  `types` mediumtext,
+  PRIMARY KEY  (`sourceid`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `weathersourcesettings`
+--
+
+LOCK TABLES `weathersourcesettings` WRITE;
+/*!40000 ALTER TABLE `weathersourcesettings` DISABLE KEYS */;
+/*!40000 ALTER TABLE `weathersourcesettings` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `websites`
+--
+
+DROP TABLE IF EXISTS `websites`;
+SET @saved_cs_client     = @@character_set_client;
+SET character_set_client = utf8;
+CREATE TABLE `websites` (
+  `grp` varchar(255) NOT NULL,
+  `dsc` varchar(255) default NULL,
+  `url` varchar(255) NOT NULL,
+  `updated` int(10) unsigned default NULL,
+  PRIMARY KEY  (`url`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+SET character_set_client = @saved_cs_client;
+
+--
+-- Dumping data for table `websites`
+--
+
+LOCK TABLES `websites` WRITE;
+/*!40000 ALTER TABLE `websites` DISABLE KEYS */;
+INSERT INTO `websites` (`grp`, `dsc`, `url`, `updated`) VALUES ('LinHES','','http://knoppmyth.net',NULL),('LinHES','','http://knoppmythwiki.org',NULL);
+/*!40000 ALTER TABLE `websites` ENABLE KEYS */;
+UNLOCK TABLES;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2008-09-07 21:09:33
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install
new file mode 100755
index 0000000..4834c69
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/mythdb.install
@@ -0,0 +1,31 @@
+mydate=`date +%m-%d-%y`
+HOST=`hostname`
+post_install() {
+#echo backup the old database
+	mysqldump mythconverg   >/data/database/mythconverg.${mydate}.sql 
+#	echo dropping the old database
+	mysql -u root -e 'drop database mythconverg;' 
+        mysql -u root -e 'create database mythconverg;'  
+	echo installing the default database
+	if [  $HOST = 'larch5' ]
+	then
+           cp /data/database/mc.sql.initial /data/database/mc.sql.fixed
+	   cp /data/database/permissions.sql  /data/database/permissions.sql.fixed
+	else
+	    sed -e "s/larch5/$HOST/g" /data/database/mc.sql.initial > /data/database/mc.sql.fixed
+	    sed -e "s/larch5/$HOST/g" /data/database/permissions.sql > /data/database/permissions.sql.fixed
+
+	fi
+		
+	mysql mythconverg < /data/database/mc.sql.fixed 2>/dev/null 
+	mysql < /data/database/permissions.sql.fixed 2>/dev/null 
+
+	rm /data/database/mc.sql.initial
+}
+post_upgrade() {
+	echo "nothing to do"
+}
+
+op=$1 
+shift 
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql b/abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql
new file mode 100755
index 0000000..5a36e15
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythdb-initial/permissions.sql
@@ -0,0 +1,11 @@
+ 
+GRANT ALL ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT ALL ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+GRANT FILE ON *.* TO 'mythtv'@'%';
+FLUSH PRIVILEGES;
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@localhost IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@'%' IDENTIFIED BY "mythtv";
+GRANT CREATE TEMPORARY TABLES ON mythconverg.* TO mythtv@myhost IDENTIFIED BY "mythtv";
+FLUSH PRIVILEGES;
+ALTER DATABASE mythconverg DEFAULT CHARACTER SET latin1;
diff --git a/abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD
new file mode 100644
index 0000000..5423c06
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythflix/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org>
+# Maintainer: kleptophobiac@gmail.com
+
+pkgname=mythflix
+PLUGIN=$pkgname
+pkgver=0.21
+pkgrel=5
+pkgdesc="Netflix access plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   svn update
+   cd $startdir/src/mythplugins
+   grep -q  programs-libs.pro  $PLUGIN/$PLUGIN/$PLUGIN.pro
+   if [ $? != 0 ]
+   then
+         echo "include ( ../../programs-libs.pro )" >> $PLUGIN/$PLUGIN/$PLUGIN.pro
+          msg "appending program lib"
+   fi
+   cd -
+ # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythflix 
+
+   qmake mythplugins.pro
+   make qmake || return 1
+#   make -j 2 || return 1
+   make || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD
new file mode 100644
index 0000000..bdf7b57
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythgallery/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythgallery
+pkgver=0.21
+pkgrel=5
+pkgdesc="Image gallery plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'libexif' 'libtiff')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   svn update
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythgallery --enable-exif
+
+   qmake mythplugins.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD
new file mode 100644
index 0000000..aac284a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythgame/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythgame
+pkgver=0.21
+pkgrel=4
+pkgdesc="Emulation plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'zlib')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+	export QMAKESPEC='linux-g++'
+   source /etc/profile.d/qt3.sh
+#   svn update
+
+   ./configure --prefix=/usr --disable-all --enable-opengl --enable-mythgame 
+
+   qmake mythplugins.pro
+   make qmake || return 1
+#   make -j 2 || return 1
+   make || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD
new file mode 100644
index 0000000..c07b3a2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmovies/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythmovies
+pkgver=0.21
+pkgrel=5
+pkgdesc="Displays information about movies playing in the area."
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=('mythtv>=${pkgver}')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   svn update
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+
+   ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythmovies
+ 
+   qmake mythplugins.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD
new file mode 100644
index 0000000..b422f34
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmusic/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 5680 2008-07-20 05:15:42Z eric $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythmusic
+pkgver=0.21
+pkgrel=12
+pkgdesc="Music playing plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio' \
+         'cdparanoia' 'fftw2' 'sdl' 'faad2>=2.6.1' 'lame' 'taglib' \
+	 'libvisual-plugins' 'libvisual-projectm')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+  ./configure --prefix=/usr --disable-all --enable-mythmusic --enable-fftw \
+    --enable-sdl --enable-aac --enable-opengl --enable-libvisual
+
+   qmake mythplugins.pro
+   make qmake || return 1
+#   make -j 2 || return 1
+   make
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch b/abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch
new file mode 100644
index 0000000..b152249
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmusic/music_flac.patch
@@ -0,0 +1,293 @@
+--- flacdecoder.cpp.old	2007-03-11 18:14:37.000000000 -0400
++++ flacdecoder.cpp	2007-03-11 18:15:34.000000000 -0400
+@@ -17,7 +17,7 @@
+ 
+ #include <qtimer.h>
+ 
+-static FLAC__SeekableStreamDecoderReadStatus flacread(const FLAC__SeekableStreamDecoder *decoder, FLAC__byte bufferp[], unsigned *bytes, void *client_data)
++static FLAC__StreamDecoderReadStatus flacread(const FLAC__StreamDecoder *decoder, FLAC__byte bufferp[], unsigned *bytes, void *client_data)
+ {
+     decoder = decoder;
+ 
+@@ -26,27 +26,27 @@
+ 
+     if (len == -1)
+     {
+-        return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR;
++        return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
+     }
+    
+     *bytes = len;
+-    return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK;
++    return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
+ }
+ 
+-static FLAC__SeekableStreamDecoderSeekStatus flacseek(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) 
++static FLAC__StreamDecoderSeekStatus flacseek(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) 
+ {
+     decoder = decoder;
+     FlacDecoder *dflac = (FlacDecoder *)client_data;
+ 
+     if (!dflac->input()->isDirectAccess())
+-        return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
++        return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
+ 
+     if (dflac->input()->at(absolute_byte_offset))
+-        return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK;
+-    return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR;
++        return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
++    return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
+ }
+ 
+-static FLAC__SeekableStreamDecoderTellStatus flactell(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
++static FLAC__StreamDecoderTellStatus flactell(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
+ {
+     decoder = decoder;
+     FlacDecoder *dflac = (FlacDecoder *)client_data;
+@@ -54,20 +54,20 @@
+     long t = dflac->input()->at();
+     *absolute_byte_offset = t;
+ 
+-    return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK;
++    return FLAC__STREAM_DECODER_TELL_STATUS_OK;
+ }
+ 
+-static FLAC__SeekableStreamDecoderLengthStatus flaclength(const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
++static FLAC__StreamDecoderLengthStatus flaclength(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
+ {
+     decoder = decoder;
+ 
+     FlacDecoder *dflac = (FlacDecoder *)client_data;
+ 
+     *stream_length = dflac->input()->size();
+-    return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK;
++    return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
+ }
+ 
+-static FLAC__bool flaceof(const FLAC__SeekableStreamDecoder *decoder, void *client_data)
++static FLAC__bool flaceof(const FLAC__StreamDecoder *decoder, void *client_data)
+ {
+     decoder = decoder;
+ 
+@@ -76,7 +76,7 @@
+     return dflac->input()->atEnd();
+ }
+ 
+-static FLAC__StreamDecoderWriteStatus flacwrite(const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
++static FLAC__StreamDecoderWriteStatus flacwrite(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
+ {
+     decoder = decoder;
+ 
+@@ -132,7 +132,7 @@
+     }
+ }
+ 
+-static void flacmetadata(const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
++static void flacmetadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
+ {
+     decoder = decoder;
+ 
+@@ -156,11 +156,11 @@
+     }
+ }
+ 
+-static void flacerror(const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
++static void flacerror(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
+ {
+     decoder = decoder;
+ 
+-    FLAC__FileDecoder *file_decoder = (FLAC__FileDecoder *)client_data;
++    FLAC__StreamDecoder *file_decoder = (FLAC__StreamDecoder *)client_data;
+ 
+     file_decoder = file_decoder;
+     status = status;
+@@ -262,17 +262,8 @@
+         }
+     }
+ 
+-    decoder = FLAC__seekable_stream_decoder_new();
+-    FLAC__seekable_stream_decoder_set_md5_checking(decoder, false);
+-    FLAC__seekable_stream_decoder_set_read_callback(decoder, flacread);
+-    FLAC__seekable_stream_decoder_set_seek_callback(decoder, flacseek);
+-    FLAC__seekable_stream_decoder_set_tell_callback(decoder, flactell);
+-    FLAC__seekable_stream_decoder_set_length_callback(decoder, flaclength);
+-    FLAC__seekable_stream_decoder_set_eof_callback(decoder, flaceof);
+-    FLAC__seekable_stream_decoder_set_write_callback(decoder, flacwrite);
+-    FLAC__seekable_stream_decoder_set_metadata_callback(decoder, flacmetadata);
+-    FLAC__seekable_stream_decoder_set_error_callback(decoder, flacerror);
+-    FLAC__seekable_stream_decoder_set_client_data(decoder, this);
++    decoder = FLAC__stream_decoder_new();
++    FLAC__stream_decoder_set_md5_checking(decoder, false);
+ 
+     freq = 0;
+     bitrate = 0;
+@@ -281,8 +272,17 @@
+     totalTime = 0; 
+     totalTime = totalTime < 0 ? 0 : totalTime;
+ 
+-    FLAC__seekable_stream_decoder_init(decoder);
+-    FLAC__seekable_stream_decoder_process_until_end_of_metadata(decoder);
++    FLAC__stream_decoder_init_stream(decoder,
++                                     flacread,
++                                     flacseek,
++                                     flactell,
++                                     flaclength,
++                                     flaceof,
++                                     flacwrite,
++                                     flacmetadata,
++                                     flacerror,
++                                     this);
++    FLAC__stream_decoder_process_until_end_of_metadata(decoder);
+ 
+     inited = TRUE;
+     return TRUE;
+@@ -295,8 +295,8 @@
+ 
+ void FlacDecoder::deinit()
+ {
+-    FLAC__seekable_stream_decoder_finish(decoder);
+-    FLAC__seekable_stream_decoder_delete(decoder);
++    FLAC__stream_decoder_finish(decoder);
++    FLAC__stream_decoder_delete(decoder);
+ 
+     if (input()->isOpen())
+         input()->close();
+@@ -330,7 +330,7 @@
+     }
+ 
+     bool flacok = true;
+-    FLAC__SeekableStreamDecoderState decoderstate;
++    FLAC__StreamDecoderState decoderstate;
+ 
+     while (! done && ! finish) {
+         lock();
+@@ -340,12 +340,12 @@
+             FLAC__uint64 sample = (FLAC__uint64)(seekTime * 44100.0);
+             if (sample > totalsamples - 50)
+                 sample = totalsamples - 50;
+-            FLAC__seekable_stream_decoder_seek_absolute(decoder, sample);
++            FLAC__stream_decoder_seek_absolute(decoder, sample);
+             seekTime = -1.0;
+         }
+ 
+-        flacok = FLAC__seekable_stream_decoder_process_single(decoder);
+-        decoderstate = FLAC__seekable_stream_decoder_get_state(decoder);
++        flacok = FLAC__stream_decoder_process_single(decoder);
++        decoderstate = FLAC__stream_decoder_get_state(decoder);
+ 
+         if (decoderstate == 0 || decoderstate == 1)
+         {
+--- flacdecoder.h.old	2007-03-11 18:14:37.000000000 -0400
++++ flacdecoder.h	2007-03-11 18:14:12.000000000 -0400
+@@ -35,7 +35,7 @@
+     char *output_buf;
+     ulong output_bytes, output_at;
+ 
+-    FLAC__SeekableStreamDecoder *decoder;
++    FLAC__StreamDecoder *decoder;
+ 
+     unsigned int bks;
+     bool done, finish;
+--- flacencoder.cpp.old	2007-03-11 18:14:37.000000000 -0400
++++ flacencoder.cpp	2007-03-11 18:14:12.000000000 -0400
+@@ -9,7 +9,7 @@
+ #include "flacencoder.h"
+ #include "metaioflacvorbiscomment.h"
+ 
+-#include <FLAC/file_encoder.h>
++#include <FLAC/stream_encoder.h>
+ #include <FLAC/assert.h>
+ #include <mythtv/mythcontext.h>
+ 
+@@ -29,32 +29,32 @@
+     int rice_parameter_search_dist = 0;
+     int max_lpc_order = 8;
+ 
+-    encoder = FLAC__file_encoder_new();
++    encoder = FLAC__stream_encoder_new();
+ 
+-    FLAC__file_encoder_set_streamable_subset(encoder, true);
+-    FLAC__file_encoder_set_do_mid_side_stereo(encoder, do_mid_side);
+-    FLAC__file_encoder_set_loose_mid_side_stereo(encoder, loose_mid_side);
+-    FLAC__file_encoder_set_channels(encoder, NUM_CHANNELS);
+-    FLAC__file_encoder_set_bits_per_sample(encoder, 16);
+-    FLAC__file_encoder_set_sample_rate(encoder, 44100);
+-    FLAC__file_encoder_set_blocksize(encoder, blocksize);
+-    FLAC__file_encoder_set_max_lpc_order(encoder, max_lpc_order);
+-    FLAC__file_encoder_set_qlp_coeff_precision(encoder, qlp_coeff_precision);
+-    FLAC__file_encoder_set_do_qlp_coeff_prec_search(encoder, false);
+-    FLAC__file_encoder_set_do_escape_coding(encoder, do_escape_coding);
+-    FLAC__file_encoder_set_do_exhaustive_model_search(encoder, 
++    FLAC__stream_encoder_set_streamable_subset(encoder, true);
++    FLAC__stream_encoder_set_do_mid_side_stereo(encoder, do_mid_side);
++    FLAC__stream_encoder_set_loose_mid_side_stereo(encoder, loose_mid_side);
++    FLAC__stream_encoder_set_channels(encoder, NUM_CHANNELS);
++    FLAC__stream_encoder_set_bits_per_sample(encoder, 16);
++    FLAC__stream_encoder_set_sample_rate(encoder, 44100);
++    FLAC__stream_encoder_set_blocksize(encoder, blocksize);
++    FLAC__stream_encoder_set_max_lpc_order(encoder, max_lpc_order);
++    FLAC__stream_encoder_set_qlp_coeff_precision(encoder, qlp_coeff_precision);
++    FLAC__stream_encoder_set_do_qlp_coeff_prec_search(encoder, false);
++    FLAC__stream_encoder_set_do_escape_coding(encoder, do_escape_coding);
++    FLAC__stream_encoder_set_do_exhaustive_model_search(encoder, 
+                                                     do_exhaustive_model_search);
+-    FLAC__file_encoder_set_min_residual_partition_order(encoder, 
++    FLAC__stream_encoder_set_min_residual_partition_order(encoder, 
+                                                   min_residual_partition_order);
+-    FLAC__file_encoder_set_max_residual_partition_order(encoder, 
++    FLAC__stream_encoder_set_max_residual_partition_order(encoder, 
+                                                   max_residual_partition_order);
+-    FLAC__file_encoder_set_rice_parameter_search_dist(encoder, 
++    FLAC__stream_encoder_set_rice_parameter_search_dist(encoder, 
+                                                     rice_parameter_search_dist);
+ 
+-    FLAC__file_encoder_set_filename(encoder, outfile.local8Bit());
++    
+ 
+-    int ret = FLAC__file_encoder_init(encoder);
+-    if (ret != FLAC__FILE_ENCODER_OK)
++    int ret = FLAC__stream_encoder_init_file(encoder, outfile.local8Bit(), NULL, NULL);
++    if (ret != FLAC__STREAM_ENCODER_OK)
+     {
+         VERBOSE(VB_GENERAL, QString("Error initializing FLAC encoder."
+                                     " Got return code: %1").arg(ret));
+@@ -70,8 +70,8 @@
+ 
+     if (encoder)
+     {
+-        FLAC__file_encoder_finish(encoder);
+-        FLAC__file_encoder_delete(encoder);
++        FLAC__stream_encoder_finish(encoder);
++        FLAC__stream_encoder_delete(encoder);
+     }
+ 
+     if (metadata)
+@@ -102,7 +102,7 @@
+ 
+         if(sampleindex == MAX_SAMPLES || (length == 0 && sampleindex > 0) ) 
+         {
+-            if (!FLAC__file_encoder_process(encoder,
++            if (!FLAC__stream_encoder_process(encoder,
+                                             (const FLAC__int32 * const *) input,
+                                             sampleindex))
+             {
+--- flacencoder.h.old	2007-03-11 18:14:37.000000000 -0400
++++ flacencoder.h	2007-03-11 18:14:12.000000000 -0400
+@@ -4,7 +4,7 @@
+ #include <qstring.h>
+ 
+ #define HAVE_INTTYPES_H
+-#include <FLAC/file_encoder.h>
++#include <FLAC/stream_encoder.h>
+ 
+ #include "encoder.h"
+ 
+@@ -21,7 +21,7 @@
+     int addSamples(int16_t *bytes, unsigned int len);
+ 
+   private:
+-    FLAC__FileEncoder *encoder;
++    FLAC__StreamEncoder *encoder;
+     unsigned int sampleindex;
+     FLAC__int32 inputin[NUM_CHANNELS][MAX_SAMPLES];
+     FLAC__int32 *input[NUM_CHANNELS];
diff --git a/abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch b/abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch
new file mode 100644
index 0000000..f3fa930
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythmusic/mythmusic-0.21.patch
@@ -0,0 +1,22 @@
+diff -ur mythplugins-0.21.old/mythmusic/mythmusic/aacdecoder.cpp mythplugins-0.21/mythmusic/mythmusic/aacdecoder.cpp
+--- mythplugins-0.21.old/mythmusic/mythmusic/aacdecoder.cpp	2007-08-25 17:49:44.000000000 +0200
++++ mythplugins-0.21/mythmusic/mythmusic/aacdecoder.cpp	2008-03-27 00:16:38.000000000 +0100
+@@ -19,6 +19,7 @@
+ #include <qobject.h>
+ #include <qiodevice.h>
+ #include <qfile.h>
++#include <stdlib.h>
+ 
+ #include "aacdecoder.h"
+ #include "constants.h"
+diff -ur mythplugins-0.21.old/mythmusic/mythmusic/metaiomp4.cpp mythplugins-0.21/mythmusic/mythmusic/metaiomp4.cpp
+--- mythplugins-0.21.old/mythmusic/mythmusic/metaiomp4.cpp	2006-08-22 04:06:03.000000000 +0200
++++ mythplugins-0.21/mythmusic/mythmusic/metaiomp4.cpp	2008-03-27 00:17:05.000000000 +0100
+@@ -3,6 +3,7 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <sys/types.h>
++#include <stdlib.h>
+ 
+ using namespace std;
+ 
diff --git a/abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD
new file mode 100644
index 0000000..1f22161
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythnews/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythnews
+pkgver=0.21
+pkgrel=4
+pkgdesc="News checking plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   svn update
+   
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr --disable-all --enable-mythnews
+
+   qmake mythplugins.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD
new file mode 100644
index 0000000..1ce2d5a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythphone/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythphone
+pkgver=0.21
+pkgrel=3
+pkgdesc="Plugin that allows phone calls to be made to MythTv"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+   
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythphone || return 1
+ 
+   qmake mythplugins.pro || return 1
+   make qmake || return 1
+   sed -i 's#kde3#kde#' ./mythphone/mythphone/Makefile || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD
new file mode 100644
index 0000000..25c91cf
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythsmolt/PKGBUILD
@@ -0,0 +1,26 @@
+pkgname=mythsmolt
+pkgver=0.21
+pkgrel=8
+pkgdesc="mythsmolt, a hardware profileing tool"
+arch=('i686' 'x86_64')
+url="http://www.mythvantage.com"
+license=('GPL')
+depends=("mythtv>=${pkgver}" urlgrabber)
+source=("http://www.mythvantage.com/request.php?4")
+
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythsmolt_src/mythsmolt
+   . /etc/profile.d/qt3.sh
+   
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   echo "INCLUDEPATH += /usr/include/mythtv" >> mythsmolt.pro.usr
+
+   qmake mythsmolt.pro.usr
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD
new file mode 100644
index 0000000..275afa8
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythstream/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythstream
+pkgver=0.18_1
+pkgrel=8
+pkgdesc="Unofficial MythTV plugin for Internet audio and video streams."
+arch=('i686' 'x86_64')
+url="http://home.kabelfoon.nl/~moongies/streamtuned.html"
+license=('GPL')
+depends=('mythtv' 'perl-xml-simple')
+source=("http://home.kabelfoon.nl/~moongies/sw9vc4htz2/mythstream-v0.18_1.tar.gz" "http://home.kabelfoon.nl/~moongies/sw9vc4htz2/mythstream.cpp.patch_svn20071123" "mythstream.diff")
+md5sums=('')
+install=mythstream.install
+groups=('mythtv-extras')
+install=mythstream.install
+
+build() {
+   cd $startdir/src/mythstream-0.18_1
+   patch -p1 < ../mythstream.diff
+   patch -p0 < ../mythstream.cpp.patch_svn20071123
+   ln -s ../../../mythtv/src/mythtv-0.21/libs/lib* .
+   . /etc/profile.d/qt3.sh
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   echo "INCLUDEPATH += /usr/include/mythtv" >> mythstream/mythstream.pro
+
+   qmake mythstream.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff
new file mode 100644
index 0000000..477881c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.diff
@@ -0,0 +1,79 @@
+diff -ruaN mythstream-0.18_1.orig/libs/fft.cpp mythstream-0.18_1/libs/fft.cpp
+--- mythstream-0.18_1.orig/libs/fft.cpp	2006-11-06 22:50:22.000000000 +0000
++++ mythstream-0.18_1/libs/fft.cpp	2009-01-26 02:44:33.000000000 +0000
+@@ -23,7 +23,7 @@
+ // development snapshot, many todo's
+ 
+ #include <iostream>
+-
++#include <math.h>
+ 
+ #include <qapplication.h>
+ #include <unistd.h>
+diff -ruaN mythstream-0.18_1.orig/libs/harvester.cpp mythstream-0.18_1/libs/harvester.cpp
+--- mythstream-0.18_1.orig/libs/harvester.cpp	2007-09-25 22:58:20.000000000 +0000
++++ mythstream-0.18_1/libs/harvester.cpp	2009-01-26 02:44:55.000000000 +0000
+@@ -47,6 +47,7 @@
+ #include <qdom.h>
+ 
+ #include <sys/stat.h>
++#include <cstdlib>
+ 
+ #include "harvester.h"
+ 
+diff -ruaN mythstream-0.18_1.orig/libs/recorder.cpp mythstream-0.18_1/libs/recorder.cpp
+--- mythstream-0.18_1.orig/libs/recorder.cpp	2005-05-14 13:22:51.000000000 +0000
++++ mythstream-0.18_1/libs/recorder.cpp	2009-01-26 02:45:14.000000000 +0000
+@@ -34,6 +34,7 @@
+ #include <qvbox.h>
+ #include <qlayout.h>
+ #include <qregexp.h>
++#include <cstdlib>
+ 
+ #include <qurl.h>
+ 
+diff -ruaN mythstream-0.18_1.orig/libs/storageconfig.cpp mythstream-0.18_1/libs/storageconfig.cpp
+--- mythstream-0.18_1.orig/libs/storageconfig.cpp	2007-09-05 21:03:14.000000000 +0000
++++ mythstream-0.18_1/libs/storageconfig.cpp	2009-01-26 02:45:35.000000000 +0000
+@@ -26,6 +26,7 @@
+ #include <qlayout.h>
+ #include <qcursor.h>
+ #include <qregexp.h>
++#include <cstdlib>
+ 
+ #include "storageconfig.h"
+ 
+diff -ruaN mythstream-0.18_1.orig/libs/streamconfig.cpp mythstream-0.18_1/libs/streamconfig.cpp
+--- mythstream-0.18_1.orig/libs/streamconfig.cpp	2007-09-05 20:36:21.000000000 +0000
++++ mythstream-0.18_1/libs/streamconfig.cpp	2009-01-26 02:45:48.000000000 +0000
+@@ -28,6 +28,7 @@
+ #include <qregexp.h>
+ #include <qtextedit.h>
+ #include <qtextstream.h>
++#include <cstdlib>
+ 
+ #include "streamconfig.h"
+ 
+diff -ruaN mythstream-0.18_1.orig/libs/streamstatus.cpp mythstream-0.18_1/libs/streamstatus.cpp
+--- mythstream-0.18_1.orig/libs/streamstatus.cpp	2007-09-19 00:13:45.000000000 +0000
++++ mythstream-0.18_1/libs/streamstatus.cpp	2009-01-26 02:46:05.000000000 +0000
+@@ -38,7 +38,7 @@
+ #include <qregexp.h>
+ #include <qurl.h>
+ #include <math.h>
+-
++#include <cstdlib>
+ 
+ #include "streamstatus.h"
+ 
+diff -ruaN mythstream-0.18_1.orig/libs/streamstorage.cpp mythstream-0.18_1/libs/streamstorage.cpp
+--- mythstream-0.18_1.orig/libs/streamstorage.cpp	2007-09-23 18:26:15.000000000 +0000
++++ mythstream-0.18_1/libs/streamstorage.cpp	2009-01-26 02:46:28.000000000 +0000
+@@ -34,6 +34,7 @@
+ 
+ #include "streamstorage.h"
+ #include "configelements.h"
++#include <cstdlib>
+ 
+ #include <sys/stat.h>
+ 
diff --git a/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install
new file mode 100644
index 0000000..5af96f2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythstream/mythstream.install
@@ -0,0 +1,23 @@
+# arg 1:  the new package version
+post_install() {
+  mv /usr/share/mythtv/is.xml /tmp
+  grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
+  echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+  echo "   <button>" >> /tmp/is.xml.tmp
+  echo "     <type>STREAM</type>" >> /tmp/is.xml.tmp
+  echo "     <text>MythStream</text>" >> /tmp/is.xml.tmp
+  echo "     <action>PLUGIN mythstream</action>" >> /tmp/is.xml.tmp 
+  echo "   </button>" >> /tmp/is.xml.tmp
+  echo "<!--#MythStream-->" >> /tmp/is.xml.tmp
+  echo "" >> /tmp/is.xml.tmp
+  echo "</mythmenu>" >> /tmp/is.xml.tmp
+  mv /tmp/is.xml.tmp /usr/share/mythtv/is.xml
+}
+post_remove() {
+	mv /usr/share/mythtv/is.xml /tmp/is.xml.tmp
+	sed -e '/\#MythStream/,/\#MythStream/d' < /tmp/is.xml.tmp > /usr/share/mythtv/is.xml
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD b/abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD
new file mode 100644
index 0000000..6c0a0bb
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/myththemes/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=myththemes
+pkgver=0.21
+pkgrel=3
+pkgdesc="Themes for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org/"
+license=('GPL')
+depends=("mythtv>=${pkgver}")
+source=("ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2")
+md5sums=('25d4642344cbfd8ee0ceab75022e13fb')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/$pkgname
+   . /etc/profile.d/qt3.sh
+   svn update
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+   ./configure --prefix=/usr || return 1
+
+   qmake $pkgname.pro
+   make qmake || return 1
+   make || return 1
+
+   # basic install
+   make INSTALL_ROOT=$startdir/pkg install || return 1
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff b/abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff
new file mode 100644
index 0000000..0116023
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/2.6.28_dvb_api_version.diff
@@ -0,0 +1,22 @@
+Index: libs/libmythtv/dvbtypes.h
+===================================================================
+--- libs/libmythtv/dvbtypes.h	(revision 19792)
++++ libs/libmythtv/dvbtypes.h	(working copy)
+@@ -19,7 +19,7 @@
+ #include <linux/dvb/frontend.h>
+ #include <linux/dvb/dmx.h>
+ 
+-#if (DVB_API_VERSION != 3)
++#if (DVB_API_VERSION != 3 && DVB_API_VERSION != 5)
+ #    error "DVB driver includes with API version 3 not found!"
+ #endif
+ 
+@@ -27,7 +27,7 @@
+ #    define DVB_API_VERSION_MINOR 0
+ #endif
+ 
+-#if (DVB_API_VERSION >= 3 && DVB_API_VERSION_MINOR >= 1)
++#if ((DVB_API_VERSION == 3 && DVB_API_VERSION_MINOR >= 1) || DVB_API_VERSION == 5)
+ #    define USE_ATSC
+ #else
+ #warning DVB API version < 3.1
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD
new file mode 100644
index 0000000..af084fc
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/PKGBUILD
@@ -0,0 +1,98 @@
+pkgname=mythtv
+pkgver=0.21
+pkgrel=90
+pkgdesc="A Homebrew PVR project"
+arch=('i686' 'x86_64')
+depends=('bash' 'mysql-clients>=5.0' 'qt3' 'lame' 'lirc-utils' 'ffmpeg'
+	'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' 'perl-net-upnp' 
+	'perl-time-format')
+backup=(etc/mythtv/mythbackend.conf etc/mythtv/mysql.txt usr/share/mythtv/is.xmlusr/share/mythtv/media_settings.xml ) 
+source=(ftp://ftp.knoppmyth.net/R6/sources/${pkgname}-${pkgver}-fixes.tar.bz2
+	mythbackend myththemedmenu.cpp.patch myththemedmenu.h.patch  
+	smolt_jump.patch pretty gnome_screensaver.patch mpegpspatch 
+	mythbackend.lr mythfrontend.lr)
+
+license=('GPL2')
+makedepends=(libgl subversion python perl)
+groups=('pvr')
+url="http://www.mythtv.org/"
+install=mythtv.install
+
+build() {
+	cd $startdir/src/${pkgname}-${pkgver} || return 1
+	svn update
+
+#apply patches 
+	 patch -p0 < ../myththemedmenu.cpp.patch
+	 patch -p0 < ../myththemedmenu.h.patch
+#	 patch -p0 < ../pop_be_restart.h.patch
+#	 patch -p0 < ../pop_be_restart.cpp.patch
+	 patch -p0 < ../smolt_jump.patch
+#	 patch -p0 < ../2.6.28_dvb_api_version.diff
+	 patch -p0 < ../gnome_screensaver.patch
+#	 cd libs/libavformat
+#	 patch -p0 < $startdir/src/mpegpspatch
+#	 cd -
+
+   . /etc/profile.d/qt3.sh
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+  [ "$CARCH" = "i686"   ] && ARCH="i686"
+  [ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+  ./configure --prefix=/usr --cpu=${ARCH} --enable-mmx --enable-audio-oss \
+   --enable-audio-alsa --enable-dvb --enable-lirc --enable-joystick-menu \
+   --enable-firewire --enable-v4l --enable-ivtv --enable-dvb \
+   --dvb-path=/usr/include --enable-xvmc --disable-ffmpeg \
+   --enable-xvmc-pro --enable-xvmc-vld --enable-opengl-vsync \
+   --disable-audio-jack --disable-audio-arts --disable-directfb || return 1
+
+   # build
+   #needs the subversion program
+   pkgversubversion=`svnversion`
+   echo $pkgversubversion
+   sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgversubversion/" version.pro
+
+
+#   qmake mythtv.pro  || return 1
+#   make qmake || return 1
+   make || return 1
+
+   # basic install
+   make INSTALL_ROOT=$startdir/pkg install || return 1
+   
+   # install db schema
+   install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ \
+   	|| return 1
+   install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend \
+   	|| return 1
+   cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+  # cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ \
+#   	|| return 1
+
+   # install contrib
+   mkdir -p $startdir/pkg/usr/share/mythtv/contrib || return 1
+   rsync -a --exclude=.svn --exclude=*~ contrib $startdir/pkg/usr/share/mythtv/
+#   cp -rap contrib $startdir/pkg/usr/share/mythtv/contrib
+   #install -m0755 contrib/* $startdir/pkg/usr/share/mythtv/contrib
+
+   # set suid on mythfrontend
+   #chmod a+s $startdir/pkg/usr/bin/mythfrontend
+
+#Patch the xml LinHES style
+  cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv
+  cd $startdir/pkg/usr/share/mythtv
+  patch -Np0 < $startdir/menu-xml/mainmenu.xml.patch || return 1
+  patch -Np0 <  $startdir/menu-xml/optical_menu.xml.patch || return 1
+  patch -Np0 < $startdir/menu-xml/library.xml.patch || return 1
+  patch -Np0  < $startdir/menu-xml/util_menu.xml.patch || return 1
+
+#Make log dir
+  mkdir -p $startdir/pkg/var/log/mythtv
+  chown 1000.1000 $startdir/pkg/var/log/mythtv
+  mkdir -p $startdir/pkg/etc/cron.hourly
+  install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
+  mkdir -p $startdir/pkg/etc/logrotate.d/
+  cp $startdir/src/*.lr $startdir/pkg/etc/logrotate.d
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux b/abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux
new file mode 100644
index 0000000..310705c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/QUICKSTART.archlinux
@@ -0,0 +1,69 @@
+MythTV QUICKSTART
+=================
+This Arch Linux package provides a generic MythTV installation. It 
+requires extensive user configuration. This is a skeletal document, and 
+more extensive information is available in /usr/share/mythtv/docs.
+
+MythTV is split into a backend and a frontend. The backend records 
+television programming, keeps up with scheduling, does commercial 
+flagging, transcoding, and other such jobs. The frontend provides a 
+pretty GUI which allows playback and edition of the recorded programs. 
+It also provides a means to schedule recordings. There are a number of 
+plugins available for MythTV, and most of the official ones are 
+available as Arch packages. There are two configurations; the backend 
+and frontend can be on the same machine, or on two different machines on 
+the same network.
+
+Backend Configuration
+---------------------
+MythTV keeps the majority of its settings and program information in a 
+mysql database. Before running the backend configuration program, it is 
+necessary to initialize the datase. Make sure mysql is running properly.
+
+# mysql < /usr/share/mythtv/mc.sql
+
+If your frontend is going to be remote, you must allow other computers 
+on your network to have access to your database. Substitute 192.168.1.% 
+with whatever IP range you use. If you have a root mysql password (as 
+you should), leave the -p in the mysql command line. Otherwise remove 
+the switch.
+
+# mysql -u root -p
+  mysql> connect mythconverg;
+  mysql> grant all on mythconverg.* to mythtv@"192.168.1.%" identified by "mythtv";
+  mysql> flush privileges;
+  mysql> quit
+
+In order to configure the MythTV backend, you will need to run the 
+mythtv-setup program. Note that this requires X. If your backend is 
+headless, considering using vnc as a quick and dirty "fix".
+
+# mythtv-setup
+
+Go through all the menus. You will need to know information like your 
+capture card device (/dev/v4l/video[0-9]) and your program information 
+acquisition method. United States users will most likely subscribe to 
+Zap2it Labs' DataDirect service. It requires that users take a survey 
+every three months in order to continue service. This isn't as hard as 
+it sounds.
+
+It is necessary to update the database with all the current TV listings. 
+Run the mythfilldatabase program to grab the listings using whatever 
+method you specified in mythtv-setup.
+
+# mythfilldatabase
+
+Run mythbackend from the command line to make sure everything starts ok.
+
+# mythbackend
+
+If so, you may kill the task with "ctrl-c" on your keyboard, and add the 
+backend to /etc/rc.conf. In the DAEMONS line, just add "mythbackend" to 
+the list.
+
+In the future, you will need to run mythfilldatabase regularly. I allow 
+my frontend computer to do this, as it runs continuously, and it is an 
+option within MythTV. Otherwise, you can set up a cron job, or move 
+mythfilldatabasecron to /etc/cron.daily
+
+cp /usr/share/mythtv/mythfilldatabasecron /etc/cron.daily
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch b/abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch
new file mode 100644
index 0000000..6da37be
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/gnome_screensaver.patch
@@ -0,0 +1,18 @@
+--- libs/libmyth/screensaver-x11.cpp.orig	2009-03-15 19:10:47.000000000 +0000
++++ libs/libmyth/screensaver-x11.cpp	2009-03-15 19:10:56.000000000 +0000
+@@ -143,9 +143,13 @@
+                 (m_last_deactivated.secsTo(current_time) > 30))
+             {
+                 if (m_xscreensaverRunning)
++		{
+                     myth_system("xscreensaver-command -deactivate >&- 2>&- &");
+-                else if (m_gscreensaverRunning)
+-                    myth_system("gnome-screensaver-command --poke >&- 2>&- &");
++		}
++                if (m_gscreensaverRunning)
++		{
++                    myth_system("gnome-screensaver-command -dp  &");
++		}
+                 m_last_deactivated = current_time;
+             }
+         }
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml
new file mode 100644
index 0000000..ac52497
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -0,0 +1,94 @@
+<mythmenu name="HOST_SETTINGS">
+
+   <button>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>Network Settings</text>
+      <action>EXEC  mythinstall -s network </action>
+   </button>
+
+   <button>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>DDNS Settings</text>
+      <action>EXEC  mythinstall -s ddns </action>
+   </button>
+   <button>
+      <type>MV_SYSTEM_SETUP_MENU</type>
+      <text>System Type</text>
+      <action>EXEC  mythinstall -s hostype </action>
+   </button>
+
+   <button>
+      <type>MV_SCREENSAVER_SETUP_MENU</type>
+      <text>Screensaver Settings</text>
+      <action>EXEC  mythinstall -s screensaver </action>
+   </button>
+
+   <button>
+      <type>MV_IR_SETUP_MENU</type>
+      <text>Remotes</text>
+       <action>EXEC  mythinstall -s ir </action>
+   </button>
+
+   <button>
+      <type>MV_MISC_SETUP_MENU</type>
+      <text>Miscellanous Settings</text>
+      <action>EXEC  mythinstall -s misc </action>
+   </button>
+
+   <button>
+      <type>MV_SOFTWARE_MENU</type>
+      <text>Software</text>
+      <action>EXEC  mythinstall -s  plugins </action>
+   </button>
+
+   <button>
+      <type>MV_SHUTDOWN_SETUP_MENU</type>
+      <text>Shutdown Settings</text>
+      <action>EXEC  mythinstall -s sleep </action>
+   </button>
+
+   <button>
+      <type>MV_ADVANCED_X_SETUP_MENU</type>
+      <text>Display Settings</text>
+      <action>EXEC  mythinstall -s advancedX</action>
+   </button>
+
+   <button>
+      <type>MV_ADVANCED_SETUP_MENU</type>
+      <text>Advanced Settings</text>
+      <action>EXEC  mythinstall -s advanced</action>
+   </button>
+
+   <button>
+      <type>MV_AUDIO_SETUP_MENU</type>
+      <text>Audio Settings</text>
+       <action>EXEC  mythinstall -s sound </action>
+   </button>
+
+   <button>
+      <type>MV_ACCESS_SETUP_MENU</type>
+      <text>Access Control</text>
+      <action>EXEC  mythinstall -s accesscontrol </action>
+   </button>
+
+   <button>
+      <type>MV_USER_SETUP_MENU</type>
+      <text>User Accounts</text>
+      <action>EXEC  mythinstall -s user </action>
+   </button>
+
+   <button>
+      <type>MV_WEBACCESS_SETUP_MENU</type>
+      <text>Web Security</text>
+      <action>EXEC  mythinstall -s webuser </action>
+   </button>
+
+   <!--
+   <button>
+      <type>SETUP_MENU</type>
+      <text>Settings Profile Manager</text>
+      <action>EXEC  mythinstall -t </action>
+   </button>
+   -->
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml
new file mode 100644
index 0000000..88b7e6b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/is.xml
@@ -0,0 +1,3 @@
+<mythmenu name="Internet Steams">
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch
new file mode 100644
index 0000000..749e1e7
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/library.xml.patch
@@ -0,0 +1,15 @@
+--- library.xml.orig	2009-03-15 19:20:15.000000000 +0000
++++ library.xml	2009-03-15 19:20:44.000000000 +0000
+@@ -119,10 +119,8 @@
+ 
+    <button>
+      <type>STREAM</type>
+-     <text>Play Online Streams</text>
+-     <text lang="HE">נגן מדיה מכוונת</text>
+-     <action>PLUGIN mythstream</action>
+-     <depends>mythstream</depends>
++     <text>Online Streams</text>
++     <action>MENU is.xml</action>
+    </button>
+ 
+    <button>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml
new file mode 100644
index 0000000..80bd3c9
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/linhes.xml
@@ -0,0 +1,60 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>SETUP_GENERAL</type>
+     <text>MythTV Configuration</text>
+     <text lang="IT">Impostazioni</text>
+     <text lang="ES">Configuración</text>
+     <text lang="CA">Configurar</text>
+     <text lang="FR">paramètres</text>
+     <text lang="DE">Zubehör / Konfiguration</text>
+     <text lang="DK">Tilbehør/Indstillinger</text>
+     <text lang="IS">Uppsetning</text>
+     <text lang="NL">Configuratie</text>
+     <text lang="PT">Utensílios</text>
+     <text lang="SV">Verktyg / Inställningar</text>
+     <text lang="JA">設定</text>
+     <text lang="FI">Oheis/Asetukset</text>
+     <text lang="ZH_TW">工具/設定</text>
+     <text lang="SI">Nastavitve</text>
+     <text lang="ET">Utiliidid / sätted</text>
+     <text lang="NB">Verktøy/Oppsett</text>
+     <text lang="CZ">Pomůcky</text>
+     <text lang="RU">Утилиты / Настройки</text>
+     <text lang="AR">تضبيطات</text>
+     <text lang="PL">Narzędzia / ustawienia</text>
+     <text lang="HE">עזרים / הגדרות</text>
+     <alttext lang="DE">Verschiedenes</alttext>
+     <alttext lang="SV">Inställningar</alttext>
+     <alttext lang="ET">Sätted</alttext>
+     <alttext lang="RU">Настройки</alttext>
+     <alttext lang="AR">تضبيطات</alttext>
+     <action>MENU util_menu.xml</action>
+   </button>
+
+   <button>
+     <type>LINHES_SETUP</type>
+     <text>LinHES Configuration</text>
+     <action>MENU HOST_SETTINGS.xml</action>
+   </button>
+
+   <button>
+     <type>BACKUP</type>
+     <text>Backup LinHES</text>
+     <action>MENU mythbackup.xml</action>
+   </button>
+
+   <button>
+     <type>RESTORE</type>
+     <text>Restore LinHES</text>
+     <action>MENU mythrestore.xml</action>
+   </button>
+
+<!--#Check for updates-->
+   <button>
+     <type>UPGRADE</type>
+     <text>Upgrade LinHES</text>
+     <action>MENU update.xml</action>
+   </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch
new file mode 100644
index 0000000..a299325
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mainmenu.xml.patch
@@ -0,0 +1,39 @@
+--- mainmenu.xml.orig	2009-01-09 02:45:07.000000000 +0000
++++ mainmenu.xml	2009-01-22 08:04:28.000000000 +0000
+@@ -158,34 +158,8 @@
+ 
+    <button>
+      <type>MENU_UTILITIES_SETUP</type>
+-     <text>Utilities / Setup</text>
+-     <text lang="IT">Impostazioni</text>
+-     <text lang="ES">Configuración</text>
+-     <text lang="CA">Configurar</text>
+-     <text lang="FR">paramètres</text>
+-     <text lang="DE">Zubehör / Konfiguration</text>
+-     <text lang="DK">Tilbehør/Indstillinger</text>
+-     <text lang="IS">Uppsetning</text>
+-     <text lang="NL">Configuratie</text>
+-     <text lang="PT">Utensílios</text>
+-     <text lang="SV">Verktyg / Inställningar</text>
+-     <text lang="JA">設定</text>
+-     <text lang="FI">Oheis/Asetukset</text>
+-     <text lang="ZH_TW">工具/設定</text>
+-     <text lang="SI">Nastavitve</text>
+-     <text lang="ET">Utiliidid / sätted</text>
+-     <text lang="NB">Verktøy/Oppsett</text>
+-     <text lang="CZ">Pomůcky</text>
+-     <text lang="RU">Утилиты / Настройки</text>
+-     <text lang="AR">تضبيطات</text>
+-     <text lang="PL">Narzędzia / ustawienia</text>
+-     <text lang="HE">עזרים / הגדרות</text>
+-     <alttext lang="DE">Verschiedenes</alttext>
+-     <alttext lang="SV">Inställningar</alttext>
+-     <alttext lang="ET">Sätted</alttext>
+-     <alttext lang="RU">Настройки</alttext>
+-     <alttext lang="AR">تضبيطات</alttext>
+-     <action>MENU util_menu.xml</action>
++     <text>Service Menu</text>
++     <action>MENU linhes.xml</action>
+    </button>
+ 
+    <!-- <button>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml
new file mode 100644
index 0000000..5914b33
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythbackup.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>BACKUP</type>
+     <text>Do you wish to backup?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>BACKUP</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/mythbackup</action>
+   </button>
+   
+   <button>
+     <type>BACKUP</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml
new file mode 100644
index 0000000..8f5c285
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/mythrestore.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>RESTORE</type>
+     <text>Do you wish to restore?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>RESTORE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/mythrestore</action>
+   </button>
+   
+   <button>
+     <type>BACKUP</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch
new file mode 100644
index 0000000..d1cb70c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/optical_menu.xml.patch
@@ -0,0 +1,15 @@
+--- optical_menu.xml.orig	2008-10-02 22:46:30.000000000 +0000
++++ optical_menu.xml	2008-07-02 04:05:15.000000000 +0000
+@@ -129,6 +129,12 @@
+    </button>
+ 
+    <button>
++      <type>DVD_RIP</type>
++      <text>Import video files from DVD</text>
++      <action>EXEC /usr/LH/bin/importfiles.sh</action>
++   </button>
++
++   <button>
+       <type>EJECT</type>
+       <text>Eject media</text>
+       <text lang="IT">Espelli Media</text>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh
new file mode 100644
index 0000000..34d8b8c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/original/create_patch.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+for i in *.xml
+do
+	diff -u $i.orig $i > ../$i.patch
+done
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml
new file mode 100644
index 0000000..f56bb6f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/setup.xml
@@ -0,0 +1,111 @@
+<mythmenu name="MAIN">
+
+   <button>
+     <type>SETUP_GENERAL</type>
+     <text>1. General</text>
+     <text lang="IT">1. Generale</text>
+     <text lang="PT">1. Geral</text>
+     <text lang="SV">1. Generellt</text>
+     <text lang="JA">1. 一般</text>
+     <text lang="DE">1. Allgemeines</text>
+     <text lang="FI">1. Yleiset</text>
+     <text lang="FR">1. Général</text>
+     <text lang="SI">1. Splošno</text>
+     <text lang="ET">1. Üldine</text>
+     <text lang="NB">1 Generelt</text>
+     <text lang="DK">1. Generelt</text>
+     <text lang="ES">1. General</text>
+     <text lang="CZ">1. Obecný</text>
+     <text lang="RU">1. Общие</text>
+     <action>GENERAL</action>
+   </button>
+
+   <button>
+     <type>SETUP_CAPTURE_CARDS</type>
+     <text>2. Capture cards</text>
+     <text lang="IT">2. Schede di Acquisizione</text>
+     <text lang="PT">2. Placas de Captura</text>
+     <text lang="SV">2. TV-kort</text>
+     <text lang="JA">2. キャプチャカード</text>
+     <text lang="DE">2. TV-Karten</text>
+     <text lang="FI">2. TV-kortit</text>
+     <text lang="FR">2. Cartes d'acquisition</text>
+     <text lang="SI">2. Kartice za zajem</text>
+     <text lang="ET">2. TV-kaardid</text>
+     <text lang="NB">2 TV-kort</text>
+     <text lang="DK">2. TV-kort</text>
+     <text lang="ES">2. Capturadoras</text>
+     <text lang="CZ">2. Zachytávací karty</text>
+     <text lang="RU">2. Карты захвата</text>
+     <action>CAPTURE CARDS</action>
+   </button>
+
+   <button>
+     <type>SETUP_VIDEO_SOURCES</type>
+     <text>3. Video sources</text>
+     <text lang="IT">3. Fonte Video</text>
+     <text lang="PT">3. Fontes de Vídeo</text>
+     <text lang="SV">3. Videokällor</text>
+     <text lang="JA">3. ビデオソース</text>
+     <text lang="DE">3. Videoquellen</text>
+     <text lang="FI">3. Kuvanlähteet</text>
+     <text lang="FR">3. Sources vidéo</text>
+     <text lang="SI">3. Video viri</text>
+     <text lang="ET">3. Videosisendid</text>
+     <text lang="NB">3 Videokilder</text>
+     <text lang="DK">3. Videokilder</text>
+     <text lang="ES">3. Fuentes de Vídeo</text>
+     <text lang="CZ">3. Zdroje obrazu</text>
+     <text lang="RU">3. Видео источники</text>
+     <action>VIDEO SOURCES</action>
+   </button>
+
+   <button>
+     <type>SETUP_INPUT_CONNECTIONS</type>
+     <text>4. Input connections</text>
+     <text lang="IT">4. Connessioni di Ingresso</text>
+     <text lang="PT">4. Ligações de Entrada</text>
+     <text lang="SV">4. Anslutningar</text>
+     <text lang="JA">4. 入力とソースの接続</text>
+     <text lang="DE">4. Verknüpfungen</text>
+     <text lang="FI">4. Sisääntuloasetukset</text>
+     <text lang="FR">4. Entrées Vidéos</text>
+     <text lang="SI">4. Vhodne povezave</text>
+     <text lang="ET">4. Sisendite ühendused</text>
+     <text lang="NB">4 Inndata</text>
+     <text lang="DK">4. Indgange</text>
+     <text lang="ES">4. Conexiones</text>
+     <text lang="CZ">4. Připojení vstupů</text>
+     <text lang="RU">4. Соединение входов</text>
+     <action>CARD INPUTS</action>
+   </button>
+
+   <button>
+     <type>SETUP_CHANNEL_EDITOR</type>
+     <text>5. Channel Editor</text>
+     <text lang="IT">5. Modifica Canali</text>
+     <text lang="SV">5. Kanaleditor</text>
+     <text lang="JA">5. チャンネル設定</text>
+     <text lang="DE">5. Sender bearbeiten</text>
+     <text lang="FI">5. Kanavanviritys</text>
+     <text lang="FR">5. Editeur de chaînes</text>
+     <text lang="SI">5. Urejanje kanalov</text>
+     <text lang="ET">5. Kanaliredaktor</text>
+     <text lang="NB">5 Kanalredigerer</text>
+     <text lang="DK">5. Kanal opsætning</text>
+     <text lang="ES">5. Editor Canales</text>
+     <text lang="CZ">5. Editor kanálů</text>
+     <text lang="RU">5. Редактор каналов</text>
+     <action>CHANNEL EDITOR</action>
+   </button>
+
+   <button>
+     <type>SETUP_STORAGE_GROUPS</type>
+     <text>6. Storage Directories</text>
+     <text lang="IT">6. Cartelle</text>
+     <text lang="FI">Tallennusryhmät</text>
+     <text lang="SV">Lagringsgrupper</text>
+     <action>STORAGE GROUPS</action>
+   </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml
new file mode 100644
index 0000000..e317b36
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/siriusmenu.xml
@@ -0,0 +1,419 @@
+<mythmenu name="SIRIUS">
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Hits 1</text>
+      <action>EXEC /usr/bin/cliSipie siriushits1</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>StarLite</text>
+      <action>EXEC /usr/bin/cliSipie starlite</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Love</text>
+      <action>EXEC /usr/bin/cliSipie siriuslove</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Movin EZ</text>
+      <action>EXEC /usr/bin/cliSipie movineasy</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Gold</text>
+      <action>EXEC /usr/bin/cliSipie siriusgold</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>'60s Vibrations</text>
+      <action>EXEC /usr/bin/cliSipie 60svibrations</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Totally '70s</text>
+      <action>EXEC /usr/bin/cliSipie totally70s</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Big '80s</text>
+      <action>EXEC /usr/bin/cliSipie big80s</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>ThePulse</text>
+      <action>EXEC /usr/bin/cliSipie thepulse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Bridge</text>
+      <action>EXEC /usr/bin/cliSipie thebridge</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BBC Radio 1</text>
+      <action>EXEC /usr/bin/cliSipie bbcradio1</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Super Shuffle</text>
+      <action>EXEC /usr/bin/cliSipie supershuffle</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Elvis Radio</text>
+      <action>EXEC /usr/bin/cliSipie elvisradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Classic Vinyl</text>
+      <action>EXEC /usr/bin/cliSipie classicvinyl</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Classic Rewind</text>
+      <action>EXEC /usr/bin/cliSipie classicrewind</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>TheVault</text>
+      <action>EXEC /usr/bin/cliSipie thevault</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Jam_ON</text>
+      <action>EXEC /usr/bin/cliSipie jamon</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spectrum</text>
+      <action>EXEC /usr/bin/cliSipie thespectrum</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BuzzSaw</text>
+      <action>EXEC /usr/bin/cliSipie buzzsaw</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Octane</text>
+      <action>EXEC /usr/bin/cliSipie octane</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Alt Nation</text>
+      <action>EXEC /usr/bin/cliSipie altnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>1st Wave</text>
+      <action>EXEC /usr/bin/cliSipie firstwave</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hair Nation</text>
+      <action>EXEC /usr/bin/cliSipie hairnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>'90s Alternative</text>
+      <action>EXEC /usr/bin/cliSipie 90salternative</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Garage</text>
+      <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Left of Center</text>
+      <action>EXEC /usr/bin/cliSipie leftofcenter</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hard Attack</text>
+      <action>EXEC /usr/bin/cliSipie hardattack</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Faction</text>
+      <action>EXEC /usr/bin/cliSipie faction</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Punk</text>
+      <action>EXEC /usr/bin/cliSipie punk</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>The Coffee House</text>
+      <action>EXEC /usr/bin/cliSipie coffeehouse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Margaritaville</text>
+      <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Disorder</text>
+      <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Reggae</text>
+      <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Area 33</text>
+      <action>EXEC /usr/bin/cliSipie area33</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Boombox</text>
+      <action>EXEC /usr/bin/cliSipie boombox</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Chill</text>
+      <action>EXEC /usr/bin/cliSipie chill</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>The Beat</text>
+      <action>EXEC /usr/bin/cliSipie thebeat</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Strobe</text>
+      <action>EXEC /usr/bin/cliSipie thestrobe</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hip-Hop Nation</text>
+      <action>EXEC /usr/bin/cliSipie hiphopnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BackSpin</text>
+      <action>EXEC /usr/bin/cliSipie backspin</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Shade 45</text>
+      <action>EXEC /usr/bin/cliSipie shade45</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hot Jamz</text>
+      <action>EXEC /usr/bin/cliSipie hotjamz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Heart  &amp; Soul</text>
+      <action>EXEC /usr/bin/cliSipie heartandsoul</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>SoulTown</text>
+      <action>EXEC /usr/bin/cliSipie soultown</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>New Country</text>
+      <action>EXEC /usr/bin/cliSipie newcountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Prime Country</text>
+      <action>EXEC /usr/bin/cliSipie primecountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Roadhouse</text>
+      <action>EXEC /usr/bin/cliSipie theroadhouse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Outlaw Country</text>
+      <action>EXEC /usr/bin/cliSipie outlawcountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Bluegrass</text>
+      <action>EXEC /usr/bin/cliSipie bluegrass</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spirit</text>
+      <action>EXEC /usr/bin/cliSipie spirit</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Praise</text>
+      <action>EXEC /usr/bin/cliSipie praise</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Planet Jazz</text>
+      <action>EXEC /usr/bin/cliSipie planetjazz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>JazzCafe</text>
+      <action>EXEC /usr/bin/cliSipie jazzcafe</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>PureJazz</text>
+      <action>EXEC /usr/bin/cliSipie purejazz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spa 73</text>
+      <action>EXEC /usr/bin/cliSipie spa73</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Blues</text>
+      <action>EXEC /usr/bin/cliSipie siriusblues</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Siriusly Sinatra</text>
+      <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Broadway's Best</text>
+      <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Symphony Hall</text>
+      <action>EXEC /usr/bin/cliSipie symphonyhall</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Met Opera Radio</text>
+      <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Pops</text>
+      <action>EXEC /usr/bin/cliSipie siriuspops</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Universo Latino</text>
+      <action>EXEC /usr/bin/cliSipie universolatino</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Rumbon</text>
+      <action>EXEC /usr/bin/cliSipie rumbon</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Martha Stewart</text>
+      <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Stars</text>
+      <action>EXEC /usr/bin/cliSipie siriusstars</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>OutQ Gay Radio</text>
+      <action>EXEC /usr/bin/cliSipie siriusoutq</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Patriot</text>
+      <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Left</text>
+      <action>EXEC /usr/bin/cliSipie siriusleft</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>CNN</text>
+      <action>EXEC /usr/bin/cliSipie cnn</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>wrn</text>
+      <action>EXEC /usr/bin/cliSipie wrn</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Blue Collar Comedy</text>
+      <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Raw Dog Comedy</text>
+      <action>EXEC /usr/bin/cliSipie rawdog</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Laugh Break Comedy</text>
+      <action>EXEC /usr/bin/cliSipie laughbreak</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>thefoxxhole</text>
+      <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>lime</text>
+      <action>EXEC /usr/bin/cliSipie lime</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Kids Stuff</text>
+      <action>EXEC /usr/bin/cliSipie kidsstuff</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Catholic Channel</text>
+      <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>EWTN</text>
+      <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>christiantalk</text>
+      <action>EXEC /usr/bin/cliSipie christiantalk</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius NFL Radio</text>
+      <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Maxim Radio</text>
+      <action>EXEC /usr/bin/cliSipie maximradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Cosmo Radio</text>
+      <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
+   </button>
+   <button>
+     <type>TV_DELETE</type>
+     <text>Stop Listening</text>
+     <action>EXEC /usr/bin/sipie_kill</action>
+  </button>
+
+</mythmenu>
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Check for updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Perform updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>View files to be upgraded.</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch
new file mode 100644
index 0000000..26ac863
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/util_menu.xml.patch
@@ -0,0 +1,17 @@
+--- util_menu.xml.orig	2009-01-09 02:45:07.000000000 +0000
++++ util_menu.xml	2009-01-22 08:04:28.000000000 +0000
+@@ -76,7 +76,13 @@
+       <action>PLUGIN mythcontrols</action>
+       <depends>mythcontrols</depends>	
+    </button>
+-      
++
++   <button>
++      <type>VIDEO_SCREENSHOOTER</type>
++      <text>Thumbnail Generator</text>
++      <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
++   </button>
++
+    <button>
+       <type>SETUP_MENU</type>
+       <text>Setup</text>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml
new file mode 100644
index 0000000..6b26d11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/menu-xml/xmmenu.xml
@@ -0,0 +1,574 @@
+<!-- Current as of April 25, 2007 -->
+<mythmenu name="XM">
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '40s</text>
+		<action>EXEC /usr/bin/xamp kill 4</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '50s</text>
+		<action>EXEC /usr/bin/xamp kill 5</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '60s</text>
+		<action>EXEC /usr/bin/xamp kill 6</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '70s</text>
+		<action>EXEC /usr/bin/xamp kill 7</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '80s</text>
+		<action>EXEC /usr/bin/xamp kill 8</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '90s</text>
+		<action>EXEC /usr/bin/xamp kill 9</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>America</text>
+		<action>EXEC /usr/bin/xamp kill 10</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>X Country</text>
+		<action>EXEC /usr/bin/xamp kill 12</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Willie's Place</text>
+		<action>EXEC /usr/bin/xamp kill 13</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bluegrass Junction</text>
+		<action>EXEC /usr/bin/xamp kill 14</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Village</text>
+		<action>EXEC /usr/bin/xamp kill 15</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Highway 16</text>
+		<action>EXEC /usr/bin/xamp kill 16</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>US Country</text>
+		<action>EXEC /usr/bin/xamp kill 17</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>20 on 20</text>
+		<action>EXEC /usr/bin/xamp kill 20</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Heart</text>
+		<action>EXEC /usr/bin/xamp kill 23</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Blend</text>
+		<action>EXEC /usr/bin/xamp kill 25</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Flight 26</text>
+		<action>EXEC /usr/bin/xamp kill 26</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Cinemagic</text>
+		<action>EXEC /usr/bin/xamp kill 27</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>On Broadway</text>
+		<action>EXEC /usr/bin/xamp kill 28</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>U-Pop</text>
+		<action>EXEC /usr/bin/xamp kill 29</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Hitlist</text>
+		<action>EXEC /usr/bin/xamp kill 30</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Torch</text>
+		<action>EXEC /usr/bin/xamp kill 31</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Message</text>
+		<action>EXEC /usr/bin/xamp kill 32</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Spirit</text>
+		<action>EXEC /usr/bin/xamp kill 33</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>enLighten</text>
+		<action>EXEC /usr/bin/xamp kill 34</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Deep Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 40</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Boneyard</text>
+		<action>EXEC /usr/bin/xamp kill 41</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Liquid Metal</text>
+		<action>EXEC /usr/bin/xamp kill 42</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XMU</text>
+		<action>EXEC /usr/bin/xamp kill 43</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fred</text>
+		<action>EXEC /usr/bin/xamp kill 44</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Cafe</text>
+		<action>EXEC /usr/bin/xamp kill 45</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Top Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 46</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Ethel</text>
+		<action>EXEC /usr/bin/xamp kill 47</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Squizz</text>
+		<action>EXEC /usr/bin/xamp kill 48</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Big Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 49</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Loft</text>
+		<action>EXEC /usr/bin/xamp kill 50</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Music Lab</text>
+		<action>EXEC /usr/bin/xamp kill 51</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Verge</text>
+		<action>EXEC /usr/bin/xamp kill 52</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fungus</text>
+		<action>EXEC /usr/bin/xamp kill 53</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Lucy</text>
+		<action>EXEC /usr/bin/xamp kill 54</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Soul Street</text>
+		<action>EXEC /usr/bin/xamp kill 60</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Flow</text>
+		<action>EXEC /usr/bin/xamp kill 61</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Suite 62</text>
+		<action>EXEC /usr/bin/xamp kill 62</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Groove</text>
+		<action>EXEC /usr/bin/xamp kill 64</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Rhyme</text>
+		<action>EXEC /usr/bin/xamp kill 65</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>RAW</text>
+		<action>EXEC /usr/bin/xamp kill 66</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The City</text>
+		<action>EXEC /usr/bin/xamp kill 67</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Heat</text>
+		<action>EXEC /usr/bin/xamp kill 68</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Real Jazz</text>
+		<action>EXEC /usr/bin/xamp kill 70</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Watercolors</text>
+		<action>EXEC /usr/bin/xamp kill 71</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Beyond Jazz</text>
+		<action>EXEC /usr/bin/xamp kill 72</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>High Standards</text>
+		<action>EXEC /usr/bin/xamp kill 73</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bluesville</text>
+		<action>EXEC /usr/bin/xamp kill 74</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Hear Music</text>
+		<action>EXEC /usr/bin/xamp kill 75</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fine Tuning</text>
+		<action>EXEC /usr/bin/xamp kill 76</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Audio Visions</text>
+		<action>EXEC /usr/bin/xamp kill 77</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Escape</text>
+		<action>EXEC /usr/bin/xamp kill 78</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>On The Rocks</text>
+		<action>EXEC /usr/bin/xamp kill 79</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Move</text>
+		<action>EXEC /usr/bin/xamp kill 80</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>BPM</text>
+		<action>EXEC /usr/bin/xamp kill 81</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The System</text>
+		<action>EXEC /usr/bin/xamp kill 82</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Chrome</text>
+		<action>EXEC /usr/bin/xamp kill 83</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM-Chill</text>
+		<action>EXEC /usr/bin/xamp kill 84</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fuego</text>
+		<action>EXEC /usr/bin/xamp kill 90</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Viva</text>
+		<action>EXEC /usr/bin/xamp kill 91</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Aguila</text>
+		<action>EXEC /usr/bin/xamp kill 92</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Caliente</text>
+		<action>EXEC /usr/bin/xamp kill 94</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Luna</text>
+		<action>EXEC /usr/bin/xamp kill 95</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Air Musique</text>
+		<action>EXEC /usr/bin/xamp kill 100</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Joint</text>
+		<action>EXEC /usr/bin/xamp kill 101</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Sur La Route</text>
+		<action>EXEC /usr/bin/xamp kill 102</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>World Zone</text>
+		<action>EXEC /usr/bin/xamp kill 103</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Ngoma</text>
+		<action>EXEC /usr/bin/xamp kill 104</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Classics</text>
+		<action>EXEC /usr/bin/xamp kill 110</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Vox</text>
+		<action>EXEC /usr/bin/xamp kill 112</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Pops</text>
+		<action>EXEC /usr/bin/xamp kill 113</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Kids</text>
+		<action>EXEC /usr/bin/xamp kill 116</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bob Edwards Show</text>
+		<action>EXEC /usr/bin/xamp kill 133</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Comedy</text>
+		<action>EXEC /usr/bin/xamp kill 150</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Laugh USA</text>
+		<action>EXEC /usr/bin/xamp kill 151</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Special X</text>
+		<action>EXEC /usr/bin/xamp kill 154</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Agenda</text>
+		<action>EXEC /usr/bin/xamp kill 134</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Oprah and Friends</text>
+		<action>EXEC /usr/bin/xamp kill 156</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Virus</text>
+		<action>EXEC /usr/bin/xamp kill 202</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>1 Hit Wonders</text>
+		<action>EXEC /usr/bin/xamp kill 300</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Metalcore</text>
+		<action>EXEC /usr/bin/xamp kill 301</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Indie First</text>
+		<action>EXEC /usr/bin/xamp kill 302</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Late Night Mix</text>
+		<action>EXEC /usr/bin/xamp kill 303</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Sessions@AOL</text>
+		<action>EXEC /usr/bin/xamp kill 304</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Shuffle</text>
+		<action>EXEC /usr/bin/xamp kill 305</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Rock First</text>
+		<action>EXEC /usr/bin/xamp kill 306</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Country First</text>
+		<action>EXEC /usr/bin/xamp kill 307</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Hip Hop First</text>
+		<action>EXEC /usr/bin/xamp kill 308</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Pop First</text>
+		<action>EXEC /usr/bin/xamp kill 309</action>
+	</button>
+
+	<button>
+		<type>TV_DELETE</type>
+		<text>Stop Listening</text>
+		<action>EXEC /usr/bin/xamp kill</action>
+	</button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch b/abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch
new file mode 100644
index 0000000..eed08eb
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mpegpspatch
@@ -0,0 +1,66 @@
+--- orig_mpeg.c	2009-03-23 11:26:22.000000000 -0700
++++ mpeg.c	2009-03-23 11:28:09.000000000 -0700
+@@ -66,35 +66,40 @@
+ 
+ static int mpegps_probe(AVProbeData *p)
+ {
++    uint32_t code= -1;
++    int sys=0, pspack=0, priv1=0, vid=0, audio=0, invalid=0;
+     int i;
+-    int size= FFMIN(2048, p->buf_size);
+-    uint32_t code=0xFF;
++    int score=0;
+ 
+-    /* we search the first start code. If it is a packet start code,
+-       then we decide it is mpeg ps. We do not send highest value to
+-       give a chance to mpegts */
+-    /* NOTE: the search range was restricted to avoid too many false
+-       detections */
+-
+-    for (i = 0; i < size; i++) {
+-        code = (code << 8) | p->buf[i];
++    for(i=0; i<p->buf_size; i++){
++        code = (code<<8) + p->buf[i];
+         if ((code & 0xffffff00) == 0x100) {
+-            if (code == PACK_START_CODE ||
+-                code == SYSTEM_HEADER_START_CODE ||
+-                (code >= 0x1e0 && code <= 0x1ef) ||
+-                (code >= 0x1c0 && code <= 0x1df) ||
+-                code == PRIVATE_STREAM_2 ||
+-                code == PROGRAM_STREAM_MAP ||
+-                code == PRIVATE_STREAM_1 ||
+-                code == PADDING_STREAM ||
+-                code >= 0x100 && code <= 0x1b0)
+-                return AVPROBE_SCORE_MAX - 2;
+-            else
+-                return 0;
++            int pes= check_pes(p->buf+i, p->buf+p->buf_size);
++
++            if(code == SYSTEM_HEADER_START_CODE) sys++;
++            else if(code == PRIVATE_STREAM_1)    priv1++;
++            else if(code == PACK_START_CODE)     pspack++;
++            else if((code & 0xf0) == VIDEO_ID &&  pes) vid++;
++            else if((code & 0xe0) == AUDIO_ID &&  pes) audio++;
++
++            else if((code & 0xf0) == VIDEO_ID && !pes) invalid++;
++            else if((code & 0xe0) == AUDIO_ID && !pes) invalid++;
+         }
+     }
+ 
+-    return 0;
++    if(vid+audio > invalid)     /* invalid VDR files nd short PES streams */
++        score= AVPROBE_SCORE_MAX/4;
++
++//av_log(NULL, AV_LOG_ERROR, "%d %d %d %d %d len:%d\n", sys, priv1, pspack,vid, audio, p->buf_size);
++    if(sys>invalid && sys*9 <= pspack*10)
++        return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
++    if(priv1 + vid + audio > invalid && (priv1+vid+audio)*9 <= pspack*10)
++        return AVPROBE_SCORE_MAX/2+2; // +1 for .mpg
++    if((!!vid ^ !!audio) && (audio > 4 || vid > 1) && !sys && !pspack && p->buf_size>2048) /* PES stream */
++        return AVPROBE_SCORE_MAX/2+2;
++
++    //02-Penguin.flac has sys:0 priv1:0 pspack:0 vid:0 audio:1
++    return score;
+ }
+ 
+ typedef struct MpegDemuxContext {
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mythbackend`
+case "$1" in
+  start)
+    stat_busy "Starting MythTV Backend"
+    [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
+    [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important 
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      echo $PID > /var/run/mythbackend.pid
+      add_daemon mythbackend
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping MythTV Backend"
+    [ ! -z "$PID" ]  && kill $PID &>/dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon mythbackend
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1s 
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr
new file mode 100644
index 0000000..4f218bc
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythbackend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythbackend.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr b/abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr
new file mode 100644
index 0000000..1580533
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythfrontend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythfrontend.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch
new file mode 100644
index 0000000..e5c57ef
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.cpp.patch
@@ -0,0 +1,125 @@
+--- libs/libmythui/myththemedmenu.cpp.orig	2008-01-31 15:26:38.000000000 +0000
++++ libs/libmythui/myththemedmenu.cpp	2008-02-07 22:24:27.000000000 +0000
+@@ -2102,6 +2102,10 @@
+             }
+             lastbutton = NULL;
+         }
++        else if (action == "MENU")
++        {
++            parent->doMenu();
++        }
+         else if (action == "EJECT")
+         {
+             myth_eject();
+@@ -2482,6 +2486,8 @@
+ 
+     if (d->foundtheme)
+         d->parseMenu(menufile);
++
++    m_menuPopup = NULL;
+ }
+ 
+ MythThemedMenu::~MythThemedMenu(void)
+@@ -2592,3 +2598,102 @@
+     MythScreenType::aboutToShow();
+     d->updateLCD();
+ }
++void MythThemedMenu::doMenu()
++{
++    int allowsd = gContext->GetNumSetting("AllowQuitShutdown");
++    if (m_menuPopup)
++        return;
++    QString label = "System Menu";
++    MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
++    m_menuPopup = new MythDialogBox(label, mainStack, "menuPopup");
++    if (m_menuPopup->Create())
++        mainStack->AddScreen(m_menuPopup);
++
++    //changed line to always show shutdown/reboot
++    if ( allowsd != 10 && allowsd !=14  )
++    {
++        m_menuPopup->SetReturnEvent(this,"popmenu_exit");
++        m_menuPopup->AddButton("Power off");
++        m_menuPopup->AddButton("Reboot");
++        m_menuPopup->AddButton("About");
++        m_menuPopup->AddButton("Cancel");
++    }
++    else
++    {
++        m_menuPopup->SetReturnEvent(this,"popmenu_noexit");
++        m_menuPopup->AddButton("About");
++        m_menuPopup->AddButton("Cancel");
++    }
++}
++
++void MythThemedMenu::aboutScreen()
++{
++{
++        extern const char *myth_source_version;
++        extern const char *myth_source_path;
++        QString distro_line;
++        distro_line="";
++
++        QFile file("/etc/os_myth_release");
++        if ( file.open(IO_ReadOnly | IO_Translate) )
++        {
++            QTextStream t( &file );        // use a text stream
++            distro_line = t.readLine();
++            file.close();
++        }
++
++        QString label = "";
++        label.append(QObject::tr("Revision: ") + myth_source_version   + "  \n  Branch:" +  myth_source_path  + "\n" + distro_line );
++
++        MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
++        m_menuPopup = new MythDialogBox(label, mainStack, "About");
++        if (m_menuPopup->Create())
++            mainStack->AddScreen(m_menuPopup);
++
++        m_menuPopup->SetReturnEvent(this,"About");
++        m_menuPopup->AddButton("OK!");
++    }
++}
++
++void MythThemedMenu::customEvent(QCustomEvent *event)
++{
++    if (event->type() == kMythDialogBoxCompletionEventType)
++    {
++        DialogCompletionEvent *dce =
++                dynamic_cast<DialogCompletionEvent*>(event);
++
++        QString resultid= dce->GetId();
++        int buttonnum  = dce->GetResult();
++        if (resultid == "popmenu_exit")
++        {
++            if (buttonnum == 0)
++            {
++                QString halt_cmd = gContext->GetSetting("HaltCommand",
++                        "sudo /sbin/halt -p");
++                if (!halt_cmd.isEmpty())
++                    system(halt_cmd.ascii());
++            }
++
++            if (buttonnum == 1)
++            {
++                QString reboot_cmd = gContext->GetSetting("RebootCommand",
++                        "sudo /sbin/reboot");
++                if (!reboot_cmd.isEmpty())
++                    system(reboot_cmd.ascii());
++            }
++
++            if (buttonnum == 2)
++            {
++                aboutScreen();
++            }
++        }
++
++        if (resultid == "popmenu_noexit")
++        {
++            if (buttonnum == 0)
++                aboutScreen();
++        }
++
++        m_menuPopup = NULL;
++    }
++}
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch
new file mode 100644
index 0000000..9744b11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/myththemedmenu.h.patch
@@ -0,0 +1,25 @@
+--- libs/libmythui/myththemedmenu.h.orig	2008-01-31 15:26:45.000000000 +0000
++++ libs/libmythui/myththemedmenu.h	2008-02-07 21:00:22.000000000 +0000
+@@ -2,6 +2,7 @@
+ #define MYTHTHEMEDMENU_H_
+ 
+ #include "mythscreentype.h"
++#include "mythdialogbox.h"
+ 
+ class MythMainWindow;
+ class MythThemedMenuPrivate;
+@@ -26,8 +27,14 @@
+ 
+     void ReloadTheme(void);
+     void ReloadExitKey(void);
++
+     virtual void aboutToShow(void);
+ 
++    void doMenu();
++    void aboutScreen();
++    MythDialogBox *m_menuPopup;
++    void customEvent(QCustomEvent *event);
++
+   protected:
+     virtual bool keyPressEvent(QKeyEvent *e);
+     virtual void gestureEvent(MythUIType *origtype, MythGestureEvent *ge);
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install b/abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install
new file mode 100644
index 0000000..db1da94
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/mythtv.install
@@ -0,0 +1,55 @@
+# arg 1:  the new package version
+post_install() {
+	if [ ! -d /var/log/mythtv ]
+	then
+		mkdir -p /var/log/mythv
+		chown -R mythtv /var/log/mythtv
+		echo "---" > /var/log/mythtv/mythbackend.log
+		chown mythtv /var/log/mythtv/mythbackend.log
+	fi
+	if [ -e /tmp/is.xml ]
+	then
+		cp /tmp/is.xml /usr/share/mythtv/is.xml
+	fi
+
+	if [ -e /tmp/media_settings.xml ]
+	then
+		 cp /tmp/media_settings.xml /usr/share/mythtv/media_settings.xml 
+        fi
+}
+pre_upgrade() {
+	if [ -e /usr/share/mythtv/is.xml ]
+	then
+		cp /usr/share/mythtv/is.xml /tmp
+	fi
+
+	if [ -e /usr/share/mythtv/media_settings.xml ]
+	then
+		cp /usr/share/mythtv/media_settings.xml /tmp
+	fi
+}
+
+post_upgrade() {
+	cp /tmp/is.xml /usr/share/mythtv/
+	cp /tmp/media_settings.xml /usr/share/mythtv/
+	if [ ! -d /var/log/mythtv ]
+	then
+		mkdir -p /var/log/mythv
+		chown -R mythtv /var/log/mythtv
+	fi
+	chown root.mythtv /etc/systemconfig
+	chmod 664 /etc/systemconfig
+}
+pre_remove () {
+	pre_upgrade
+}
+
+# arg 1:  the old package version
+post_remove() {
+	/bin/true
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/pretty b/abs/core/mythtv/old/stable-0.21/mythtv/pretty
new file mode 100644
index 0000000..e47aaec
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/pretty
@@ -0,0 +1,2 @@
+#!/bin/bash
+su mythtv -c "perl /usr/share/mythtv/contrib/mythrename.pl --link /myth/pretty"
diff --git a/abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch b/abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch
new file mode 100644
index 0000000..696be80
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythtv/smolt_jump.patch
@@ -0,0 +1,9 @@
+--- programs/mythfrontend/networkcontrol.cpp.orig	2008-03-23 23:00:25.000000000 +0000
++++ programs/mythfrontend/networkcontrol.cpp	2008-03-23 23:01:33.000000000 +0000
+@@ -81,6 +81,7 @@
+     jumpMap["zoneminderliveview"]    = "ZoneMinder Live View";
+     jumpMap["zoneminderevents"]      = "ZoneMinder Events";
++    jumpMap["mythsmolt"]             = "MythSmolt";
+ 
+     // These jump point names match the (lowercased) locations from gContext
+     jumpMap["channelrecpriority"]    = "Channel Recording Priorities";
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD
new file mode 100644
index 0000000..a233549
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <travis@archlinux.org>
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythvideo
+pkgver=0.21
+pkgrel=9
+pkgdesc="Video playback and browsing plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2"\
+	"ftp://ftp.knoppmyth.net/R6/sources/tmdb.tar.bz2" \
+	mtd mythvideo-6338-use_tmdb_in_fixes.patch)
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe' '48cff8f7095586c85ec70989746736b4' '476c12ba074794ad7f4ae092bdf949d6' '4bd38d054dfc4b0b1724f398d38676f7')
+replaces=('mythdvd')
+groups=('mythtv-extras')
+install=mythvideo.install
+
+build() {
+   cd $startdir/src/mythplugins
+   svn update
+   patch -p1 < ../mythvideo-6338-use_tmdb_in_fixes.patch
+   . /etc/profile.d/qt3.sh
+   
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+
+   ./configure --prefix=/usr --disable-all --enable-mythvideo
+
+   qmake mythplugins.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+   install -D -m755 ../mtd $startdir/pkg/etc/rc.d/mtd
+   cp -Rv $startdir/src/tmdb/* $startdir/pkg/usr/share/mythtv/mythvideo/scripts/
+}
+
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/mtd b/abs/core/mythtv/old/stable-0.21/mythvideo/mtd
new file mode 100644
index 0000000..1f46dfe
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/mtd
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mtd`
+case "$1" in
+  start)
+    stat_busy "Starting Myth Transcoding Daemon"
+    [ -z "$PID" ] && /usr/bin/mtd -d
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      echo $PID > /var/run/mtd.pid
+      add_daemon mythtranscode
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping Myth Transcoding Daemon"
+    [ ! -z "$PID" ]  && kill $PID &>/dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon mtd 
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
new file mode 100644
index 0000000..a5a182d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo-6338-use_tmdb_in_fixes.patch
@@ -0,0 +1,151 @@
+Index: mythplugins/mythvideo/mythvideo/videomanager.cpp
+===================================================================
+--- mythplugins.orig/mythvideo/mythvideo/videomanager.cpp	2009-03-09 22:39:40.000000000 -0400
++++ mythplugins/mythvideo/mythvideo/videomanager.cpp	2009-03-09 23:04:55.000000000 -0400
+@@ -1535,6 +1535,56 @@
+             }
+         }
+ 
++        // Since there's no DB update to remove imdb.pl settings in -fixes,
++        // check for the old imdb.pl command and, if it's the old default,
++        // use tmdb.pl, instead (if available in the same location or the
++        // scripts dir)).  Checks to see if cmd ends with end (the end of the
++        // old default imdb.pl command line).  If so, it checks for tmdb, and
++        // if it exists in either the same location as specified in cmd or in
++        // the MythVideo scripts directory, replace end with "/tmdb.pl " + arg
++        QString UpdateCommandForTMDB(const QString cmd, const QString end,
++                                     const QString arg)
++        {
++            QString updated_cmd = cmd;
++            if (updated_cmd.endsWith(end))
++            {
++                QString script_path = updated_cmd;
++                script_path.truncate(updated_cmd.findRev(end,
++                                                         0 - end.length()));
++                QString tmdb_path(script_path + "/tmdb.pl");
++                if (QFile::exists(tmdb_path))
++                {
++                    VERBOSE(VB_GENERAL, QString("Overriding old default "
++                                                "grabber script command line. "
++                                                "Using tmdb.pl, instead."));
++                    updated_cmd = tmdb_path + " " + arg;
++                }
++                else
++                {
++                    // It's possible the user has a non-default imdb.pl
++                    // command-line--including path location--in the setting,
++                    // so check to see if we've already checked the mythvideo
++                    // scripts directory
++                    QString def_path = QDir::cleanDirPath(QString("%1/%2")
++                            .arg(gContext->GetShareDir())
++                            .arg("mythvideo/scripts"));
++                    if (script_path != def_path)
++                    {
++                        tmdb_path = def_path + "/tmdb.pl";
++                        if (QFile::exists(tmdb_path))
++                        {
++                            VERBOSE(VB_GENERAL, QString("Overriding old "
++                                    "default grabber script command line. "
++                                    "Using tmdb.pl, instead."));
++                            updated_cmd = tmdb_path + " " + arg;
++                        }
++                    }
++                }
++            }
++
++            return updated_cmd;
++        }
++
+         virtual void OnExecDone(bool normal_exit, const QStringList &out,
+                                 const QStringList &err) = 0;
+ 
+@@ -1624,9 +1674,16 @@
+ 
+             QString def_cmd = QDir::cleanDirPath(QString("%1/%2")
+                     .arg(gContext->GetShareDir())
+-                    .arg("mythvideo/scripts/imdb.pl -M tv=no;video=no"));
++                    .arg("mythvideo/scripts/tmdb.pl -M"));
+ 
+-            QString cmd = gContext->GetSetting("MovieListCommandLine", def_cmd);
++            // Since there's no DB update to remove imdb.pl settings in -fixes,
++            // check for the old imdb.pl command and, if it's the old default,
++            // use tmdb.pl, instead (if available in the same location or the
++            // scripts dir))
++            QString cmd = UpdateCommandForTMDB(
++                            gContext->GetSetting("MovieListCommandLine",
++                                                 def_cmd),
++                            "/imdb.pl -M tv=no;video=no", "-M");
+ 
+             QStringList args;
+             args += title;
+@@ -1682,9 +1739,15 @@
+ 
+             const QString def_cmd = QDir::cleanDirPath(QString("%1/%2")
+                     .arg(gContext->GetShareDir())
+-                    .arg("mythvideo/scripts/imdb.pl -D"));
+-            const QString cmd = gContext->GetSetting("MovieDataCommandLine",
+-                                                     def_cmd);
++                    .arg("mythvideo/scripts/tmdb.pl -D"));
++            // Since there's no DB update to remove imdb.pl settings in -fixes,
++            // check for the old imdb.pl command and, if it's the old default,
++            // use tmdb.pl, instead (if available in the same location or the
++            // scripts dir))
++            const QString cmd = UpdateCommandForTMDB(
++                                  gContext->GetSetting("MovieDataCommandLine",
++                                                       def_cmd),
++                                  "/imdb.pl -D", "-D");
+ 
+             StartRun(cmd, video_uid, "Video Data Query");
+         }
+@@ -1726,9 +1789,16 @@
+             const QString default_cmd =
+                     QDir::cleanDirPath(QString("%1/%2")
+                                        .arg(gContext->GetShareDir())
+-                                       .arg("mythvideo/scripts/imdb.pl -P"));
+-            const QString cmd = gContext->GetSetting("MoviePosterCommandLine",
+-                                                     default_cmd);
++                                       .arg("mythvideo/scripts/tmdb.pl -P"));
++            // Since there's no DB update to remove imdb.pl settings in -fixes,
++            // check for the old imdb.pl command and, if it's the old default,
++            // use tmdb.pl, instead (if available in the same location or the
++            // scripts dir))
++            const QString cmd = UpdateCommandForTMDB(
++                                  gContext->GetSetting("MoviePosterCommandLine",
++                                                       default_cmd),
++                                  "/imdb.pl -P", "-P");
++
+             StartRun(cmd, video_uid, "Poster Query");
+         }
+ 
+Index: mythplugins/mythvideo/mythvideo/globalsettings.cpp
+===================================================================
+--- mythplugins.orig/mythvideo/mythvideo/globalsettings.cpp	2009-03-09 22:39:40.000000000 -0400
++++ mythplugins/mythvideo/mythvideo/globalsettings.cpp	2009-03-09 22:42:47.000000000 -0400
+@@ -210,8 +210,7 @@
+ {
+     HostLineEdit *gc = new HostLineEdit("MovieListCommandLine");
+     gc->setLabel(QObject::tr("Command to search for movie listings"));
+-    gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl " +
+-                 "-M tv=no;video=no");
++    gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -M");
+     gc->setHelpText(QObject::tr("This command must be "
+                     "executable by the user running MythVideo."));
+     return gc;
+@@ -221,7 +220,7 @@
+ {
+     HostLineEdit *gc = new HostLineEdit("MoviePosterCommandLine");
+     gc->setLabel(QObject::tr("Command to search for movie posters"));
+-    gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl -P");
++    gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -P");
+     gc->setHelpText(QObject::tr("This command must be "
+                     "executable by the user running MythVideo."));
+     return gc;
+@@ -231,7 +230,7 @@
+ {
+     HostLineEdit *gc = new HostLineEdit("MovieDataCommandLine");
+     gc->setLabel(QObject::tr("Command to extract data for movies"));
+-    gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/imdb.pl -D");
++    gc->setValue(gContext->GetShareDir() + "mythvideo/scripts/tmdb.pl -D");
+     gc->setHelpText(QObject::tr("This command must be "
+                     "executable by the user running MythVideo."));
+     return gc;
diff --git a/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install
new file mode 100644
index 0000000..a06777d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythvideo/mythvideo.install
@@ -0,0 +1,20 @@
+# arg 1:  the new package version
+post_install() {
+	ln -s /myth/video /data/srv/httpd/htdocs/mythweb/data/video
+	ln -s /myth/video/.covers /data/srv/httpd/htdocs/mythweb/data/video_covers
+}
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_upgrade() {
+	/bin/true
+}
+
+# arg 1:  the old package version
+post_remove() {
+	rm -fr /data/srv/httpd/htdocs/mythweb/data/video
+	rm -fr /data/srv/httpd/htdocs/mythweb/data/video_covers
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD
new file mode 100644
index 0000000..201ea5d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweather/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythweather
+pkgver=0.21
+pkgrel=3
+pkgdesc="Weather checking plugin for MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'wget')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+
+   ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythweather
+ 
+   qmake mythplugins.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD
new file mode 100644
index 0000000..20e9e3d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/PKGBUILD
@@ -0,0 +1,39 @@
+pkgname=mythweb
+pkgver=0.21
+pkgrel=20
+pkgdesc="Web interface for MythTV's backend"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'lighttpd' 'php' 'local-website')
+install=mythweb.install
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2" wiiweb.tar.bz2 transcoders.patch)
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+DOCROOT=/data/srv/httpd/htdocs/mythweb
+
+build() {
+   cd $startdir/src/mythplugins/mythweb
+   svn update   
+   mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
+#apply gallery patches here
+#   cd $startdir/src/mythplugins-$pkgver/$pkgname/
+#   patch -p0 < $startdir/patch/mythweb_gallery_updated1.diff
+#   patch -p2 < $startdir/patch/2923-mythweb-gallery-English_GB_lang.diff
+#   tar -zxvf $startdir/patch/icons.tar.gz
+###
+
+   # Workaround for LIGHTTPD bug in mythweb.pl (affects DB queries)
+   cd $startdir/src/mythplugins/$pkgname/
+   patch -p0 < $startdir/patch/mythweb.pl.diff
+   patch -p1 < $startdir/transcoders.patch
+
+   cp -r $startdir/src/mythplugins/$pkgname/* $startdir/pkg/$DOCROOT
+#   cp $startdir/src/mythplugins-$pkgver/$pkgname/data/.htaccess $startdir/pkg/$DOCROOT
+   rm $startdir/pkg/srv/$DOCROOT/README
+   tar xjvf $srcdir/wiiweb.tar.bz2 -C $pkgdir/$DOCROOT
+   chown -R http:users $startdir/pkg/$DOCROOT
+   chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
+}
+
+
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install b/abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install
new file mode 100644
index 0000000..a2aa1bd
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/mythweb.install
@@ -0,0 +1,13 @@
+post_install() {
+	if [ ! -e /data/srv/httpd/htdocs/mythweb/data/video ]
+	then
+		ln -s /myth/video /data/srv/httpd/htdocs/mythweb/data/video
+	fi
+}
+
+post_upgrade(){
+	post_install $1
+}
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff b/abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff
new file mode 100644
index 0000000..103fb2f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/2923-mythweb-gallery-English_GB_lang.diff
@@ -0,0 +1,102 @@
+Index: mythplugins/mythweb/modules/_shared/lang/English_GB.lang
+===================================================================
+--- mythplugins/mythweb/modules/_shared/lang/English_GB.lang	(revision 16505)
++++ mythplugins/mythweb/modules/_shared/lang/English_GB.lang	(working copy)
+@@ -154,6 +154,7 @@
+ "Current Conditions"
+ "Current Recording"
+ "Current recordings"
++"Current path"
+ "Currently Browsing:  $1"
+ "Currently Recording:  Edit"
+ "Custom"
+@@ -169,6 +170,7 @@
+     Deaf Signed
+ "Default"
+ "Default MythVideo View"
++"Default view size"
+ "Delete"
+ "delete"
+ "Delete $1"
+@@ -247,6 +249,8 @@
+ "freqid"
+ "Friday"
+ "Frontends"
++"Gallery"
++"Gallery image path"
+ "generic_date"
+     %a %b %e, %Y
+ "generic_time"
+@@ -270,12 +274,14 @@
+ "Hide"
+ "High"
+ "Home"
++"Horizontal screen resolution"
+ "Host"
+ "Hosted by"
+ "Hour"
+ "Hour Format"
+ "hue"
+ "Humidity"
++"Images per page"
+ "IMDB"
+ "IMDBTYPE"
+ "Inactive"
+@@ -334,6 +340,8 @@
+ "length"
+ "Length"
+ "Length (min)"
++"List of allowed image formats"
++"List of available view sizes"
+ "Listing &quot;Jump to&quot;"
+ "Listing Time Key"
+ "Listings"
+@@ -383,6 +391,7 @@
+ "mythvideo.sort_ignores_case"
+ "MythWeb"
+ "MythWeb Defaults"
++"MythWeb Gallery"
+ "MythWeb Global Defaults"
+ "MythWeb Session"
+ "MythWeb Skin"
+@@ -413,6 +422,7 @@
+ "Number of shows"
+ "Number of Songs"
+ "Number of timeslots"
++"of"
+ "Only display favourite channels"
+ "Only match commercial-free channels"
+ "Only match HD programs"
+@@ -429,6 +439,7 @@
+ "Past Month"
+ "Past Week"
+ "Past Year"
++"Path where the thumbnails are"
+ "Paused"
+ "Pending"
+ "People"
+@@ -688,6 +699,7 @@
+ "Subtitles Available"
+ "Sunday"
+ "Surround Sound"
++"Switch view mode"
+ "Tab"
+ "The requested recording schedule has been deleted."
+ "There are no items in this Playlist!"
+@@ -705,6 +717,7 @@
+ "Title Match"
+ "Title search"
+ "Title Search"
++"to"
+ "Today"
+ "Tomorrow"
+ "Too Many"
+@@ -791,6 +804,8 @@
+ "Wednesday"
+ "welcome: backend_log"
+     Show the server logs.
++"welcome: gallery"
++    Browse your picture collection.
+ "welcome: music"
+     Browse your music collection.
+ "welcome: remote"
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz b/abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz
new file mode 100644
index 0000000..691d28e
Binary files /dev/null and b/abs/core/mythtv/old/stable-0.21/mythweb/patch/icons.tar.gz differ
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff
new file mode 100644
index 0000000..6dcbf99
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb.pl.diff
@@ -0,0 +1,23 @@
+*** mythweb-unpatched.pl	2009-06-02 14:55:24.011861459 -0400
+--- mythweb.pl	2009-06-02 14:56:24.386441304 -0400
+***************
+*** 49,57 ****
+  
+  # Connect to the database
+      END { $dbh->disconnect() if ($dbh); }
+!     our $dbh = DBI->connect("dbi:mysql:database=$ENV{'db_name'}:host=$ENV{'db_server'}",
+!                             $ENV{'db_login'},
+!                             $ENV{'db_password'});
+      unless ($dbh) {
+          print header(),
+                "Cannot connect to database: $!\n\n";
+--- 49,57 ----
+  
+  # Connect to the database
+      END { $dbh->disconnect() if ($dbh); }
+!     our $dbh = DBI->connect("dbi:mysql:database=$ENV{'DB_NAME'}:host=$ENV{'DB_SERVER'}",
+!                             $ENV{'DB_LOGIN'},
+!                             $ENV{'DB_PASSWORD'});
+      unless ($dbh) {
+          print header(),
+                "Cannot connect to database: $!\n\n";
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff
new file mode 100644
index 0000000..f683b17
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/patch/mythweb_gallery_updated1.diff
@@ -0,0 +1,1657 @@
+diff -Naur ../mythweb-orig/modules/gallery/handler.php ./modules/gallery/handler.php
+--- ../mythweb-orig/modules/gallery/handler.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/handler.php	2007-08-20 22:33:02.000000000 -0400
+@@ -0,0 +1,35 @@
++<?php
++/**
++ * Handler for the Gallery module.
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/handler.php $
++ * @date        $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version     $Revision: 12295 $
++ * @author      $Author: rsiebert $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ * @subpackage  MythGallery
++ *
++/**/
++
++// Load settings functions
++require_once 'includes/objects/Settings.php';
++
++// Load Gallery class
++require_once 'includes/objects/Gallery.php';
++
++// Load configuration
++loadGalleryConfig();
++
++// Create the gallery
++global $gallery;
++ 
++$gallery = new Gallery();
++
++// Print the gallery page template
++require_once tmpl_dir.'gallery.php';
++
++// Exit
++exit;
++
+diff -Naur ../mythweb-orig/modules/gallery/includes/objects/Gallery.php ./modules/gallery/includes/objects/Gallery.php
+--- ../mythweb-orig/modules/gallery/includes/objects/Gallery.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/includes/objects/Gallery.php	2007-08-20 22:27:02.000000000 -0400
+@@ -0,0 +1,608 @@
++<?php
++/**
++ * Gallery Functions for the Gallery module
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/gallery.php $
++ * @date        $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version     $Revision: 12295 $
++ * @author      $Author: xris $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ *
++/**/
++
++class Gallery {
++
++	var $config;
++	
++	function Gallery() {
++		// load default configuration
++		$this->config['image_path'] 		= $_SESSION['gallery']['image_path'];
++		$this->config['cache_path'] 		= $_SESSION['gallery']['cache_path'];
++		$this->config['default_viewsize'] 	= $_SESSION['gallery']['default_viewsize'];
++		$this->config['screen_width'] 		= $_SESSION['gallery']['screen_width'];
++		$this->config['viewsizes'] 		= $_SESSION['gallery']['viewsizes'];
++ 		$this->config['valid_image_files'] 	= $_SESSION['gallery']['valid_image_files'];
++
++	}
++
++	// =======================================================
++	function start() {
++
++		// the current selected directory where the cached images are stored
++		$current_path = $this->getCurrentImagePath();
++		// the path to the real images
++		$image_path = $this->config['image_path'];
++		// the filename of a selected image
++		$image_name = $this->getImageName();
++		// the current viewsize mode
++		$image_viewsize = $this->getImageViewSize();
++		// get the image index for the viewsize medium
++		$image_index = $this->getImageIndex();
++		// get the contents of the folders
++		$folderList = $this->getFolderList( $current_path );
++		// check what kind of images should be displayed
++		if ($image_viewsize == 'fullsize') {
++			// create the images if there are not yet in the directory
++			$this->makeImages( $current_path, $folderList, $image_viewsize, $image_index );
++			// display the big image
++			$this->showFullsizeImage( $current_path, $folderList, $image_index );
++			// there is nothing else to do
++			exit;
++		}
++		// show the horizontal navigation bar
++		$this->showGalleryHeader( $current_path, $image_viewsize, $image_index );		
++		// check if the thumbnail directory is there, if not create it
++		$this->makeDirectory( $current_path );
++		// create the images if there are not yet in the directory
++		$this->makeImages( $current_path, $folderList, $image_viewsize, $image_index );
++		echo '<table width="100%" cellspacing="0" cellpadding="0">'."\n".
++			'<tr>'."\n".
++				'<td class="folder_navigation">'."\n";
++					$this->showFolderTree( $current_path, $folderList );
++				echo '</td>'."\n".
++				'<td class="image_listing">'."\n";
++					if ($this->onlyDirectoriesAvailable( $current_path, $folderList, $image_viewsize, $image_index ) == false ) {
++						echo '<table class="imagelist_and_navigation" cellspacing="0" cellpadding="0">'."\n".
++						'<tr>'."\n".
++							'<td>'."\n";
++								$this->showNavigation( $current_path, $folderList, $image_viewsize, $image_index );
++							echo '</td>'."\n".
++							'</tr>'."\n".
++							'<tr>'."\n".
++								'<td>'."\n";
++									$this->showImages( $current_path, $folderList, $image_viewsize, $image_index );
++							echo '</td>'."\n".
++							'</tr>'."\n".
++						'</tr>'."\n".
++						'</table>'."\n";
++					} else {
++						echo '&nbsp;';
++					}
++				echo '</td>'."\n".
++			'</tr>'."\n".			
++		'</table>'."\n";
++	}
++	
++	// =======================================================
++	function getViewSizesList() {
++		$viewsizesList = explode(';',preg_replace('/ /','',$this->config['viewsizes']));
++		return $viewsizesList;
++	}
++
++
++	// =======================================================
++	function getCurrentImagePath() {
++		switch ($_SERVER['REQUEST_METHOD']) {
++			case 'GET':
++				$current_path = stripslashes($_GET['path']);
++				break;
++			case 'POST':
++				$current_path = stripslashes($_POST['path']);
++				break;
++		}
++		if (!is_dir($current_path) ) {
++			$current_path = $this->config['image_path'];
++		}
++ 		return $current_path;
++	}
++	
++	// =======================================================
++	function getImageViewSize() {
++		switch ($_SERVER['REQUEST_METHOD']) {
++			case 'GET':
++				$viewsize = stripslashes($_GET[viewsize]);
++				break;
++			case 'POST':
++				$viewsize = stripslashes($_POST[viewsize]);
++				break;
++		}	
++		// check if the given viewsize is one of the viewsizes
++		// specified in the config. fullsize is also needed
++		if (isset($viewsize) && 
++			(($viewsize == 'fullsize') ||  
++			in_array($viewsize, $this->getViewSizesList()))) {
++			return $viewsize;
++		} else {
++			return $this->config['default_viewsize'];
++		}
++	}
++	
++	// =======================================================
++	function getImageName() {
++		switch ($_SERVER['REQUEST_METHOD']) {
++			case 'GET':
++				$image_name = $_GET['file'];
++				break;
++			case 'POST':
++				$image_name = $_POST['file'];
++				break;
++		}	
++		return $image_name;
++	}
++
++	// =======================================================
++	function getImageIndex() {
++		if (isset($_GET['index'])) 	
++			return $_GET['index'];
++		return 1;
++	}
++	
++	
++	// =======================================================
++	// displays the path of the choosen directories horizontally 
++	// so one can navigate back
++	function showGalleryHeader( $current_path, $image_viewsize, $image_index ) {
++		echo '<table class="current_path_and_viewsize" cellspacing="0" cellpadding="0">'."\n".
++			'<tr>'."\n".
++				'<td class="current_path">'.
++					t('Current path').': ';
++					$folders = explode('/', $current_path);
++					for ($i=1; $i < count($folders); $i++) {
++						echo '<a class="header" href="'.root.'gallery/gallery.php?'.path.'=';
++						// show thefolders in the navigation bar
++						for ($j=1; $j <= $i; $j++) {
++							echo '/'.$folders[$j];
++						}
++						echo '&'.viewsize.'='.$this->getImageViewSize().'">'.
++						$folders[$i].'</a>'."\n";
++						// don't show the separators when there are no more subfolders
++						if ($i < (count($folders)-1)) {
++							echo ' / ';
++						}
++					}
++				// display the menu where one can shoose between small and medium images
++				echo '</td>'."\n".
++					'<td class="change_viewsize_text">'.
++						t('Switch view mode').':&nbsp;&nbsp;'.
++					'</td>'."\n".
++					'<form name="change_viewsize" method="post">'."\n".
++					'<td class="change_viewsize_selection">'."\n".
++						'<select class="change_viewsize" name="'.
++							viewsize.'" onChange="submit()" size="1">'."\n";
++							$viewsizesList = $this->getViewSizesList();
++							for ($i=0; $i < count($viewsizesList); $i++) {
++								echo '<option value="'.$viewsizesList[$i].'" ';
++								if ($this->getImageViewSize() == $viewsizesList[$i]) {
++									echo 'selected';
++								}
++								$str = strtr($viewsizesList[$i], ',','x');
++								echo '>'.$str.' '.t('Images per page').'</option>'."\n";
++							}
++					echo '</select>'."\n".
++						'<input type="hidden" name="'.index.'" value="'.$image_index.'">'.
++						'<input type="hidden" name="'.path.'" value="'.$current_path.'">';
++				echo '</td></form>'."\n".
++			'</tr>'."\n".
++		'</table>'."\n";
++	}
++	
++	// =======================================================
++	function showFolderTree( $current_path, $folderList ) {
++
++		// dont go into the directory if there are not subdirs
++		if ($this->getFolderCount( $current_path, $folderList[$i]) == 0) {
++			$current_path = substr($current_path, 0, strrpos($current_path, '/'));
++			$folderList = $this->getFolderList( $current_path );
++		}
++		// displays the directory tree and the pictures
++		echo '<table class="folder_navigation" width="100%" cellspacing="0" cellpadding="0">'."\n".
++			'<tr>'."\n".
++				'<td>'."\n";
++					// display the directories
++					for ($i = 0; $i < count( $folderList ); $i++) {
++						// only display folders that are not hidden or special
++						if ((is_dir( $current_path.'/'.$folderList[$i] )) &&
++							($folderList[$i] != '..')){
++							echo '<div class="folder_navigation" '.
++							'onmouseover="this.className=\'folder_navigation_active\'" '.
++							'onmouseout="this.className=\'folder_navigation\'">';
++								$link = $this->getFolderLink( $current_path, $folderList[$i] );	
++								$folderCount = $this->getFolderCount( $current_path, $folderList[$i] );
++								// display the folder as a link and the number of subfolder next to it
++								$this->displayFolderLink( $link, $folderList[$i], $folderCount );
++							echo '</div>';
++						}
++					}
++				echo '</td>'."\n".
++			'</tr>'."\n".
++		'</table>'."\n";
++	}
++
++	// =======================================================
++	function getFolderList( $current_path ) {
++		if ($current_path != $this->config['cache_path'] ) {
++			$folderList[] = '..';
++		}
++		// get the image extensions
++		$extenstionList = explode(',',$this->config['valid_image_files']);
++		// get the directories and files
++		if ($dh = opendir($current_path)) {
++			while (($file = readdir($dh)) !== false) {
++				// only add the file/dir if its a directory or a file
++				// with the specified extension
++
++				if ((substr($file,0,1) != '.') && 
++					(is_dir($current_path.'/'.$file)) ||
++					(in_array(strtolower(substr($file,-3)), $extenstionList)))
++				{
++					$folderList[] = $file;
++				}
++			}
++		}
++		// delete the first entry when we are at the image_path
++		// to prevent from going a directory up
++		if ($current_path == $this->config['image_path'])
++			array_shift($folderList);
++		// sort the array alphabetically
++		sort($folderList);
++		return $folderList;
++	}	
++	
++	// =======================================================
++	function getFolderLink( $current_path, $folder ) {
++		$link = '<a class="folderlist" href="'.root.'gallery/gallery.php?'.path.'=';
++		// display the .. directory only if there is another
++		// directory above this one.
++		if (($folder == '..') && ($current_path != $this->config['cache_path'])) {
++			$folderList = explode( '/', $current_path.'/');
++			for( $i=1; $i < count($folderList)-2; $i++ ) {
++				$link .= '/'.$folderList[$i];
++			}
++		} else {
++			$link .= $current_path.'/'.$folder;
++		}
++		$link .= '&'.viewsize.'='.$this->getImageViewSize().'">';
++		return $link;
++	}
++
++	// =======================================================
++	function displayFolderLink( $link, $folder, $folderCount ) {
++		echo '<table class="folderlink_inactive" cellspacing="0" cellpadding="0">'.
++			'<tr>'.
++				'<td align="left" width="30px">'.
++					'<img class="navigation" src="'.root.skin_dir.'/img/gallery/dir.png">'.
++				'</td>'.
++				'<td align="left" width="auto">'.
++					$link.$folder.'</a>';
++					$this->displayFolderCount( $folderCount );
++				echo '</td>'.
++			'</tr>'.
++		'</table>'."\n";
++	}
++
++	// =======================================================
++	function getFolderCount($current_path, $folder) {
++		// dont get the folder count if its the .. directory
++		if ($folder != '..') {
++			return count(glob($current_path.'/'.$folder.'/*',GLOB_ONLYDIR));
++		}
++	}
++
++	// =======================================================
++	// shows how many sub directories the specified folder has
++	function displayFolderCount( $folderCount ) {
++		if ($folderCount == 1) { 
++			echo ' ('.$folderCount.')';// '.t('subfolder'); 
++		} 
++		if ($folderCount > 1) {
++			echo ' ('.$folderCount.')';// '.t('subfolders'); 
++		}
++	}
++
++	
++	// =======================================================
++	// creates the directory for the thumbnails. the directory
++	// structure is identical to the one of original pictures
++	function makeDirectory( $current_path ) {
++		if (!file_exists( $this->config['cache_path'].$current_path )) {
++			// add the document root to the thumbnail directory
++			// because mkdir works with absolute paths
++			$cache_path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'];
++			// split the directory string into separate directories
++			$folderList = explode( '/', $current_path );
++			// go through all folder and create each one
++			for($i=1; $i < count($folderList); $i++) {
++				$cache_path .= '/'.$folderList[$i];
++				// check if the directory is already there
++				if (!file_exists($cache_path)) {
++					mkdir ($cache_path);
++				}
++			}
++		}
++	}
++
++	// =======================================================
++	// check if the images are there, if not create them 
++	function makeImages( $current_path, $folderList, $image_viewsize, $image_index ) {
++		$path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++		// use the image_viewsize numbers as a prefix if fullsize is not requested
++		if ( $image_viewsize != fullsize ) {
++			// only so many images will be created that will be displayed on the screen
++			$max_cols = substr($image_viewsize, 0, 1);
++			$max_rows = substr($image_viewsize, 2, 1);
++			$max_number = ($max_cols * $max_rows);
++			// the prefix that will be added to a file so that 
++			// different sizes have different names
++			$file_prefix = strtr($image_viewsize, ',','_').'_';
++		} else {
++			$max_number = 1;
++			// the prefix that will be added to a file so that 
++			// different sizes have different names
++			$file_prefix = $image_viewsize.'_';
++		}
++		// get the amount of subfolders. increase the count in the loop by these
++		// subfolders
++		$folder_count = count(glob($current_path.'/'.$folder.'/*',GLOB_ONLYDIR));
++		for ($i = $image_index; $i < ($max_number + $image_index + $folder_count); $i++) {
++			// show the picture only if its not hidden and not a directory
++			if (!is_dir( $current_path.'/'.$folderList[$i] )) {
++				// check if there is already a thumbnail available, if not create it
++				if (!file_exists( $path.'/'.$file_prefix.$folderList[$i] )) {
++					// get the extension of the file
++					$fileParts = explode('.', $folderList[$i]);
++					$file_extension = strtolower($fileParts[count($fileParts)-1]);
++					// get image pointer
++					$image_p = null;
++					if ($file_extension == 'jpg')
++						$image_p = @imagecreatefromjpeg( $current_path.'/'.$folderList[$i] );
++					if ($file_extension == 'png')
++						$image_p = @imagecreatefrompng( $current_path.'/'.$folderList[$i] );
++					if ($file_extension == 'gif')
++						$image_p = @imagecreatefromgif( $current_path.'/'.$folderList[$i] );
++					// proceed if we have an image pointer
++					if ($image_p) {
++						// get the image size for the cached images
++						$size = getimagesize( $current_path.'/'.$folderList[$i]);
++						$width = $size[0];
++						$height = $size[1];
++						// get the width for the choosen viewsize
++						// calculate it from the columns and rows if fullsize is not
++						// requested, otherwise use the original image size
++						if ( $image_viewsize != fullsize ) {
++							$new_width = (( $this->config['screen_width'] / $max_cols ) - 50 );
++							// calculate new image dimensions
++							$new_height = ($height/$width) * $new_width;
++							if ( $height > $width ) {
++								$new_width = ($width/$height) * $new_height;
++							}
++						} else {
++							$new_width = $width;
++							$new_height = $height;
++						}
++						// get a new image pointer
++						$new_image_p = imagecreatetruecolor($new_width, $new_height);
++						// resample the old image to the new one
++						imagecopyresampled($new_image_p, $image_p, 0, 0, 0, 0,
++							$new_width, $new_height, $width, $height );
++						// save the image
++						if ($file_extension == 'jpg')
++							imagejpeg($new_image_p, $path.'/'.$file_prefix.$folderList[$i] );
++						if ($file_extension == 'png')
++							imagepng($new_image_p, $path.'/'.$file_prefix.$folderList[$i] );
++						if ($file_extension == 'gif')
++							imagegif($new_image_p, $path.'/'.$file_prefix.$folderList[$i] );
++						// destroy the old pointers
++						imagedestroy( $image_p );
++						imagedestroy( $new_image_p );
++					}
++				}
++			}
++		}
++	}
++
++	// =======================================================
++	function showImages( $current_path, $folderList, $image_viewsize, $image_index ) {
++
++		$path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++		// get the column and row values, display that many images in a row
++		$max_cols = substr($image_viewsize, 0, 1);
++		$max_rows = substr($image_viewsize, 2, 1);
++		// counter for the current column and row
++		$current_col = 0;
++		// the prefix that will be added to a file so that different sizes have different names
++		$file_prefix = strtr($image_viewsize, ',','_').'_';
++		
++		// get the amount of subfolders
++		$folder_count = count(glob($current_path.'/'.$folder.'/*',GLOB_ONLYDIR));
++		// increase the index by the folder count
++		for ($i = 1; $i <= $folder_count; $i++) {
++			$image_index += 1;
++		}
++		echo '<table width="100%" cellspacing="0" cellpadding="0">'."\n".
++			'<tr>'.
++				'<td colspan="'.$max_cols.'">'.
++					'&nbsp;'.
++				'</td>'.
++			'</tr>';
++			// go through all entries in the folderList	
++			for ($i = $image_index; $i < (($max_cols * $max_rows)+$image_index); $i++) {
++				if (( file_exists( $path.'/'.$file_prefix.$folderList[$i] )) && 
++					( isset($folderList[$i]) )) {
++					// if the column is zero then start a new row
++					// the specified number of images will be displayed side by side
++					if ( $current_col == 0 ) echo '<tr>'."\n";
++					// stretch the table cells to equal size
++					echo '<td class="single_image" style="width:';
++						// calculate the width of the cells
++						echo floor( 100 / $max_cols );
++						echo '%;">'."\n".
++						// display the image centered and put border around it
++						'<div align="center">'."\n".
++							'<a href="'.root.'gallery/gallery.php?'.
++							    path.'='.$current_path.
++							'&'.index.'='.$i.
++							'&'.viewsize.'='.fullsize.
++							'" target="blank">'."\n".
++							'<img class="single_image" src="'.
++								$this->config['cache_path'].$current_path.'/'.
++									$file_prefix.$folderList[$i].'" '.
++							'onmouseover="this.className=\'single_image_active\'" '.
++							'onmouseout="this.className=\'single_image\'">'."\n".
++							'</a>'."\n".
++						'</div>'."\n".
++						'<div align="center">'."\n".
++							// show the filename
++							$folderList[$i]."\n".
++						'</div>'."\n".
++					'</td>'."\n";
++					// if the max number of columns are reached close the row
++					if ( $current_col == $max_cols ) echo '</tr>'."\n";
++					// reset the column count back to zero
++					$current_col++;
++					if ( $current_col == $max_cols ) $current_col = 0;
++				}
++			}
++		echo '</table>';
++	}
++
++
++	// =======================================================
++	function onlyDirectoriesAvailable( $current_path, $folderList, $image_viewsize, $image_index ) {
++		$path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++		// only so many images will be created that will be displayed on the screen
++		$max_cols = substr($image_viewsize, 0, 1);
++		$max_rows = substr($image_viewsize, 2, 1);
++		$max_number = ($max_cols * $max_rows);
++		// the prefix that will be added to a file so that different sizes have different names
++		$file_prefix = strtr($image_viewsize, ',','_').'_';
++
++		// go through the folderList. if there are only directories in it
++		// then dont display the navigation stuff
++		$only_dirs = true;		
++		for ($i = 0; $i < count($folderList); $i++) {
++			if ( file_exists( $path.'/'.$file_prefix.$folderList[$i] )) {
++				$only_dirs = false;
++				break;
++			}
++		}
++		return $only_dirs;
++	}
++
++	// =======================================================
++	function showNavigation( $current_path, $folderList, $image_viewsize, $image_index ) {
++		$path = $_SERVER[DOCUMENT_ROOT].$this->config['cache_path'].$current_path;
++		// only so many images will be created that will be displayed on the screen
++		$max_cols = substr($image_viewsize, 0, 1);
++		$max_rows = substr($image_viewsize, 2, 1);
++		$max_number = ($max_cols * $max_rows);
++		// the prefix that will be added to a file so that different sizes have different names
++		$file_prefix = strtr($image_viewsize, ',','_').'_';
++
++		echo '<table width="100%" cellspacing="0" cellpadding="0">'."\n".
++		'<tr>'."\n".
++			'<td class="image_navigation">&nbsp;'."\n".
++			'</td>'."\n".
++			'<td class="image_navigation">'."\n";							
++				// display the goto first page link
++				if ($image_index != 1) {
++					echo '<a href="'.root.'gallery/gallery.php?'.
++						'&'.path.'='.$current_path.
++						'&'.index.'=1'.
++						'&'.viewsize.'='.$image_viewsize.'">'."\n".
++						// display the right arrow
++						'<img src="'.root.skin_dir.'/img/gallery/first_page.png">'.
++					'</a>'."\n";
++				} else {
++					echo '<img src="'.root.skin_dir.'/img/gallery/first_page_disabled.png">'."\n";
++				}
++				// display the previous page icon if there are more than one entries
++				if ($image_index != 1) {
++					echo '<a href="'.root.'gallery/gallery.php?'.
++						'&'.path.'='.$current_path.
++						'&'.index.'=';
++						if ($image_index < $max_number) {
++							echo 1;
++						} else {
++							echo ($image_index - $max_number);
++						}
++						echo '&'.viewsize.'='.$image_viewsize.'">'."\n".
++						// display the left arrow
++						'<img src="'.root.skin_dir.'/img/gallery/prev_page.png">'.
++					'</a>'."\n";
++				} else {
++					echo '<img src="'.root.skin_dir.'/img/gallery/prev_page_disabled.png">'."\n";
++				}
++			echo '</td>'."\n".
++			'<td class="image_navigation">'."\n".
++				// display an info in what page we are right now
++				'( '.$image_index.' '.t('to').' ';
++				if (($image_index + $max_number) < count($folderList)) {
++					echo ($image_index+$max_number-1);
++				} else {
++					echo (count($folderList)-1);
++				}
++				echo ' '.t('of').' '.(count($folderList)-1).' )'."\n".
++			'</td>'."\n".
++			'<td class="image_navigation">'."\n";
++				// display the next page link
++				if (($image_index + $max_number) < count($folderList)) {
++					echo '<a href="'.root.'gallery/gallery.php?'.
++						'&'.path.'='.$current_path.
++						'&'.index.'='.($image_index + $max_number).
++						'&'.viewsize.'='.$image_viewsize.'">'."\n".
++						// display the right arrow
++						'<img src="'.root.skin_dir.'/img/gallery/next_page.png">'.
++					'</a>'."\n";
++				} else {
++					echo '<img src="'.root.skin_dir.'/img/gallery/next_page_disabled.png">'."\n";
++				}
++				// display the goto last page link
++				if (($image_index + $max_number) < count($folderList)) {
++					echo '<a href="'.root.'gallery/gallery.php?'.
++						'&'.path.'='.$current_path.
++						'&'.index.'='.
++							(count($folderList) - (count($folderList) % $max_number)+1).
++						'&'.viewsize.'='.$image_viewsize.'">'."\n".
++						// display the right arrow
++						'<img src="'.root.skin_dir.'/img/gallery/last_page.png">'.
++					'</a>'."\n";
++				} else {
++					echo '<img src="'.root.skin_dir.'/img/gallery/last_page_disabled.png">'."\n";
++				}
++			echo '</td>'."\n".
++			'<td class="image_navigation">&nbsp;'."\n".
++			'</td>'."\n".
++		'</tr>'."\n".
++		'</table>'."\n";
++	}
++	
++	// =======================================================
++	function showFullsizeImage( $current_path, $folderList, $image_index ) {
++		echo '<html>'."\n".
++		'<head>'."\n".
++			'<title>'.$folderList[$image_index].'</title>'."\n".
++		'</head>'."\n".
++		'<body>'."\n".
++			'<div>'."\n".
++			'<img src="'."\n".
++				$this->config['cache_path'].$current_path.'/'.
++				fullsize.'_'.$folderList[$image_index].'">'."\n".
++			'</div>'."\n".
++		'</body>'."\n".
++		'</html>';
++	}
++
++	// =======================================================
++}
+diff -Naur ../mythweb-orig/modules/gallery/includes/objects/Settings.php ./modules/gallery/includes/objects/Settings.php
+--- ../mythweb-orig/modules/gallery/includes/objects/Settings.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/includes/objects/Settings.php	2007-08-20 22:28:02.000000000 -0400
+@@ -0,0 +1,243 @@
++<?php
++/**
++ * Gallery Settings Functions
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/set_prefs.php $
++ * @date        $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version     $Revision: 12295 $
++ * @author      $Author: xris $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ * @subpackage  Gallery
++/**/
++
++// Load the available configuration from the session variable 
++// or if this one is empty then form the database 
++function loadGalleryConfig()
++{
++	$_SESSION['gallery']['image_path'] = getGalleryImagePath();
++	$_SESSION['gallery']['cache_path'] = getGalleryCachePath();
++	$_SESSION['gallery']['default_viewsize'] = getGalleryDefaultViewSize();
++	$_SESSION['gallery']['screen_width'] = getGalleryScreenWidth();
++	$_SESSION['gallery']['viewsizes'] = getGalleryViewSizes();
++	$_SESSION['gallery']['valid_image_files'] = getGalleryValidImageFiles();
++}
++
++
++// Load all of the known mythtv frontend hosts
++function getGalleryHostnames()
++{	
++	$Settings_Hosts = array('' => t('MythWeb Session'));
++	global $db;
++	$sh = $db->query('SELECT DISTINCT hostname FROM settings WHERE value="locale" ORDER BY hostname');
++	
++	// add all the found hosts into an array 
++	while (list($host) = $sh->fetch_row()) 
++	{
++		if (empty($host)) 
++			continue;
++		$Settings_Hosts[$host] = $host;
++	}
++	$sh->finish();
++	return $Settings_Hosts;
++}
++
++
++// update the values in the database if necessary
++function saveGalleryConfig( $Settings_Hosts )
++{
++	// Make sure we have a valid host selected
++	if (!isset( $Settings_Hosts[$_SESSION['settings']['host']]) ) 
++	{
++		// we have no valid host, reset the array 
++		$_SESSION['settings']['host'] = reset(array_keys($Settings_Hosts));
++	} else {
++		// we have a valid host, check if the data should be saved 
++		if ($_POST['save'] && isset($_POST['host'])) 
++		{
++			// Changing settings for this MythWeb session
++			if (empty($_POST['host'])) 
++			{
++				// save the image path in the session variable
++				$_SESSION['gallery']['image_path'] 			= $_POST['image_path'];
++				$_SESSION['gallery']['cache_path'] 			= $_POST['cache_path'];
++				$_SESSION['gallery']['default_viewsize'] 	= $_POST['default_viewsize'];
++				$_SESSION['gallery']['screen_width'] 		= $_POST['screen_width'];
++				$_SESSION['gallery']['viewsizes'] 			= $_POST['viewsizes'];
++				$_SESSION['gallery']['valid_image_files'] 	= $_POST['valid_image_files'];
++			} else {
++				// save the settings in the database
++//				setGalleryImagePath( 		$_POST['image_path'], 		$_POST['host'] );
++				setGalleryCachePath( 		$_POST['cache_path'], 		$_POST['host'] );
++				setGalleryDefaultViewSize( 	$_POST['default_viewsize'], $_POST['host'] );
++				setGalleryScreenWidth( 		$_POST['screen_width'], 	$_POST['host'] );
++				setGalleryViewSizes( 		$_POST['viewsizes'], 		$_POST['host'] );
++				setGalleryValidImageFiles( 	$_POST['valid_image_files'],$_POST['host'] );
++			}
++			// Make sure the session host gets updated to the posted one.
++			$_SESSION['settings']['host'] = $_POST['host'];
++		}
++	}
++}
++
++// the absolute path where the images are
++// get it from the database or the session variable 
++function getGalleryImagePath()
++{
++	global $db;
++	if (!empty($_SESSION['settings']['host'])) {		
++		$imagePath = $db->query_col('SELECT data FROM settings 
++			WHERE value="GalleryDir" AND hostname=?', $_SESSION['settings']['host']);
++	} 
++	
++	if (!$imagePath)
++	{
++		$imagePath = _or($_SESSION['gallery']['image_path'], '/myth/gallery');
++	}
++	
++	return $imagePath;
++}
++
++// directory where the cached images are stored
++// this directory is relative to the htdocs directory
++function getGalleryCachePath()
++{
++	global $db;
++	if (!empty($_SESSION['settings']['host'])) {
++ 		$cachePath = $db->query_col('SELECT data FROM settings 
++ 			WHERE value="GalleryCachePath" AND hostname=?', $_SESSION['settings']['host']);
++        }
++        
++        if (!$cachePath)
++        {	
++		$cachePath = _or($_SESSION['gallery']['cache_path'], '/mythweb/data/cache');
++	} 
++	
++	return $cachePath;
++}
++
++
++// defines the default view mode
++// default is 4 columns and 4 rows per page
++function getGalleryDefaultViewSize()
++{
++	global $db;
++	if (!empty($_SESSION['settings']['host'])) {
++		$defaultViewSize = $db->query_col('SELECT data FROM settings 
++ 			WHERE value="GalleryDefaultViewSize" AND hostname=?', $_SESSION['settings']['host']);
++ 	}
++ 	
++ 	if (!$defaultViewSize)
++ 	{
++		$defaultViewSize = _or($_SESSION['gallery']['default_viewsize'], '4,3');
++	} 
++	
++	return $defaultViewSize;
++}
++
++
++// width if the screen-200 (example 1024-200)
++// this is needed to calculate the width of the images
++function getGalleryScreenWidth()
++{
++	global $db;
++	if (!empty($_SESSION['settings']['host'])) {
++ 		$screenWidth = $db->query_col('SELECT data FROM settings 
++ 			WHERE value="GalleryScreenWidth" AND hostname=?', $_SESSION['settings']['host']);
++	}
++	
++	if (!$screenWidth)
++	{	
++		$screenWidth = _or($_SESSION['gallery']['screen_width'], '1024');
++	} 
++	
++	return $screenWidth;
++}
++
++
++// columns and rows that are shown on one page, ; separates another mode
++function getGalleryViewSizes()
++{
++	global $db;
++	if (!empty($_SESSION['settings']['host'])) {
++ 		$viewSizes = $db->query_col('SELECT data FROM settings 
++ 			WHERE value="GalleryViewSizes" AND hostname=?', $_SESSION['settings']['host']);
++        }
++        
++        if (!$viewSizes)
++        {	
++		$viewSizes = _or($_SESSION['gallery']['viewsizes'], '5,4 ; 4,4 ; 4,3 ; 3,3 ; 2,2 ; 1,1');
++	} 
++	
++	return $viewSizes;
++}
++
++
++// image extensions that will be shown, everything else
++// will not work, currently there four are supported
++function getGalleryValidImageFiles()
++{
++	global $db;
++	if (!empty($_SESSION['settings']['host'])) {
++ 		$validImageFiles = $db->query_col('SELECT data FROM settings 
++ 			WHERE value="GalleryValidImageFiles" AND hostname=?', $_SESSION['settings']['host']);
++        }
++        
++        if (!$validImageFiles)
++        {	
++		$validImageFiles = _or($_SESSION['gallery']['valid_image_files'], 'jpg,png,gif,bmp');
++	} 
++	
++	return $validImageFiles;
++}
++
++
++// save the image path in the database 
++//function setGalleryImagePath( $imagePath, $host ) 
++//{
++//	global $db;
++//	$db->query('UPDATE settings SET data = ?
++//		WHERE value="GalleryDir" AND hostname=?', $imagePath, $host);
++//}
++
++function setGalleryCachePath( $cachePath, $host )
++{
++ 	global $db;
++ 	$db->query('UPDATE settings SET data = ?
++ 		WHERE value="GalleryCachePath" AND hostname=?', $cachePath, $host);
++}
++
++
++function setGalleryDefaultViewSize( $defaultViewSize, $host )
++{
++ 	global $db;
++ 	$db->query('UPDATE settings SET data = ?
++ 		WHERE value="GalleryDefaultViewSize" AND hostname=?', $defaultViewSize, $host);
++}
++
++
++function setGalleryScreenWidth( $screenWidth, $host )
++{
++ 	global $db;
++ 	$db->query('UPDATE settings SET data = ?
++ 		WHERE value="GalleryScreenWidth" AND hostname=?', $screenWidth, $host);
++}
++
++
++function setGalleryViewSizes( $viewSizes, $host )
++{
++ 	global $db;
++ 	$db->query('UPDATE settings SET data = ?
++ 		WHERE value="GalleryViewSizes" AND hostname=?', $viewSizes, $host);
++}
++
++
++function setGalleryValidImageFiles( $validImageFiles, $host )
++{
++ 	global $db;
++ 	$db->query('UPDATE settings SET data = ?
++ 		WHERE value="GalleryValidImageFiles" AND hostname=?', $validImageFiles, $host);
++}
++
++
+diff -Naur ../mythweb-orig/modules/gallery/init.php ./modules/gallery/init.php
+--- ../mythweb-orig/modules/gallery/init.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/init.php	2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,38 @@
++<?php
++/**
++ * Initialization routines for the MythWeb Gallery module
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/init.php $
++ * @date        $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version     $Revision: 12295 $
++ * @author      $Author: rsiebert $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ * @subpackage  Gallery
++ *
++/**/
++
++// Settings options
++    $Settings['gallery'] = array('name'    => t('Gallery'),
++                                 'choices' => array('prefs'  => t('Preferences'), ),
++                                 'default' => 'prefs',
++                                );
++
++// First, we should check to see that MythGallery is configured.
++    $has_gallery = $_SESSION['locale']
++                    ? true
++                    : $db->query_col('SELECT COUNT(data)
++                                        FROM settings
++                                       WHERE value="locale"');
++
++
++
++// If gallery is enabled, add it to the list.
++    if ($has_gallery) {
++        $Modules['gallery'] = array('path'        => 'gallery',
++                                    'sort'        => 5,
++                                    'name'        => t('Gallery'),
++                                    'description' => t('Local Image Gallery')
++                                   );
++    }
+diff -Naur ../mythweb-orig/modules/gallery/set_prefs.php ./modules/gallery/set_prefs.php
+--- ../mythweb-orig/modules/gallery/set_prefs.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/set_prefs.php	2007-08-20 22:29:12.000000000 -0400
+@@ -0,0 +1,24 @@
++<?php
++/**
++ * Gallery settings
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/set_prefs.php $
++ * @date        $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version     $Revision: 12295 $
++ * @author      $Author: xris $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ * @subpackage  Gallery
++/**/
++
++// Load functions
++require_once 'includes/objects/Settings.php';
++
++// Load all of the known mythtv frontend hosts
++$Settings_Hosts = getGalleryHostnames();
++
++// update the values in the database if necessary
++saveGalleryConfig( $Settings_Hosts );
++loadGalleryConfig();
++
+diff -Naur ../mythweb-orig/modules/gallery/tmpl/default/gallery.php ./modules/gallery/tmpl/default/gallery.php
+--- ../mythweb-orig/modules/gallery/tmpl/default/gallery.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/tmpl/default/gallery.php	2007-08-22 00:21:05.000000000 -0400
+@@ -0,0 +1,39 @@
++<?php
++/**
++ * Display template for the Gallery module
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/gallery.php $
++ * @date        $Date: 2006-12-19 09:17:33 +0100 (Di, 19 Dez 2006) $
++ * @version     $Revision: 12295 $
++ * @author      $Author: xris $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ *
++/**/
++
++// Page title
++$page_title = 'MythWeb - '.t('Gallery');
++
++// the current viewsize mode
++$image_viewsize = $gallery->getImageViewSize();
++
++// If displaying full size image don't display header and footer
++if ($image_viewsize == 'fullsize') {
++   // Print the gallery part 
++   $gallery->start();
++}
++else
++{
++   // Load this page's custom stylesheet
++   $headers[] = '<link rel="stylesheet" type="text/css" href="'.root.skin_dir.'/gallery.css" />';
++
++   // Print the page header
++   require 'modules/_shared/tmpl/'.tmpl.'/header.php';
++
++   // Print the gallery part 
++   $gallery->start();
++
++   // Print the page footer
++   require 'modules/_shared/tmpl/'.tmpl.'/footer.php';
++}
+\ No newline at end of file
+diff -Naur ../mythweb-orig/modules/gallery/tmpl/default/set_prefs.php ./modules/gallery/tmpl/default/set_prefs.php
+--- ../mythweb-orig/modules/gallery/tmpl/default/set_prefs.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/tmpl/default/set_prefs.php	2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,93 @@
++<?php
++/**
++ * Display/save MythGallery settings
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/set_prefs.php $
++ * @date        $Date: 2007-01-09 07:37:34 +0100 (Di, 09 Jan 2007) $
++ * @version     $Revision: 12460 $
++ * @author      $Author: xris $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ * @subpackage  Gallery
++ *
++/**/
++
++// Display the gui for the settings
++$galleryConfigTheme = new GalleryConfigTheme();
++$galleryConfigTheme->showConfig();
++
++class GalleryConfigTheme
++{
++	function GalleryConfigTheme()
++	{
++		
++	}
++
++	function showConfig() 
++	{
++		echo '<form class="form" method="post" action="'. form_action .'">'.
++			'<input type="hidden" name="host" value="'. html_entities($_SESSION['settings']['host']) .'"/>'.
++			'<table border="0" cellspacing="0" cellpadding="0">'.
++				'<tr class="_sep">'.
++    				'<td>'.
++						t('Gallery image path').':&nbsp;'.
++					'</td>'.
++		    		'<td>'.
++						'<input class="_text" type="text" name="image_path" value="'.getGalleryImagePath().'">'.
++					'</td>'.
++				'</tr>'.
++				'<tr class="_sep">'.
++    				'<td>'.
++						t('Path where the thumbnails are').':&nbsp;'.
++					'</td>'.
++		    		'<td>'.
++						'<input class="_text" type="text" name="cache_path" value="'.getGalleryCachePath().'">'.
++					'</td>'.
++				'</tr>'.
++				'<tr class="_sep">'.
++    				'<td>'.
++						t('Default view size').':&nbsp;'.
++					'</td>'.
++		    		'<td>'.
++						'<input class="_text" type="text" name="default_viewsize" value="'.getGalleryDefaultViewSize().'">'.
++					'</td>'.
++				'</tr>'.
++				'<tr class="_sep">'.
++    				'<td>'.
++						t('Horizontal screen resolution').':&nbsp;'.
++					'</td>'.
++		    		'<td>'.
++						'<input class="_text" type="text" name="screen_width" value="'.getGalleryScreenWidth().'">'.
++					'</td>'.
++				'</tr>'.
++				'<tr class="_sep">'.
++    				'<td>'.
++						t('List of available view sizes').':&nbsp;'.
++					'</td>'.
++		    		'<td>'.
++						'<input class="_text" type="text" name="viewsizes" value="'.getGalleryViewSizes().'">'.
++					'</td>'.
++				'</tr>'.
++				'<tr class="_sep">'.
++    				'<td>'.
++						t('List of allowed image formats').':&nbsp;'.
++					'</td>'.
++		    		'<td>'.
++						'<input class="_text" type="text" name="valid_image_files" value="'.getGalleryValidImageFiles().'">'.
++					'</td>'.
++				'</tr>'.
++				'<tr>'.
++					'<td align="center">'.
++						'<input class="_button" type="reset" class="submit" value="'.t('Reset').'">'.
++					'</td>'.
++					'<td align="center">'.
++						'<input class="_button" type="submit" class="submit" name="save" value="'.t('Save') .'">'.
++					'</td>'.
++				'</tr>'.
++			'</table>'.
++		'</form>';
++	}
++}
++
++?>
+\ No newline at end of file
+diff -Naur ../mythweb-orig/modules/gallery/tmpl/default/welcome.php ./modules/gallery/tmpl/default/welcome.php
+--- ../mythweb-orig/modules/gallery/tmpl/default/welcome.php	1969-12-31 19:00:00.000000000 -0500
++++ ./modules/gallery/tmpl/default/welcome.php	2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,26 @@
++<?php
++/**
++ * Welcome page description of the Gallery module.
++ *
++ * @url         $URL: http://svn.mythtv.org/svn/trunk/mythplugins/mythweb/modules/gallery/tmpl/default/welcome.php $
++ * @date        $Date: 2005-12-13 08:23:18 +0100 (Di, 13 Dez 2005) $
++ * @version     $Revision: 8252 $
++ * @author      $Author: xris $
++ * @license     GPL
++ *
++ * @package     MythWeb
++ *
++/**/
++
++// Open with a div and an image
++    echo '<div id="info_gallery" class="hidden">',
++         '<img src="', skin_url, '/img/gallery.png" class="module_icon" />',
++
++// Print a basic overview of what this module does
++         t('welcome: gallery'),
++
++// Next, print a list of possible subsectons
++    ####
++
++// Close the div
++         "</div>\n";
+\ No newline at end of file
+diff -Naur ../mythweb-orig/modules/_shared/lang/English.lang ./modules/_shared/lang/English.lang
+--- ../mythweb-orig/modules/_shared/lang/English.lang	2007-08-19 23:20:01.000000000 -0400
++++ ./modules/_shared/lang/English.lang	2007-08-19 23:26:41.000000000 -0400
+@@ -153,6 +153,7 @@
+ "Create Schedule"
+ "Current Conditions"
+ "Current recordings"
++"Current path"
+ "Currently Browsing:  $1"
+ "Currently Recording:  Edit"
+ "Custom"
+@@ -164,6 +165,7 @@
+ "Deactivated"
+ "Default"
+ "Default MythVideo View"
++"Default view size"
+ "Delete"
+ "delete"
+ "Delete $1"
+@@ -242,6 +244,8 @@
+ "freqid"
+ "Friday"
+ "Frontends"
++"Gallery"
++"Gallery image path"
+ "generic_date"
+     %a %b %e, %Y
+ "generic_time"
+@@ -269,6 +273,7 @@
+ "Hide"
+ "High"
+ "Home"
++"Horizontal screen resolution"
+ "Host"
+ "Hosted by"
+ "Hosts"
+@@ -276,6 +281,7 @@
+ "Hour Format"
+ "hue"
+ "Humidity"
++"Images per page"
+ "IMDB"
+ "imdb rating"
+ "IMDBTYPE"
+@@ -318,6 +324,8 @@
+ "length"
+ "Length"
+ "Length (min)"
++"List of allowed image formats"
++"List of available view sizes"
+ "Listing &quot;Jump to&quot;"
+ "Listing Time Key"
+ "Listings"
+@@ -367,6 +375,7 @@
+ "mythvideo.sort_ignores_case"
+ "MythWeb"
+ "MythWeb Defaults"
++"MythWeb Gallery."
+ "MythWeb Global Defaults"
+ "MythWeb Session"
+ "MythWeb session settings"
+@@ -401,6 +410,7 @@
+ "Number of shows"
+ "Number of Songs"
+ "Number of timeslots"
++"of"
+ "Only display favourite channels"
+ "Only match commercial-free channels"
+ "Only match HD programs"
+@@ -415,6 +425,7 @@
+ "Past Month"
+ "Past Week"
+ "Past Year"
++"Path where the thumbnails are"
+ "Paused"
+ "Pending"
+ "People"
+@@ -673,6 +684,7 @@
+ "Subtitles Available"
+ "Sunday"
+ "Surround Sound"
++"Switch view mode"
+ "Tab"
+ "The requested recording schedule has been deleted."
+ "There are no items in this Playlist!"
+@@ -690,6 +702,7 @@
+ "Title Match"
+ "Title search"
+ "Title Search"
++"to"
+ "Today"
+ "Tomorrow"
+ "Too Many"
+@@ -784,6 +797,8 @@
+ "Wednesday"
+ "welcome: backend_log"
+     Show the server logs.
++"welcome: gallery"
++	Browse your picture collection.
+ "welcome: music"
+     Browse your music collection.
+ "welcome: remote"
+diff -Naur ../mythweb-orig/modules/_shared/lang/German.lang ./modules/_shared/lang/German.lang
+--- ../mythweb-orig/modules/_shared/lang/German.lang	2007-08-19 23:20:01.000000000 -0400
++++ ./modules/_shared/lang/German.lang	2007-08-19 23:27:54.000000000 -0400
+@@ -209,6 +209,8 @@
+ "Create a Random Mix"
+ "Create Schedule"
+     Speichern
++"Current path"
++    Aktueller Pfad
+ "Current Conditions"
+     Das aktuelle Wetter
+ "Current recordings"
+@@ -231,6 +233,8 @@
+ "Default"
+     Standard
+ "Default MythVideo View"
++"Default view size"
++	Standardansicht
+ "Delete"
+     Löschen
+ "delete"
+@@ -343,6 +347,10 @@
+ "Friday"
+     Freitag
+ "Frontends"
++"Gallery"
++	Gallerie
++"Gallery image path"
++	Pfad der Bilder
+ "generic_date"
+     %e.%m.%Y
+ "generic_time"
+@@ -379,6 +387,8 @@
+ "High"
+     Max
+ "Home"
++"Horizontal screen resolution"
++	Horizontale Bildschirmauflösung
+ "Host"
+ "Hosted by"
+ "Hosts"
+@@ -390,6 +400,8 @@
+     Farbton
+ "Humidity"
+     Luftfeuchtigkeit
++"Images per page"
++	Bilder pro Seite
+ "IMDB"
+     IMDB
+ "imdb rating"
+@@ -438,6 +450,10 @@
+     Dauer
+ "Length (min)"
+     Dauer (Min.)
++"List of allowed image formats"
++	Liste der erlaubten Bildformate
++"List of available view sizes"
++	Liste der möglichen Ansichten
+ "Listing &quot;Jump to&quot;"
+     TV Programm &quot;Gehe zu&quot;
+ "Listing Time Key"
+@@ -502,6 +518,8 @@
+ "mythvideo.sort_ignores_case"
+ "MythWeb"
+ "MythWeb Defaults"
++"MythWeb Gallery."
++     Gallerie
+ "MythWeb Global Defaults"
+ "MythWeb Session"
+ "MythWeb session settings"
+@@ -548,6 +566,8 @@
+ "Number of shows"
+ "Number of Songs"
+ "Number of timeslots"
++"of"
++	von
+ "Only display favourite channels"
+     Nur Favoriten anzeigen
+ "Only match commercial-free channels"
+@@ -562,6 +582,8 @@
+ "Override"
+ "Page Down"
+ "Page Up"
++"Path where the thumbnails are"
++	Thumbnails speichern unter
+ "Part $1 of $2"
+     Teil $1 von $2
+ "Past Month"
+@@ -870,6 +892,10 @@
+ "Streaming"
+ "Sub and Desc (Empty matches)"
+     Untertitel & Beschr. (kein Ergebnis)
++"subfolder"
++	Unterordner
++"subfolders"
++	Unterordner
+ "Submit Search"
+ "subtitle"
+ "Subtitle"
+@@ -882,6 +908,8 @@
+ "Subtitles Available"
+ "Sunday"
+     Sonntag
++"Switch view mode"
++    Ansichtsmodus wechseln
+ "Surround Sound"
+ "Tab"
+ "The requested recording schedule has been deleted."
+@@ -907,6 +935,8 @@
+ "Title search"
+ "Title Search"
+     Titel Suche
++"to"
++	bis
+ "Today"
+     Heute
+ "Tomorrow"
+@@ -1024,6 +1054,8 @@
+     Mittwoch
+ "welcome: backend_log"
+     Backend Log
++"welcome: gallery"
++	Gallerie
+ "welcome: music"
+     Musik
+ "welcome: remote"
+diff -Naur ../mythweb-orig/modules/_shared/tmpl/default/header.php ./modules/_shared/tmpl/default/header.php
+--- ../mythweb-orig/modules/_shared/tmpl/default/header.php	2007-08-19 23:20:01.000000000 -0400
++++ ./modules/_shared/tmpl/default/header.php	2007-08-19 23:21:33.000000000 -0400
+@@ -96,6 +96,13 @@
+         </a>
+ <?php
+       }
++      if ($Modules['gallery']) {
++?>
++        <a id="gallery_link"<?php if ($Path[0] == 'gallery') echo ' class="current_section"' ?> href="<?php echo root ?>gallery" onmouseover="return help_text('<?php echo str_replace("'", "\\'", t('MythWeb Gallery.')) ?>')" onmouseout="return help_text()">
++            <img src="<?php echo skin_url ?>img/gallery.png" width="48" height="48" class="alpha_png" alt="MythGallery" />
++        </a>
++<?php
++      }
+ ?>
+         <a id="settings_link"<?php if ($Path[0] == 'settings') echo ' class="current_section"' ?> href="<?php echo root ?>settings" onmouseover="return help_text('<?php echo str_replace("'", "\\'", t('Edit MythWeb and some MythTV settings.')) ?>')" onmouseout="return help_text()">
+             <img src="<?php echo skin_url ?>img/settings.png" width="48" height="48" class="alpha_png" alt="<?php echo t('Settings') ?>" />
+diff -Naur ../mythweb-orig/skins/default/gallery.css ./skins/default/gallery.css
+--- ../mythweb-orig/skins/default/gallery.css	1969-12-31 19:00:00.000000000 -0500
++++ ./skins/default/gallery.css	2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,108 @@
++img {
++	border: 0px;
++	border-color: #000000;
++}
++
++table.current_path_and_viewsize {
++	margin-top:5px;
++	border:1px solid #626262;
++	padding:5px;
++	width:100%;	
++}
++
++a {
++	color:#000000; 
++	text-decoration:none;
++}
++
++a.header {
++	font-weight:bold;
++	font-style:italic;
++}
++
++a.folderlist {
++	font-style:italic;
++}
++
++td.current_path {
++	text-align:left;
++	width:auto;
++}
++
++td.change_viewsize_text {
++	text-align:right;
++	width:160px;
++}
++
++td.change_viewsize_selection {
++	text-align:right;
++	width:140px;
++}
++
++select.change_viewsize {
++	border:1px solid #323232;
++	background-color: #191c26;
++	color: #FFFFFF;
++}
++
++td.folder_navigation {
++	width:200px;
++	vertical-align:top;
++}
++
++table.folder_navigation {
++	margin-top:5px;
++	border:1px solid #626262;
++	padding:4px;
++	width:100%;	
++}
++
++div.folder_navigation_active {
++	background-color: #224477;
++	border:1px solid #191c26;
++	text-align:left;	
++	padding:4px;
++}
++
++div.folder_navigation {	
++	border:1px solid #191c26;
++	text-align:left;	
++	padding:4px;
++}
++
++td.image_listing {
++	width:auto;
++	vertical-align:top;
++}
++
++table.imagelist_and_navigation {
++	margin-top:5px;
++	margin-left:5px;
++	border:1px solid #626262;
++	padding:5px;
++	width:100%;	
++}
++
++td.image_navigation {
++	text-align:center;
++	vertical-align:middle;
++	width:20%;
++	border-width: 0px;
++}
++
++td.single_image {
++	font-size:9pt;
++	padding:5px;	
++	text-align:center;
++}
++
++img.single_image {
++	padding:7px;
++	border:1px solid #323232;
++}
++
++img.single_image_active {
++	background-color: #224477;
++	padding:7px;
++	border:1px solid #323232;
++}
+\ No newline at end of file
+diff -Naur ../mythweb-orig/skins/grey/gallery.css ./skins/grey/gallery.css
+--- ../mythweb-orig/skins/grey/gallery.css	1969-12-31 19:00:00.000000000 -0500
++++ ./skins/grey/gallery.css	2007-08-19 23:21:33.000000000 -0400
+@@ -0,0 +1,107 @@
++img {
++	border: 0px;
++	border-color: #000000;
++}
++
++table.current_path_and_viewsize {
++	margin-top:5px;
++	border:1px solid #626262;
++	padding:5px;
++	width:100%;	
++}
++
++a {
++	color:#000000; 
++	text-decoration:none;
++}
++
++a.header {
++	font-weight:bold;
++	font-style:italic;
++}
++
++a.folderlist {
++	font-style:italic;
++}
++
++td.current_path {
++	text-align:left;
++	width:auto;
++}
++
++td.change_viewsize_text {
++	text-align:right;
++	width:160px;
++}
++
++td.change_viewsize_selection {
++	text-align:right;
++	width:140px;
++}
++
++select.change_viewsize {
++	border:1px solid #323232;
++	background-color: #212121;
++}
++
++td.folder_navigation {
++	width:200px;
++	vertical-align:top;
++}
++
++table.folder_navigation {
++	margin-top:5px;
++	border:1px solid #626262;
++	padding:4px;
++	width:100%;	
++}
++
++div.folder_navigation_active {
++	background-color: #626262;
++	border:1px solid #212121;
++	text-align:left;	
++	padding:4px;
++}
++
++div.folder_navigation {	
++	border:1px solid #212121;
++	text-align:left;	
++	padding:4px;
++}
++
++td.image_listing {
++	width:auto;
++	vertical-align:top;
++}
++
++table.imagelist_and_navigation {
++	margin-top:5px;
++	margin-left:5px;
++	border:1px solid #626262;
++	padding:5px;
++	width:100%;	
++}
++
++td.image_navigation {
++	text-align:center;
++	vertical-align:middle;
++	width:20%;
++	border-width: 0px;
++}
++
++td.single_image {
++	font-size:9pt;
++	padding:5px;	
++	text-align:center;
++}
++
++img.single_image {
++	padding:7px;
++	border:1px solid #323232;
++}
++
++img.single_image_active {
++	background-color: #626262;
++	padding:7px;
++	border:1px solid #323232;
++}
+\ No newline at end of file
+diff -Naur ../mythweb-orig/skins/grey/settings.css ./skins/grey/settings.css
+--- ../mythweb-orig/skins/grey/settings.css	2007-08-19 23:20:00.000000000 -0400
++++ ./skins/grey/settings.css	2007-08-19 23:21:33.000000000 -0400
+@@ -94,7 +94,7 @@
+ 
+     #settings .-host {
+         text-align:     right;
+-        border-bottom:  2px solid #eee;
++        border-bottom:  2px solid #aaa;
+     }
+ 
+ /* A notification/warning */
+@@ -115,3 +115,33 @@
+         border:             2px solid #999;
+         border-top:         none;
+     }
++
++	#settings ._content input._text {
++		margin:				2px;
++		padding:			2px;
++		border:             1px solid #333333;
++	}
++
++	#settings ._content input._button {
++		margin:				2px;
++		padding:			2px;
++		border:             1px solid #333333;
++		color:				#DDDDDD;
++	}
++
++    #settings ._content table {
++        width:              100%;
++    }
++    #settings ._content table th, #settings ._content table td {
++        padding:            .5em;
++    }
++
++    #settings ._content th, #settings ._content td {
++        text-align:         right;
++        font-weight:        normal;
++        white-space:        nowrap;
++    }
++
++    #settings ._content tr._sep th, #settings ._content tr._sep td {
++        border-bottom:      1px solid #304943;
++    }
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch b/abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch
new file mode 100644
index 0000000..c1aeb6c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythweb/transcoders.patch
@@ -0,0 +1,23 @@
+diff -ruaN mythweb.orig/modules/_shared/lang/English.lang mythweb/modules/_shared/lang/English.lang
+--- mythweb.orig/modules/_shared/lang/English.lang	2009-01-09 02:44:23.000000000 +0000
++++ mythweb/modules/_shared/lang/English.lang	2009-07-31 06:29:11.000000000 +0000
+@@ -816,3 +816,5 @@
+ "Year"
+ "Yes"
+ "Yesterday"
++"Myth2iPod"
++"Myt2XviD3"
+diff -ruaN mythweb.orig/modules/_shared/tmpl/default/header.php mythweb/modules/_shared/tmpl/default/header.php
+--- mythweb.orig/modules/_shared/tmpl/default/header.php	2009-01-09 02:44:23.000000000 +0000
++++ mythweb/modules/_shared/tmpl/default/header.php	2009-07-31 06:28:54.000000000 +0000
+@@ -171,6 +171,10 @@
+                     <a href="<?php echo root ?>tv/recorded"><?php echo t('Recorded Programs') ?></a>
+                     &nbsp; | &nbsp;
+                     <a href="<?php echo root ?>status"><?php echo t('Backend Status') ?></a>
++                    &nbsp; | &nbsp;
++                    <a href="/ipodfeed/m2iweb.php"><?php echo t('Myth2iPod') ?></a>
++                    &nbsp; | &nbsp;
++                    <a href="/archive/archive.php"><?php echo t('Myt2XviD3') ?></a>
+ <?php if ($Modules['backend_log']) { ?>
+                     &nbsp; | &nbsp;
+                     <a href="<?php echo root ?>backend_log"><?php echo t('Backend Logs') ?></a>
diff --git a/abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2 b/abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2
new file mode 100644
index 0000000..200b8c3
Binary files /dev/null and b/abs/core/mythtv/old/stable-0.21/mythweb/wiiweb.tar.bz2 differ
diff --git a/abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD b/abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD
new file mode 100644
index 0000000..45e0bac
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.21/mythzoneminder/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Juergen Hoetzel <juergen@archlinux.org> 
+# Contributor: kleptophobiac@gmail.com
+
+pkgname=mythzoneminder
+pkgver=0.21
+pkgrel=4
+pkgdesc="Integrates ZoneMinder into MythTV"
+arch=('i686' 'x86_64')
+url="http://www.mythtv.org"
+license=('GPL')
+depends=("mythtv>=${pkgver}" 'zoneminder=1.23.3')
+source=("ftp://ftp.knoppmyth.net/R6/sources/mythplugins-$pkgver-fixes.tar.bz2")
+md5sums=('1b3e2a97b7ecf7373e162fe20b6faabe')
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythplugins
+   . /etc/profile.d/qt3.sh
+
+   # use QT3 qmake
+   export PATH=$QTDIR/bin:$PATH
+
+   ./configure --prefix=/usr --enable-opengl --disable-all --enable-mythzoneminder --zm-version=1.23.3
+ 
+   qmake mythplugins.pro
+   make qmake || return 1
+   make -j 2 || return 1
+
+   make INSTALL_ROOT=$startdir/pkg install
+}
+
diff --git a/abs/core/mythtv/old/stable-0.22/clean_all.sh b/abs/core/mythtv/old/stable-0.22/clean_all.sh
new file mode 100755
index 0000000..1ebdc43
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/clean_all.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# clean up current directory
+rm -f *~
+
+# clean up mythtv directories
+for i in `echo ${buildlist[@]:0}`
+do
+	echo "-- cleaning $i"
+	cd ./$i
+
+	# clean up everything
+	rm -rf pkg src
+	rm -f *~
+
+	cd ..
+done
+
+echo "DONE!"
+
diff --git a/abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD b/abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD
new file mode 100644
index 0000000..479f886
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/morethemes/PKGBUILD
@@ -0,0 +1,51 @@
+pkgname=morethemes
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Additional themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('morethemes-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/themes
+_svnver=23566
+_svnmod=themes
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mp_all.sh b/abs/core/mythtv/old/stable-0.22/mp_all.sh
new file mode 100755
index 0000000..96d5dde
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mp_all.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+# for 0.22, we are starting the release numbers at 22000
+# and incrementing from there every time we build
+pkgrel=22012
+_svnver=23566
+
+# NOTE: Make sure to build and install mythtv first BEFORE building anything else
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# build and install
+for i in `echo ${buildlist[@]:0}`
+do
+	echo "---------- building $i ----------"
+	cd ./$i
+
+	# set svn version in the PKGBUILD
+	sed -i s/^_svnver=.*/_svnver=$_svnver/ PKGBUILD
+	sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
+
+	# make the package
+	mp -f -i -s -r  --holdver || exit 1
+
+	# clean up afterwards
+	rm -rf pkg
+	rm -f *~
+
+	cd ..
+done
+
+echo ""
+echo "DONE!"
+
diff --git a/abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD
new file mode 100644
index 0000000..cc49523
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mytharchive/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mytharchive
+pkgver=0.22
+pkgrel=22012
+pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'libxmu' 'mysql-python' 'pil' 'dvdauthor' 'mjpegtools' 'transcode')
+conflicts=('mytharchive-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mytharchive || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..3508b9f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythbrowser/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythbrowser
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Mini web browser for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'wget')
+conflicts=('mythbrowser-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythbrowser || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD
new file mode 100644
index 0000000..8d5da1e
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythflix/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythflix
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Netflix access plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('mythflix-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythflix || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD
new file mode 100644
index 0000000..d31d645
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythgallery/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythgallery
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Image gallery plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'libexif' 'libtiff')
+conflicts=('mythgallery-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythgallery || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD
new file mode 100644
index 0000000..7441a12
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythgame/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythgame
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Emulation plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'zlib')
+conflicts=('mythgame-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythgame || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD
new file mode 100644
index 0000000..8685a87
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythmovies/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythmovies
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Displays information about movies playing in the area."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('mythmovies-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythmovies || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD
new file mode 100644
index 0000000..4722701
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythmusic/PKGBUILD
@@ -0,0 +1,55 @@
+pkgname=mythmusic
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Music playing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio' \
+         'cdparanoia' 'fftw2' 'sdl' 'faad2>=2.6.1' 'lame' 'taglib' \
+         'libvisual-plugins' 'libvisual-projectm')
+conflicts=('mythmusic-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythmusic --enable-libvisual --enable-fftw --enable-sdl \
+	--enable-aac || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD
new file mode 100644
index 0000000..7450c9d
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythnews/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythnews
+pkgver=0.22
+pkgrel=22012
+pkgdesc="News checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('mythnews-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythnews || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD
new file mode 100644
index 0000000..52549d4
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythsmolt/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=mythsmolt
+pkgver=0.22
+pkgrel=28
+pkgdesc="mythsmolt, a hardware profileing tool"
+arch=('i686' 'x86_64')
+url="http://www.mythvantage.com"
+license=('GPL')
+depends=("mythtv>=${pkgver}" urlgrabber python-simplejson)
+source=("http://www.mythvantage.com/request.php?4" 'smolt_init_login.sh' )
+
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythsmolt
+   ./configure.sh
+   make || return 1
+   make INSTALL_ROOT=$startdir/pkg install
+   install -D -m 755 $srcdir/smolt_init_login.sh $pkgdir/etc/profile.d/smolt_init_login.sh
+}
+md5sums=('4641b425d1aa910d82972ebb3a8d4998'
+         '57a3416d90e59abbd5062436583c17e1')
diff --git a/abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh b/abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh
new file mode 100644
index 0000000..0b76305
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythsmolt/smolt_init_login.sh
@@ -0,0 +1,39 @@
+if [ $UID = 0  -o  $UID = 1000 ]
+then
+    INIT=`ps -p 1 -o comm=`
+    if [ x$INIT = xrunit ]
+    then
+        if [[ -f /home/mythtv/.configure  &&  $- = *i* ]]
+        then
+            if  [ ! -z "$PS1" ]
+            then
+                if  [ $0 = "-bash" ]
+                then
+                    if [ ! -e /home/mythtv/.mythtv/MythSmolt/hw-uuid ]
+                    then
+                        echo ""
+                        echo "####################################################"
+                        echo "It appears you have not yet run smolt"
+                        echo "Please take the time to submit your hardware profile"
+                        echo ""
+                        echo "press any key to continue:"
+                        echo "####################################################"
+                        read a
+                        mkdir -p /home/mythtv/.mythtv/MythSmolt
+                        chown -R mythtv:users /home/mythtv/.mythtv/MythSmolt
+
+                        if [ $UID = 0 ]
+                        then
+                            su   mythtv -c "/usr/share/mythtv/mythsmolt/scripts/sendProfile.py" &&   su mythtv -c "touch  /home/mythtv/.mythtv/MythSmolt/hw-uuid"
+                        else
+                            /usr/share/mythtv/mythsmolt/scripts/sendProfile.py &&  touch  /home/mythtv/.mythtv/MythSmolt/hw-uuid
+                        fi
+                    fi
+                fi
+            fi
+        fi
+    fi
+fi
+
+
+
diff --git a/abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD b/abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD
new file mode 100755
index 0000000..72b913a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/myththemes/PKGBUILD
@@ -0,0 +1,54 @@
+pkgname=myththemes
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv')
+conflicts=('myththemes-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/myththemes
+_svnver=23566
+_svnmod=myththemes
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+	
+	# remove what isn't needed
+	rm -fr Mythbuntu
+
+	# configure
+	./configure --prefix=/usr || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD
new file mode 100755
index 0000000..82a9b7c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/PKGBUILD
@@ -0,0 +1,111 @@
+pkgname=mythtv
+pkgver=0.22
+pkgrel=22014
+pkgdesc="A personal video recorder for Linux"
+url="http://www.mythtv.org"
+license="GPL"
+depends=('bash' 'mysql-clients>=5.0' 'qt' 'lame' 'lirc-utils' 'ffmpeg' \
+        'faad2' 'libxv' 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' \
+	'perl-net-upnp' 'libvdpau')
+makedepends=('libgl' 'subversion')
+conflicts=('mythtv-0.21' 'mythtv-svn')
+replaces=()
+groups=('pvr')
+#backup=()
+#options=(!strip)
+#MAKEFLAGS="-j6"
+install='mythtv.install'
+
+patchs=('menutheme_fallback.patch' 'changeset_r23616.patch')
+#patchs=('smolt_jump.patch')
+source=('mythbackend' 'myth.sh' `echo ${patchs[@]:0}` 'mythbackend.lr' 'mythfrontend.lr' 'pretty')
+arch=('i686' 'x86_64')
+#md5sums=()
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythtv
+_svnver=23566
+_svnmod=mythtv
+
+build() {
+
+	# get clean copy from SVN repo
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/mythtv
+
+	# apply patches
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patchs[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+
+	sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$_svnver/" version.pro
+
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up from last build
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --arch=${ARCH} \
+	--enable-vdpau --enable-xvmc --enable-xvmc-pro \
+	--enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
+	--compile-type=release --with-bindings=perl,python \
+	--enable-audio-alsa --disable-audio-jack --disable-audio-arts || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+	# install db schema, scripts and docs
+	install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1
+	install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1
+
+	#cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+	#cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ || return 1
+    rsync -arp --exclude .svn --delete-excluded  docs $startdir/pkg/usr/share/mythtv/ || return 1
+	# install contrib
+    #cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
+    rsync -arp --exclude .svn --delete-excluded  contrib $startdir/pkg/usr/share/mythtv/ || return 1
+
+	# patch the xml LinHES style
+	cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv/themes/defaultmenu/
+	mv $startdir/pkg/usr/share/mythtv/themes/defaultmenu/is.xml $startdir/pkg/usr/share/mythtv/
+	cd $startdir/pkg/usr/share/mythtv/themes/defaultmenu
+	patch -p0 < $startdir/menu-xml/mainmenu.xml.patch || return 1
+	patch -p0 < $startdir/menu-xml/optical_menu.xml.patch || return 1
+	patch -p0 < $startdir/menu-xml/library.xml.patch || return 1
+	patch -p0 < $startdir/menu-xml/util_menu.xml.patch || return 1
+
+	#create new for those that still want live-tv on top
+	mkdir -p $startdir/pkg/usr/share/mythtv/themes/LiveTV
+	cp $startdir/menu-xml/themeinfo.xml-tv $startdir/pkg/usr/share/mythtv/themes/LiveTV/themeinfo.xml
+	cp  $startdir/pkg/usr/share/mythtv/themes/defaultmenu/mainmenu.xml  $startdir/pkg/usr/share/mythtv/themes/LiveTV/
+	cd  $startdir/pkg/usr/share/mythtv/themes/LiveTV/
+	patch -p5 < $startdir/menu-xml/mainmenu.tv.patch || return 1
+	
+
+
+
+
+	# make log dir
+	mkdir -p $startdir/pkg/var/log/mythtv
+	chown 1000.1000 $startdir/pkg/var/log/mythtv
+	mkdir -p $startdir/pkg/etc/logrotate.d
+	cp $startdir/src/*.lr $startdir/pkg/etc/logrotate.d
+	mkdir -p $startdir/pkg/etc/cron.hourly/
+	install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
+}
+md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'
+         '2babd4b8e146a7538d18dcd55695b0be'
+         'aa50bfa75ceceb0bdd5c1e4508690693'
+         '5b21465c2d80a8c1a96fa8f187aeaded'
+         'f735805a80b0d1180dee01f9df1b7004'
+         'f407d6af23e74a49540755420f84fa58'
+         'f944c51c40208fdb3d8e3dd3d8c60bf3')
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch b/abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch
new file mode 100644
index 0000000..2af779a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/changeset_r23616.patch
@@ -0,0 +1,38 @@
+--- bindings/perl/MythTV/Recording.pm.orig	2010-03-23 23:06:08.000000000 +0000
++++ bindings/perl/MythTV/Recording.pm	2010-03-23 23:15:24.000000000 +0000
+@@ -307,12 +307,12 @@
+     # Set the is_mpeg flag
+         $info{'is_mpeg'} = 1;
+     # Grab the info we want from mplayer (go uber-verbose to override --really-quiet)
+-        my $data = `$program -v -v -v -v -nolirc -nojoystick -vo null -ao null -frames 1 -identify '$file' 2>/dev/null`;
++        my $idargs = "-v -v -v -v -nolirc -nojoystick -vo null -ao null -frames 1 -identify";
++        my $data = `$program $idargs '$file' 2>/dev/null`;
+         study $data;
+-        ($info{'video_type'})            = $data =~ m/^VIDEO:\s*(MPEG[12])/m;
++        ($info{'video_type'})            = $data =~ m/^VIDEO:?\s*(MPEG[12]|H264)/m;
+         ($info{'width'})                 = $data =~ m/^ID_VIDEO_WIDTH=0*([1-9]\d*)/m;
+         ($info{'height'})                = $data =~ m/^ID_VIDEO_HEIGHT=0*([1-9]\d*)/m;
+-        ($info{'fps'})                   = $data =~ m/^ID_VIDEO_FPS=0*([1-9]\d*(?:\.\d+)?)/m;
+         ($info{'audio_sample_rate'})     = $data =~ m/^ID_AUDIO_RATE=0*([1-9]\d*)/m;
+         ($info{'audio_bitrate'})         = $data =~ m/^ID_AUDIO_BITRATE=0*([1-9]\d*)/m;
+         ($info{'audio_bits_per_sample'}) = $data =~ m/^AUDIO:.+?ch,\s*[su](8|16)/mi;
+@@ -321,6 +321,19 @@
+         ($info{'aspect'})                = $data =~ m/^ID_VIDEO_ASPECT=0*([1-9]\d*(?:[\.\,]\d+)?)/m;
+         ($info{'audio_type'})            = $data =~ m/^ID_AUDIO_CODEC=0*([1-9]\d*(?:\.\d+)?)/m;
+         ($info{'mpeg_stream_type'})      = $data =~ m/^ID_DEMUXER=(\w+)/mi;
++    # Mplayer can't find the needed details.  Let's try again, forcing the use
++    # of the ffmpeg lavf demuxer 
++        if (!defined($info{'width'})) { 
++            my $altdata = `$program $idargs -demuxer lavf '$file' 2>/dev/null`; 
++            study $altdata; 
++            ($info{'width'})              = $altdata =~ m/^ID_VIDEO_WIDTH=0*([1-9]\d*)/m; 
++            ($info{'height'})             = $altdata =~ m/^ID_VIDEO_HEIGHT=0*([1-9]\d*)/m; 
++            ($info{'audio_bitrate'})      = $altdata =~ m/^ID_AUDIO_BITRATE=0*([1-9]\d*)/m; 
++            ($info{'audio_sample_rate'})  = $altdata =~ m/^ID_AUDIO_RATE=0*([1-9]\d*)/m; 
++            ($info{'audio_channels'})     = $altdata =~ m/^ID_AUDIO_NCH=0*([1-9]\d*)/m; 
++            ($info{'aspect'})             = $altdata =~ m/^ID_VIDEO_ASPECT=0*([1-9]\d*(?:[\.\,]\d+)?)/m; 
++        }
++
+     # Stream type
+         $info{'mpeg_stream_type'} = lc($info{'mpeg_stream_type'});
+         if ($info{'mpeg_stream_type'} && $info{'mpeg_stream_type'} !~ /^mpeg/) {
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml
new file mode 100644
index 0000000..1c6bb06
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -0,0 +1,100 @@
+<mythmenu name="HOST_SETTINGS">
+
+   <button>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>Network Settings</text>
+      <action>EXEC  mythinstall -s network </action>
+   </button>
+
+   <button>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>DDNS Settings</text>
+      <action>EXEC  mythinstall -s ddns </action>
+   </button>
+   <button>
+      <type>MV_SYSTEM_SETUP_MENU</type>
+      <text>System Type</text>
+      <action>EXEC  mythinstall -s hostype </action>
+   </button>
+
+   <button>
+      <type>MV_SCREENSAVER_SETUP_MENU</type>
+      <text>Screensaver Settings</text>
+      <action>EXEC  mythinstall -s screensaver </action>
+   </button>
+
+   <button>
+      <type>MV_IR_SETUP_MENU</type>
+      <text>Remotes</text>
+       <action>EXEC  mythinstall -s ir </action>
+   </button>
+
+   <button>
+      <type>MV_MISC_SETUP_MENU</type>
+      <text>Miscellanous Settings</text>
+      <action>EXEC  mythinstall -s misc </action>
+   </button>
+
+   <button>
+      <type>MV_SOFTWARE_MENU</type>
+      <text>Plugins</text>
+      <action>EXEC  mythinstall -s  plugins </action>
+   </button>
+
+   <button>
+      <type>MV_SOFTWARE_MENU</type>
+      <text>Software</text>
+      <action>EXEC  mythinstall -s  software </action>
+   </button>
+
+   <button>
+      <type>MV_SHUTDOWN_SETUP_MENU</type>
+      <text>Shutdown Settings</text>
+      <action>EXEC  mythinstall -s sleep </action>
+   </button>
+
+   <button>
+      <type>MV_ADVANCED_X_SETUP_MENU</type>
+      <text>Display Settings</text>
+      <action>EXEC  mythinstall -s advancedX</action>
+   </button>
+
+   <button>
+      <type>MV_ADVANCED_SETUP_MENU</type>
+      <text>Advanced Settings</text>
+      <action>EXEC  mythinstall -s advanced</action>
+   </button>
+
+   <button>
+      <type>MV_AUDIO_SETUP_MENU</type>
+      <text>Audio Settings</text>
+       <action>EXEC  mythinstall -s sound </action>
+   </button>
+
+   <button>
+      <type>MV_ACCESS_SETUP_MENU</type>
+      <text>Access Control</text>
+      <action>EXEC  mythinstall -s accesscontrol </action>
+   </button>
+
+   <button>
+      <type>MV_USER_SETUP_MENU</type>
+      <text>User Accounts</text>
+      <action>EXEC  mythinstall -s user </action>
+   </button>
+
+   <button>
+      <type>MV_WEBACCESS_SETUP_MENU</type>
+      <text>Web Security</text>
+      <action>EXEC  mythinstall -s webuser </action>
+   </button>
+
+   <!--
+   <button>
+      <type>SETUP_MENU</type>
+      <text>Settings Profile Manager</text>
+      <action>EXEC  mythinstall -t </action>
+   </button>
+   -->
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml
new file mode 100644
index 0000000..88b7e6b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/is.xml
@@ -0,0 +1,3 @@
+<mythmenu name="Internet Steams">
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch
new file mode 100644
index 0000000..81ea604
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/library.xml.patch
@@ -0,0 +1,12 @@
+--- library.xml.orig	2009-10-16 12:45:44.000000000 +0000
++++ library.xml	2009-10-16 17:21:44.000000000 +0000
+@@ -123,8 +123,7 @@
+         <text lang="HU">Online folyam lejátszása</text>
+         <description></description>
+         <description lang="DE"></description>
+-        <action>PLUGIN mythstream</action>
+-        <depends>mythstream</depends>
++        <action>MENU is.xml</action>
+     </button>
+ 
+     <button>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml
new file mode 100644
index 0000000..ebc848b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/linhes.xml
@@ -0,0 +1,59 @@
+<mythmenu name="LinHES">
+
+    <button>
+        <type>SETUP_GENERAL</type>
+        <text>MythTV Configuration</text>
+        <text lang="IT">Impostazioni</text>
+        <text lang="ES">Configuración</text>
+        <text lang="DE">Zubehör / Konfiguration</text>
+        <text lang="DA">Tilbehør/Indstillinger</text>
+        <text lang="IS">Uppsetning</text>
+        <text lang="NL">Configuratie</text>
+        <text lang="PT">Utensílios</text>
+        <text lang="SV">Verktyg / Inställningar</text>
+        <text lang="JA">設�~Z</text>
+        <text lang="FI">Oheis/Asetukset</text>
+        <text lang="ZH_TW">工�~E�/設�~Z</text>
+        <text lang="SL">Nastavitve</text>
+        <text lang="ET">Utiliidid / sätted</text>
+        <text lang="RU">У�~Bили�~B�~K / �~]а�~A�~B�~@ойки</text>
+        <text lang="AR">تضب�~Jطات</text>
+        <text lang="PL">Narz�~Ydzia / ustawienia</text>
+        <text lang="HE">ע�~Vר�~Y�~] / �~T�~R�~Sר�~Uת</text>
+        <text lang="HU">Eszközök / Beállítások</text>
+        <alttext lang="DE">Verschiedenes</alttext>
+        <alttext lang="SV">Inställningar</alttext>
+        <alttext lang="ET">Sätted</alttext>
+        <alttext lang="RU">�~]а�~A�~B�~@ойки</alttext>
+        <alttext lang="AR">تضب�~Jطات</alttext>
+        <description>Configure MythTV and plugins</description>
+        <description lang="DE">MythTV und Plugins konfigurieren</description>
+        <action>MENU util_menu.xml</action>
+    </button>
+
+   <button>
+     <type>LINHES_SETUP</type>
+     <text>LinHES Configuration</text>
+     <action>MENU HOST_SETTINGS.xml</action>
+   </button>
+
+   <button>
+     <type>BACKUP</type>
+     <text>Backup LinHES</text>
+     <action>MENU mythbackup.xml</action>
+   </button>
+
+   <button>
+     <type>RESTORE</type>
+     <text>Restore LinHES</text>
+     <action>MENU mythrestore.xml</action>
+   </button>
+
+<!--#Check for updates-->
+   <button>
+     <type>UPGRADE</type>
+     <text>Upgrade LinHES</text>
+     <action>MENU update.xml</action>
+   </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch
new file mode 100644
index 0000000..930fc5b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.tv.patch
@@ -0,0 +1,68 @@
+--- usr/share/mythtv/themes/defaultmenu/mainmenu.xml.orig	2010-01-07 04:56:58.000000000 +0000
++++ usr/share/mythtv/themes/defaultmenu/mainmenu.xml	2010-01-07 04:57:35.000000000 +0000
+@@ -2,6 +2,32 @@
+ <mythmenu name="MAIN">
+ 
+     <button>
++        <type>TV_WATCH_TV</type>
++        <text>Watch TV</text>
++        <text lang="IT">Guarda la TV</text>
++        <text lang="ES">Ver la TV</text>
++        <text lang="NL">TV Kijken</text>
++        <text lang="DE">Fernsehen</text>
++        <text lang="DA">Se TV</text>
++        <text lang="IS">Horfa á sjónvarp</text>
++        <text lang="PT">Ver Televisão</text>
++        <text lang="SV">Se på TV</text>
++        <text lang="JA">TV放送</text>
++        <text lang="FI">Katso Televisiota</text>
++        <text lang="ZH_TW">觀看電視</text>
++        <text lang="SL">Glej TV</text>
++        <text lang="ET">Vaata telerit</text>
++        <text lang="RU">Смотреть ТВ</text>
++        <text lang="AR">شاهد التلفاز</text>
++        <text lang="PL">Oglądanie TV</text>
++        <text lang="HE">צפיה בטלויזיה</text>
++        <text lang="HU">TV nézés</text>
++        <description>Watch live television</description>
++        <description lang="DE">Jetzt Fernsehen schauen</description>
++        <action>TV_WATCH_LIVE</action>
++    </button>
++
++    <button>
+         <type>MENU_MEDIA_LIBRARY</type>
+         <text>Media Library</text>
+         <text lang="IT">Multimedia</text>
+@@ -130,32 +156,6 @@
+     </button>
+ 
+     <button>
+-        <type>TV_WATCH_TV</type>
+-        <text>Watch TV</text>
+-        <text lang="IT">Guarda la TV</text>
+-        <text lang="ES">Ver la TV</text>
+-        <text lang="NL">TV Kijken</text>
+-        <text lang="DE">Fernsehen</text>
+-        <text lang="DA">Se TV</text>
+-        <text lang="IS">Horfa á sjónvarp</text>
+-        <text lang="PT">Ver Televisão</text>
+-        <text lang="SV">Se på TV</text>
+-        <text lang="JA">TV放送</text>
+-        <text lang="FI">Katso Televisiota</text>
+-        <text lang="ZH_TW">觀看電視</text>
+-        <text lang="SL">Glej TV</text>
+-        <text lang="ET">Vaata telerit</text>
+-        <text lang="RU">Смотреть ТВ</text>
+-        <text lang="AR">شاهد التلفاز</text>
+-        <text lang="PL">Oglądanie TV</text>
+-        <text lang="HE">צפיה בטלויזיה</text>
+-        <text lang="HU">TV nézés</text>
+-        <description>Watch live television</description>
+-        <description lang="DE">Jetzt Fernsehen schauen</description>
+-        <action>TV_WATCH_LIVE</action>
+-    </button>
+-
+-    <button>
+         <type>MENU_UTILITIES_SETUP</type>
+         <text>Service Menu</text>
+         <description>LinHES Service Menu</description>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch
new file mode 100644
index 0000000..ed5dc72
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mainmenu.xml.patch
@@ -0,0 +1,39 @@
+--- mainmenu.xml.orig	2009-10-16 12:45:44.000000000 +0000
++++ mainmenu.xml	2009-10-16 14:30:57.000000000 +0000
+@@ -157,33 +157,9 @@
+ 
+     <button>
+         <type>MENU_UTILITIES_SETUP</type>
+-        <text>Utilities / Setup</text>
+-        <text lang="IT">Impostazioni</text>
+-        <text lang="ES">Configuración</text>
+-        <text lang="DE">Zubehör / Konfiguration</text>
+-        <text lang="DA">Tilbehør/Indstillinger</text>
+-        <text lang="IS">Uppsetning</text>
+-        <text lang="NL">Configuratie</text>
+-        <text lang="PT">Utensílios</text>
+-        <text lang="SV">Verktyg / Inställningar</text>
+-        <text lang="JA">設定</text>
+-        <text lang="FI">Oheis/Asetukset</text>
+-        <text lang="ZH_TW">工具/設定</text>
+-        <text lang="SL">Nastavitve</text>
+-        <text lang="ET">Utiliidid / sätted</text>
+-        <text lang="RU">Утилиты / Настройки</text>
+-        <text lang="AR">تضبيطات</text>
+-        <text lang="PL">Narzędzia / ustawienia</text>
+-        <text lang="HE">עזרים / הגדרות</text>
+-        <text lang="HU">Eszközök / Beállítások</text>
+-        <alttext lang="DE">Verschiedenes</alttext>
+-        <alttext lang="SV">Inställningar</alttext>
+-        <alttext lang="ET">Sätted</alttext>
+-        <alttext lang="RU">Настройки</alttext>
+-        <alttext lang="AR">تضبيطات</alttext>
+-        <description>Configure MythTV and plugins</description>
+-        <description lang="DE">MythTV und Plugins konfigurieren</description>
+-        <action>MENU util_menu.xml</action>
++        <text>Service Menu</text>
++        <description>LinHES Service Menu</description>
++        <action>MENU linhes.xml</action>
+     </button>
+ 
+     <!-- <button>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml
new file mode 100644
index 0000000..5914b33
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythbackup.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>BACKUP</type>
+     <text>Do you wish to backup?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>BACKUP</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/mythbackup</action>
+   </button>
+   
+   <button>
+     <type>BACKUP</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml
new file mode 100644
index 0000000..8f5c285
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/mythrestore.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>RESTORE</type>
+     <text>Do you wish to restore?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>RESTORE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/mythrestore</action>
+   </button>
+   
+   <button>
+     <type>BACKUP</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch
new file mode 100644
index 0000000..b4b1411
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/optical_menu.xml.patch
@@ -0,0 +1,16 @@
+--- optical_menu.xml.orig	2009-03-23 20:05:43.000000000 +0000
++++ optical_menu.xml	2009-03-23 20:10:02.000000000 +0000
+@@ -134,6 +134,13 @@
+     </button>
+ 
+     <button>
++        <type>DVD_RIP</type>
++        <text>Import video files from DVD</text>
++	<description>Import video files from a data DVD</description>
++        <action>EXEC /usr/LH/bin/importfiles.sh</action>
++    </button>
++
++    <button>
+         <type>EJECT</type>
+         <text>Eject media</text>
+         <text lang="IT">Espelli Media</text>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh
new file mode 100755
index 0000000..34d8b8c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/original/create_patch.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+for i in *.xml
+do
+	diff -u $i.orig $i > ../$i.patch
+done
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml
new file mode 100644
index 0000000..f56bb6f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/setup.xml
@@ -0,0 +1,111 @@
+<mythmenu name="MAIN">
+
+   <button>
+     <type>SETUP_GENERAL</type>
+     <text>1. General</text>
+     <text lang="IT">1. Generale</text>
+     <text lang="PT">1. Geral</text>
+     <text lang="SV">1. Generellt</text>
+     <text lang="JA">1. 一般</text>
+     <text lang="DE">1. Allgemeines</text>
+     <text lang="FI">1. Yleiset</text>
+     <text lang="FR">1. Général</text>
+     <text lang="SI">1. Splošno</text>
+     <text lang="ET">1. Üldine</text>
+     <text lang="NB">1 Generelt</text>
+     <text lang="DK">1. Generelt</text>
+     <text lang="ES">1. General</text>
+     <text lang="CZ">1. Obecný</text>
+     <text lang="RU">1. Общие</text>
+     <action>GENERAL</action>
+   </button>
+
+   <button>
+     <type>SETUP_CAPTURE_CARDS</type>
+     <text>2. Capture cards</text>
+     <text lang="IT">2. Schede di Acquisizione</text>
+     <text lang="PT">2. Placas de Captura</text>
+     <text lang="SV">2. TV-kort</text>
+     <text lang="JA">2. キャプチャカード</text>
+     <text lang="DE">2. TV-Karten</text>
+     <text lang="FI">2. TV-kortit</text>
+     <text lang="FR">2. Cartes d'acquisition</text>
+     <text lang="SI">2. Kartice za zajem</text>
+     <text lang="ET">2. TV-kaardid</text>
+     <text lang="NB">2 TV-kort</text>
+     <text lang="DK">2. TV-kort</text>
+     <text lang="ES">2. Capturadoras</text>
+     <text lang="CZ">2. Zachytávací karty</text>
+     <text lang="RU">2. Карты захвата</text>
+     <action>CAPTURE CARDS</action>
+   </button>
+
+   <button>
+     <type>SETUP_VIDEO_SOURCES</type>
+     <text>3. Video sources</text>
+     <text lang="IT">3. Fonte Video</text>
+     <text lang="PT">3. Fontes de Vídeo</text>
+     <text lang="SV">3. Videokällor</text>
+     <text lang="JA">3. ビデオソース</text>
+     <text lang="DE">3. Videoquellen</text>
+     <text lang="FI">3. Kuvanlähteet</text>
+     <text lang="FR">3. Sources vidéo</text>
+     <text lang="SI">3. Video viri</text>
+     <text lang="ET">3. Videosisendid</text>
+     <text lang="NB">3 Videokilder</text>
+     <text lang="DK">3. Videokilder</text>
+     <text lang="ES">3. Fuentes de Vídeo</text>
+     <text lang="CZ">3. Zdroje obrazu</text>
+     <text lang="RU">3. Видео источники</text>
+     <action>VIDEO SOURCES</action>
+   </button>
+
+   <button>
+     <type>SETUP_INPUT_CONNECTIONS</type>
+     <text>4. Input connections</text>
+     <text lang="IT">4. Connessioni di Ingresso</text>
+     <text lang="PT">4. Ligações de Entrada</text>
+     <text lang="SV">4. Anslutningar</text>
+     <text lang="JA">4. 入力とソースの接続</text>
+     <text lang="DE">4. Verknüpfungen</text>
+     <text lang="FI">4. Sisääntuloasetukset</text>
+     <text lang="FR">4. Entrées Vidéos</text>
+     <text lang="SI">4. Vhodne povezave</text>
+     <text lang="ET">4. Sisendite ühendused</text>
+     <text lang="NB">4 Inndata</text>
+     <text lang="DK">4. Indgange</text>
+     <text lang="ES">4. Conexiones</text>
+     <text lang="CZ">4. Připojení vstupů</text>
+     <text lang="RU">4. Соединение входов</text>
+     <action>CARD INPUTS</action>
+   </button>
+
+   <button>
+     <type>SETUP_CHANNEL_EDITOR</type>
+     <text>5. Channel Editor</text>
+     <text lang="IT">5. Modifica Canali</text>
+     <text lang="SV">5. Kanaleditor</text>
+     <text lang="JA">5. チャンネル設定</text>
+     <text lang="DE">5. Sender bearbeiten</text>
+     <text lang="FI">5. Kanavanviritys</text>
+     <text lang="FR">5. Editeur de chaînes</text>
+     <text lang="SI">5. Urejanje kanalov</text>
+     <text lang="ET">5. Kanaliredaktor</text>
+     <text lang="NB">5 Kanalredigerer</text>
+     <text lang="DK">5. Kanal opsætning</text>
+     <text lang="ES">5. Editor Canales</text>
+     <text lang="CZ">5. Editor kanálů</text>
+     <text lang="RU">5. Редактор каналов</text>
+     <action>CHANNEL EDITOR</action>
+   </button>
+
+   <button>
+     <type>SETUP_STORAGE_GROUPS</type>
+     <text>6. Storage Directories</text>
+     <text lang="IT">6. Cartelle</text>
+     <text lang="FI">Tallennusryhmät</text>
+     <text lang="SV">Lagringsgrupper</text>
+     <action>STORAGE GROUPS</action>
+   </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml
new file mode 100644
index 0000000..e317b36
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/siriusmenu.xml
@@ -0,0 +1,419 @@
+<mythmenu name="SIRIUS">
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Hits 1</text>
+      <action>EXEC /usr/bin/cliSipie siriushits1</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>StarLite</text>
+      <action>EXEC /usr/bin/cliSipie starlite</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Love</text>
+      <action>EXEC /usr/bin/cliSipie siriuslove</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Movin EZ</text>
+      <action>EXEC /usr/bin/cliSipie movineasy</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Gold</text>
+      <action>EXEC /usr/bin/cliSipie siriusgold</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>'60s Vibrations</text>
+      <action>EXEC /usr/bin/cliSipie 60svibrations</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Totally '70s</text>
+      <action>EXEC /usr/bin/cliSipie totally70s</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Big '80s</text>
+      <action>EXEC /usr/bin/cliSipie big80s</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>ThePulse</text>
+      <action>EXEC /usr/bin/cliSipie thepulse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Bridge</text>
+      <action>EXEC /usr/bin/cliSipie thebridge</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BBC Radio 1</text>
+      <action>EXEC /usr/bin/cliSipie bbcradio1</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Super Shuffle</text>
+      <action>EXEC /usr/bin/cliSipie supershuffle</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Elvis Radio</text>
+      <action>EXEC /usr/bin/cliSipie elvisradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Classic Vinyl</text>
+      <action>EXEC /usr/bin/cliSipie classicvinyl</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Classic Rewind</text>
+      <action>EXEC /usr/bin/cliSipie classicrewind</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>TheVault</text>
+      <action>EXEC /usr/bin/cliSipie thevault</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Jam_ON</text>
+      <action>EXEC /usr/bin/cliSipie jamon</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spectrum</text>
+      <action>EXEC /usr/bin/cliSipie thespectrum</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BuzzSaw</text>
+      <action>EXEC /usr/bin/cliSipie buzzsaw</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Octane</text>
+      <action>EXEC /usr/bin/cliSipie octane</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Alt Nation</text>
+      <action>EXEC /usr/bin/cliSipie altnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>1st Wave</text>
+      <action>EXEC /usr/bin/cliSipie firstwave</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hair Nation</text>
+      <action>EXEC /usr/bin/cliSipie hairnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>'90s Alternative</text>
+      <action>EXEC /usr/bin/cliSipie 90salternative</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Garage</text>
+      <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Left of Center</text>
+      <action>EXEC /usr/bin/cliSipie leftofcenter</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hard Attack</text>
+      <action>EXEC /usr/bin/cliSipie hardattack</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Faction</text>
+      <action>EXEC /usr/bin/cliSipie faction</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Punk</text>
+      <action>EXEC /usr/bin/cliSipie punk</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>The Coffee House</text>
+      <action>EXEC /usr/bin/cliSipie coffeehouse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Margaritaville</text>
+      <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Disorder</text>
+      <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Reggae</text>
+      <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Area 33</text>
+      <action>EXEC /usr/bin/cliSipie area33</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Boombox</text>
+      <action>EXEC /usr/bin/cliSipie boombox</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Chill</text>
+      <action>EXEC /usr/bin/cliSipie chill</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>The Beat</text>
+      <action>EXEC /usr/bin/cliSipie thebeat</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Strobe</text>
+      <action>EXEC /usr/bin/cliSipie thestrobe</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hip-Hop Nation</text>
+      <action>EXEC /usr/bin/cliSipie hiphopnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BackSpin</text>
+      <action>EXEC /usr/bin/cliSipie backspin</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Shade 45</text>
+      <action>EXEC /usr/bin/cliSipie shade45</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hot Jamz</text>
+      <action>EXEC /usr/bin/cliSipie hotjamz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Heart  &amp; Soul</text>
+      <action>EXEC /usr/bin/cliSipie heartandsoul</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>SoulTown</text>
+      <action>EXEC /usr/bin/cliSipie soultown</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>New Country</text>
+      <action>EXEC /usr/bin/cliSipie newcountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Prime Country</text>
+      <action>EXEC /usr/bin/cliSipie primecountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Roadhouse</text>
+      <action>EXEC /usr/bin/cliSipie theroadhouse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Outlaw Country</text>
+      <action>EXEC /usr/bin/cliSipie outlawcountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Bluegrass</text>
+      <action>EXEC /usr/bin/cliSipie bluegrass</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spirit</text>
+      <action>EXEC /usr/bin/cliSipie spirit</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Praise</text>
+      <action>EXEC /usr/bin/cliSipie praise</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Planet Jazz</text>
+      <action>EXEC /usr/bin/cliSipie planetjazz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>JazzCafe</text>
+      <action>EXEC /usr/bin/cliSipie jazzcafe</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>PureJazz</text>
+      <action>EXEC /usr/bin/cliSipie purejazz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spa 73</text>
+      <action>EXEC /usr/bin/cliSipie spa73</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Blues</text>
+      <action>EXEC /usr/bin/cliSipie siriusblues</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Siriusly Sinatra</text>
+      <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Broadway's Best</text>
+      <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Symphony Hall</text>
+      <action>EXEC /usr/bin/cliSipie symphonyhall</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Met Opera Radio</text>
+      <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Pops</text>
+      <action>EXEC /usr/bin/cliSipie siriuspops</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Universo Latino</text>
+      <action>EXEC /usr/bin/cliSipie universolatino</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Rumbon</text>
+      <action>EXEC /usr/bin/cliSipie rumbon</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Martha Stewart</text>
+      <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Stars</text>
+      <action>EXEC /usr/bin/cliSipie siriusstars</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>OutQ Gay Radio</text>
+      <action>EXEC /usr/bin/cliSipie siriusoutq</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Patriot</text>
+      <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Left</text>
+      <action>EXEC /usr/bin/cliSipie siriusleft</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>CNN</text>
+      <action>EXEC /usr/bin/cliSipie cnn</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>wrn</text>
+      <action>EXEC /usr/bin/cliSipie wrn</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Blue Collar Comedy</text>
+      <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Raw Dog Comedy</text>
+      <action>EXEC /usr/bin/cliSipie rawdog</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Laugh Break Comedy</text>
+      <action>EXEC /usr/bin/cliSipie laughbreak</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>thefoxxhole</text>
+      <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>lime</text>
+      <action>EXEC /usr/bin/cliSipie lime</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Kids Stuff</text>
+      <action>EXEC /usr/bin/cliSipie kidsstuff</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Catholic Channel</text>
+      <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>EWTN</text>
+      <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>christiantalk</text>
+      <action>EXEC /usr/bin/cliSipie christiantalk</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius NFL Radio</text>
+      <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Maxim Radio</text>
+      <action>EXEC /usr/bin/cliSipie maximradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Cosmo Radio</text>
+      <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
+   </button>
+   <button>
+     <type>TV_DELETE</type>
+     <text>Stop Listening</text>
+     <action>EXEC /usr/bin/sipie_kill</action>
+  </button>
+
+</mythmenu>
+
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv
new file mode 100644
index 0000000..64a3207
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/themeinfo.xml-tv
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<themeinfo>
+    <!-- The Theme Name (Required) -->
+    <name>LiveTV</name>
+   
+    <!-- The Theme Types (Required) -->
+    <types>
+        <!-- Type. Legal Values are one or more of: UI, OSD and Menu -->
+        <type>Menu</type>
+    </types>
+   
+    <!-- Theme Author Details (Optional)-->
+    <author>
+        <!-- Your name -->
+        <name></name>
+       
+        <!-- Your Email Address -->
+        <email></email>
+    </author>
+   
+    <!-- The Versioning Info (Required) -->
+    <version>
+        <!-- Major version changes mean the theme is no longer
+             compatible with earlier versions of mythtv -->
+        <major>1</major>
+       
+        <!-- Minor version changes are backwards compatible -->
+        <minor>1</minor>
+    </version>
+   
+    <!-- Theme Details (Required) -->
+    <detail>
+        <!-- At least one thumbnail image named "preview" must be included
+             with the theme.
+             There is no limit to the number of thumbnails.
+             Each thumbnail must be given a different name -->
+        <thumbnail name="preview"></thumbnail>
+       
+        <!-- A description of the theme, including general colours and
+             style. The description should include any details that
+             may help to locate your theme in a search. -->
+        <description></description>
+       
+        <!-- Errata. A list of known faults, missing elements or unfinished
+             areas. e.g. "mythgallery not themed" -->
+        <errata>N/A</errata>
+    </detail>
+</themeinfo>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Check for updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Perform updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>View files to be upgraded.</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch
new file mode 100644
index 0000000..3a1072a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/util_menu.xml.patch
@@ -0,0 +1,16 @@
+--- util_menu.xml.orig	2009-03-23 18:43:18.000000000 +0000
++++ util_menu.xml	2009-03-23 20:16:56.000000000 +0000
+@@ -56,6 +56,13 @@
+     </button>
+ 
+     <button>
++        <type>VIDEO_SCREENSHOOTER</type>
++        <text>Thumbnail Generator</text>
++        <description>Generate thumbnail images for videos</description>
++        <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
++    </button>
++
++    <button>
+         <type>SETUP_KEYS</type>
+         <text>Edit Keys</text>
+         <text lang="IT">Modifica Tasti</text>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml
new file mode 100644
index 0000000..6b26d11
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menu-xml/xmmenu.xml
@@ -0,0 +1,574 @@
+<!-- Current as of April 25, 2007 -->
+<mythmenu name="XM">
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '40s</text>
+		<action>EXEC /usr/bin/xamp kill 4</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '50s</text>
+		<action>EXEC /usr/bin/xamp kill 5</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '60s</text>
+		<action>EXEC /usr/bin/xamp kill 6</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '70s</text>
+		<action>EXEC /usr/bin/xamp kill 7</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '80s</text>
+		<action>EXEC /usr/bin/xamp kill 8</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '90s</text>
+		<action>EXEC /usr/bin/xamp kill 9</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>America</text>
+		<action>EXEC /usr/bin/xamp kill 10</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>X Country</text>
+		<action>EXEC /usr/bin/xamp kill 12</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Willie's Place</text>
+		<action>EXEC /usr/bin/xamp kill 13</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bluegrass Junction</text>
+		<action>EXEC /usr/bin/xamp kill 14</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Village</text>
+		<action>EXEC /usr/bin/xamp kill 15</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Highway 16</text>
+		<action>EXEC /usr/bin/xamp kill 16</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>US Country</text>
+		<action>EXEC /usr/bin/xamp kill 17</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>20 on 20</text>
+		<action>EXEC /usr/bin/xamp kill 20</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Heart</text>
+		<action>EXEC /usr/bin/xamp kill 23</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Blend</text>
+		<action>EXEC /usr/bin/xamp kill 25</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Flight 26</text>
+		<action>EXEC /usr/bin/xamp kill 26</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Cinemagic</text>
+		<action>EXEC /usr/bin/xamp kill 27</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>On Broadway</text>
+		<action>EXEC /usr/bin/xamp kill 28</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>U-Pop</text>
+		<action>EXEC /usr/bin/xamp kill 29</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Hitlist</text>
+		<action>EXEC /usr/bin/xamp kill 30</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Torch</text>
+		<action>EXEC /usr/bin/xamp kill 31</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Message</text>
+		<action>EXEC /usr/bin/xamp kill 32</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Spirit</text>
+		<action>EXEC /usr/bin/xamp kill 33</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>enLighten</text>
+		<action>EXEC /usr/bin/xamp kill 34</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Deep Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 40</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Boneyard</text>
+		<action>EXEC /usr/bin/xamp kill 41</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Liquid Metal</text>
+		<action>EXEC /usr/bin/xamp kill 42</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XMU</text>
+		<action>EXEC /usr/bin/xamp kill 43</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fred</text>
+		<action>EXEC /usr/bin/xamp kill 44</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Cafe</text>
+		<action>EXEC /usr/bin/xamp kill 45</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Top Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 46</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Ethel</text>
+		<action>EXEC /usr/bin/xamp kill 47</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Squizz</text>
+		<action>EXEC /usr/bin/xamp kill 48</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Big Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 49</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Loft</text>
+		<action>EXEC /usr/bin/xamp kill 50</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Music Lab</text>
+		<action>EXEC /usr/bin/xamp kill 51</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Verge</text>
+		<action>EXEC /usr/bin/xamp kill 52</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fungus</text>
+		<action>EXEC /usr/bin/xamp kill 53</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Lucy</text>
+		<action>EXEC /usr/bin/xamp kill 54</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Soul Street</text>
+		<action>EXEC /usr/bin/xamp kill 60</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Flow</text>
+		<action>EXEC /usr/bin/xamp kill 61</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Suite 62</text>
+		<action>EXEC /usr/bin/xamp kill 62</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Groove</text>
+		<action>EXEC /usr/bin/xamp kill 64</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Rhyme</text>
+		<action>EXEC /usr/bin/xamp kill 65</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>RAW</text>
+		<action>EXEC /usr/bin/xamp kill 66</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The City</text>
+		<action>EXEC /usr/bin/xamp kill 67</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Heat</text>
+		<action>EXEC /usr/bin/xamp kill 68</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Real Jazz</text>
+		<action>EXEC /usr/bin/xamp kill 70</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Watercolors</text>
+		<action>EXEC /usr/bin/xamp kill 71</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Beyond Jazz</text>
+		<action>EXEC /usr/bin/xamp kill 72</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>High Standards</text>
+		<action>EXEC /usr/bin/xamp kill 73</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bluesville</text>
+		<action>EXEC /usr/bin/xamp kill 74</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Hear Music</text>
+		<action>EXEC /usr/bin/xamp kill 75</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fine Tuning</text>
+		<action>EXEC /usr/bin/xamp kill 76</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Audio Visions</text>
+		<action>EXEC /usr/bin/xamp kill 77</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Escape</text>
+		<action>EXEC /usr/bin/xamp kill 78</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>On The Rocks</text>
+		<action>EXEC /usr/bin/xamp kill 79</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Move</text>
+		<action>EXEC /usr/bin/xamp kill 80</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>BPM</text>
+		<action>EXEC /usr/bin/xamp kill 81</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The System</text>
+		<action>EXEC /usr/bin/xamp kill 82</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Chrome</text>
+		<action>EXEC /usr/bin/xamp kill 83</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM-Chill</text>
+		<action>EXEC /usr/bin/xamp kill 84</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fuego</text>
+		<action>EXEC /usr/bin/xamp kill 90</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Viva</text>
+		<action>EXEC /usr/bin/xamp kill 91</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Aguila</text>
+		<action>EXEC /usr/bin/xamp kill 92</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Caliente</text>
+		<action>EXEC /usr/bin/xamp kill 94</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Luna</text>
+		<action>EXEC /usr/bin/xamp kill 95</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Air Musique</text>
+		<action>EXEC /usr/bin/xamp kill 100</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Joint</text>
+		<action>EXEC /usr/bin/xamp kill 101</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Sur La Route</text>
+		<action>EXEC /usr/bin/xamp kill 102</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>World Zone</text>
+		<action>EXEC /usr/bin/xamp kill 103</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Ngoma</text>
+		<action>EXEC /usr/bin/xamp kill 104</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Classics</text>
+		<action>EXEC /usr/bin/xamp kill 110</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Vox</text>
+		<action>EXEC /usr/bin/xamp kill 112</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Pops</text>
+		<action>EXEC /usr/bin/xamp kill 113</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Kids</text>
+		<action>EXEC /usr/bin/xamp kill 116</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bob Edwards Show</text>
+		<action>EXEC /usr/bin/xamp kill 133</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Comedy</text>
+		<action>EXEC /usr/bin/xamp kill 150</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Laugh USA</text>
+		<action>EXEC /usr/bin/xamp kill 151</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Special X</text>
+		<action>EXEC /usr/bin/xamp kill 154</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Agenda</text>
+		<action>EXEC /usr/bin/xamp kill 134</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Oprah and Friends</text>
+		<action>EXEC /usr/bin/xamp kill 156</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Virus</text>
+		<action>EXEC /usr/bin/xamp kill 202</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>1 Hit Wonders</text>
+		<action>EXEC /usr/bin/xamp kill 300</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Metalcore</text>
+		<action>EXEC /usr/bin/xamp kill 301</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Indie First</text>
+		<action>EXEC /usr/bin/xamp kill 302</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Late Night Mix</text>
+		<action>EXEC /usr/bin/xamp kill 303</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Sessions@AOL</text>
+		<action>EXEC /usr/bin/xamp kill 304</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Shuffle</text>
+		<action>EXEC /usr/bin/xamp kill 305</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Rock First</text>
+		<action>EXEC /usr/bin/xamp kill 306</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Country First</text>
+		<action>EXEC /usr/bin/xamp kill 307</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Hip Hop First</text>
+		<action>EXEC /usr/bin/xamp kill 308</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Pop First</text>
+		<action>EXEC /usr/bin/xamp kill 309</action>
+	</button>
+
+	<button>
+		<type>TV_DELETE</type>
+		<text>Stop Listening</text>
+		<action>EXEC /usr/bin/xamp kill</action>
+	</button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch b/abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch
new file mode 100644
index 0000000..aa633ff
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/menutheme_fallback.patch
@@ -0,0 +1,18 @@
+Index: libs/libmythui/myththemedmenu.cpp
+===================================================================
+--- libs/libmythui/myththemedmenu.cpp	(revision 23401)
++++ libs/libmythui/myththemedmenu.cpp	(working copy)
+@@ -778,6 +778,13 @@
+     else
+         VERBOSE(VB_FILE+VB_EXTRA, "No menu file " + testdir);
+ 
++    testdir = GetShareDir() + "themes/defaultmenu/" + menuname;
++    file.setFileName(testdir);
++    if (file.exists())
++        return testdir;
++    else
++        VERBOSE(VB_FILE+VB_EXTRA, "No menu file " + testdir);
++
+     return QString();
+ }
+ 
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/myth.sh b/abs/core/mythtv/old/stable-0.22/mythtv/myth.sh
new file mode 100755
index 0000000..fb7122c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/myth.sh
@@ -0,0 +1,4 @@
+export PATH=$PATH:/usr/local/bin
+# set core file size to 0
+ulimit -c 0
+export MALLOC_CHECK_=0
\ No newline at end of file
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mythbackend`
+case "$1" in
+  start)
+    stat_busy "Starting MythTV Backend"
+    [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
+    [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important 
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      echo $PID > /var/run/mythbackend.pid
+      add_daemon mythbackend
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping MythTV Backend"
+    [ ! -z "$PID" ]  && kill $PID &>/dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon mythbackend
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1s 
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr
new file mode 100644
index 0000000..4f218bc
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythbackend.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh
new file mode 100755
index 0000000..e7a7b70
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythbackend.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+#
+#	/etc/rc.d/init.d/mythbackend
+#
+# Starts the mythbackend as a daemon
+#
+# chkconfig: 345 90 10
+# description: Starts the mythbackend process as a daemon after the XWindows \
+#              system is started, in runlevel 5. This allows scheduled \
+#              recordings to occur without manual intervention.
+# processname: mythbackend
+
+# Copyright (c) by Michael Thomson <linux at m-thomson dot net>
+# With thanks to Stu Tomlinson <stu at nosnilmot dot com>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+
+# Default values to use if none are supplied in the config file.
+# User who should start the mythbackend processes
+MBE_USER="root"
+# Directory holding the mythbackend binary
+MBE_LOCATION="/usr/local/bin/"
+# Name of mythbackend binary
+MBE_PROG="mythbackend"
+# Full path to mythbackend log file
+MBE_LOGFILE="/var/log/mythtv/mythbackend.log"
+
+# Source function library.
+. /etc/init.d/functions
+
+# Source config file if available
+if [ -f "/etc/sysconfig/mythbackend" ]; then
+  . /etc/sysconfig/mythbackend
+fi
+
+test -x ${MBE_LOCATION}${MBE_PROG} || exit 0
+
+RETVAL=0
+
+#
+#	See how we were called.
+#
+
+start() {
+	# Check if mythbackend is already running
+	if [ ! -f /var/lock/subsys/${MBE_PROG} ]; then
+	    echo -n "Starting ${MBE_PROG}: "
+	    # /usr/local/bin/mythbackend -d -l /some/log/file
+	    #daemon --user ${MBE_USER} ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+	    ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+	    RETVAL=$?
+	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/${MBE_PROG}
+	    echo
+	fi
+	return $RETVAL
+}
+
+stop() {
+	echo -n "Stopping ${MBE_PROG}: "
+	killproc ${MBE_LOCATION}${MBE_PROG}
+	RETVAL=$?
+	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${MBE_PROG}
+	echo
+        return $RETVAL
+}
+
+
+restart() {
+	stop
+	start
+}	
+
+reload() {
+	restart
+}	
+
+status_at() {
+ 	status ${MBE_LOCATION}${MBE_PROG}
+}
+
+case "$1" in
+start)
+	start
+	;;
+stop)
+	stop
+	;;
+reload|restart)
+	restart
+	;;
+condrestart)
+	if [ -f /var/lock/subsys/${MBE_PROG} ]; then
+	    restart
+	fi
+	;;
+status)
+	status_at
+	;;
+*)
+	echo "Usage: $0 {start|stop|restart|condrestart|status}"
+	exit 1
+esac
+
+exit $?
+exit $RETVAL
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr b/abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr
new file mode 100644
index 0000000..1580533
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythfrontend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythfrontend.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install b/abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install
new file mode 100755
index 0000000..6b35d5b
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/mythtv.install
@@ -0,0 +1,35 @@
+# arg 1:  the new package version
+post_install() {
+	if [ ! -d /var/log/mythtv ]
+	then
+		mkdir -p /var/log/mythv
+		chown -R mythtv /var/log/mythtv
+		echo "---" > /var/log/mythtv/mythbackend.log
+		chown mythtv /var/log/mythtv/mythbackend.log
+	fi
+	ln -s /usr/share/mythtv/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml
+}
+
+post_upgrade() {
+	if [ ! -d /var/log/mythtv ]
+	then
+		mkdir -p /var/log/mythv
+		chown -R mythtv /var/log/mythtv
+	fi
+	if [ -e /usr/share/mythtv/is.xml ]
+	then
+		rm -fr /usr/share/mythtv/themes/defaultmenu/is.xml
+		ln -s /usr/share/mythtv/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml
+	fi
+}
+
+
+# arg 1:  the old package version
+post_remove() {
+	/bin/true
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/pretty b/abs/core/mythtv/old/stable-0.22/mythtv/pretty
new file mode 100755
index 0000000..795ad4c
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/pretty
@@ -0,0 +1,10 @@
+#!/bin/bash
+if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
+then
+        su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
+elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
+then
+        su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+fi
+
+
diff --git a/abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch b/abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch
new file mode 100644
index 0000000..0fc452a
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythtv/smolt_jump.patch
@@ -0,0 +1,30 @@
+Index: programs/mythfrontend/networkcontrol.cpp
+===================================================================
+--- programs/mythfrontend/networkcontrol.cpp	(revision 19291)
++++ programs/mythfrontend/networkcontrol.cpp	(working copy)
+@@ -83,6 +83,7 @@
+     jumpMap["zoneminderliveview"]    = "ZoneMinder Live View";
+     jumpMap["zoneminderevents"]      = "ZoneMinder Events";
+     jumpMap["snapshot"]              = "ScreenShot";
++    jumpMap["mythsmolt"]             = "MythSmolt";
+ 
+     // These jump point names match the (lowercased) locations from gContext
+     jumpMap["channelrecpriority"]    = "Channel Recording Priorities";
+@@ -191,7 +192,7 @@
+     pthread_create(&command_thread, NULL, CommandThread, this);
+ 
+     gContext->addListener(this);
+-    
++
+     connect(this, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ }
+ 
+@@ -307,7 +308,7 @@
+         cs = new QTextStream(s);
+         cs->setCodec("UTF-8");
+     }
+-    
++
+     if (client)
+     {
+         closedOldConn = true;
diff --git a/abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD
new file mode 100644
index 0000000..1affe22
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythvideo/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythvideo
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Video playback and browsing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
+conflicts=('mythvideo-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythvideo || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD
new file mode 100644
index 0000000..96c3457
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythweather/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythweather
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Weather checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'wget')
+conflicts=('mythweather-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythweather || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD
new file mode 100644
index 0000000..060a229
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythweb/PKGBUILD
@@ -0,0 +1,50 @@
+pkgname=mythweb
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Web interface for MythTV's backend"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'lighttpd' 'php' 'local-website' 'perl' 'perl-dbd-mysql' 'perl-math-round')
+conflicts=('mythweb-svn')
+groups=('mythtv-extras')
+install=mythweb.install
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+DOCROOT=/data/srv/httpd/htdocs/mythweb
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
+
+	#cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+	rsync -arp --exclude .svn --delete-excluded   $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+	
+    rm $startdir/pkg/$DOCROOT/README
+	chown -R http:users $startdir/pkg/$DOCROOT
+	chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
+
+}
diff --git a/abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install b/abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install
new file mode 100644
index 0000000..470cbd1
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythweb/mythweb.install
@@ -0,0 +1,10 @@
+post_install() {
+	echo "You must create a symlink from /home/httpd/html/mythweb/video_dir"
+	echo "to your MythTV recordings directory. Don't forget to change the"
+	echo "permissions so that the webserver can read those files and create"
+	echo "thumbnails."  
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD b/abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD
new file mode 100644
index 0000000..228626f
--- /dev/null
+++ b/abs/core/mythtv/old/stable-0.22/mythzoneminder/PKGBUILD
@@ -0,0 +1,52 @@
+pkgname=mythzoneminder
+pkgver=0.22
+pkgrel=22012
+pkgdesc="Integrates ZoneMinder into MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'zoneminder>=1.23.3')
+conflicts=('mythzoneminder-svn')
+groups=('mythtv-extras')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-22-fixes/mythplugins
+_svnver=23566
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythzoneminder || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/stable-0.23/clean_all.sh b/abs/core/mythtv/stable-0.23/clean_all.sh
new file mode 100755
index 0000000..b56450e
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/clean_all.sh
@@ -0,0 +1,22 @@
+#!/bin/sh
+
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# clean up current directory
+rm -f *~
+
+# clean up mythtv directories
+for i in `echo ${buildlist[@]:0}`
+do
+	echo "-- cleaning $i"
+	cd ./$i
+
+	# clean up everything
+	rm -rf pkg src
+	rm -f *~
+
+	cd ..
+done
+
+echo "DONE!"
+
diff --git a/abs/core/mythtv/stable-0.23/morethemes/PKGBUILD b/abs/core/mythtv/stable-0.23/morethemes/PKGBUILD
new file mode 100755
index 0000000..9633db1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/morethemes/PKGBUILD
@@ -0,0 +1,46 @@
+pkgname=morethemes
+pkgver=0.23
+pkgrel=29
+pkgdesc="Additional themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+depends=('mythtv')
+groups=('mythtv-extras')
+source=('ftp://ftp.knoppmyth.net/R6/sources/morethemes-0.23.tar.bz2'
+        'ftp://miroku.no-ip.com/blue-abstract-wide.2010.05.26.tar.bz2'
+        'http://elkin.de/mythtv/2010.06.13-Willi.tar.bz2'
+        'http://elkin.de/mythtv/2010.03.13-bando-blue.tar.bz2'
+        'http://www.mythtv.org/themes/LCARS.tar.gz'
+        'http://www.mythtv.org/themes/TransBlue.tar.gz'
+        'http://www.westnet.com/~chris/Mythtv/Retro-wide.tar.gz'
+        'retro-wide_video-ui.xml-filetypes.patch')
+
+build() {
+
+    cd $startdir/src/
+    mkdir -p $pkgdir/usr/share/mythtv
+    cp -a themes $pkgdir/usr/share/mythtv	
+    chmod 644 -R blue-abstract-wide
+    chmod +X -R blue-abstract-wide
+    cp -a blue-abstract-wide $pkgdir/usr/share/mythtv/themes
+    chmod 644 -R Willi
+    chmod +X -R Willi
+    cp -a Willi $pkgdir/usr/share/mythtv/themes
+    chmod 644 -R bando-blue
+    chmod +X -R bando-blue
+    cp -a bando-blue $pkgdir/usr/share/mythtv/themes
+    cp -a LCARS $pkgdir/usr/share/mythtv/themes
+    cp -a TransBlue $pkgdir/usr/share/mythtv/themes
+    cp -a Retro-wide $pkgdir/usr/share/mythtv/themes
+    cd $pkgdir/usr/share/mythtv/themes/Retro-wide
+    patch -p0 <${srcdir}/retro-wide_video-ui.xml-filetypes.patch
+}
+md5sums=('5672c0e8604f7b1610fa9a1c7626423c'
+         'ddc9c7c481664df048b83b7de0731c44'
+         '3c9fbcc9495eb2b0a0fd5ae61acc779a'
+         'c6d90fb469bc30a94e32f76c82122dd3'
+         'a36bb7b2597a44128401b1aba9106122'
+         '21d6f967631e45b7039b965a63755282'
+         '526e806848cd4d0ae57883ba18edc6af'
+         '45ff91449f31ac2546c82f559d2e8394')
diff --git a/abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch b/abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch
new file mode 100644
index 0000000..e5465dc
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/morethemes/retro-wide_video-ui.xml-filetypes.patch
@@ -0,0 +1,22 @@
+--- video-ui.xml.orig	2010-07-04 06:21:18.000000000 +0000
++++ video-ui.xml	2010-07-04 06:22:22.000000000 +0000
+@@ -967,14 +967,17 @@
+ 
+         <button name="done_button" from="basebutton">
+             <position>700,550</position>
++            <value>Done</value>
+         </button>
+ 
+         <button name="new_button" from="basebutton">
+-            <position>600,550</position>
++            <position>400,550</position>
++            <value>New</value>
+         </button>
+ 
+         <button name="delete_button" from="basebutton">
+-            <position>0,550</position>
++            <position>100,550</position>
++            <value>Delete</value>
+         </button>
+     </window>
+ 
diff --git a/abs/core/mythtv/stable-0.23/mp_all.sh b/abs/core/mythtv/stable-0.23/mp_all.sh
new file mode 100755
index 0000000..38a5995
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mp_all.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+pkgver=0.23
+pkgrel=31
+
+# NOTE: Make sure to build and install mythtv first BEFORE building anything else
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+
+# build and install
+for i in `echo ${buildlist[@]:0}`
+do
+	echo "---------- building $i ----------"
+	cd ./$i
+
+	# set svn version in the PKGBUILD
+	sed -i s/^pkgver=.*/pkgver=$pkgver/ PKGBUILD
+	sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
+
+	# make the package
+	mp -f -i --holdver --skipinteg || exit 1
+
+	# clean up afterwards
+	rm -rf pkg
+	rm -f *~
+
+	cd ..
+done
+
+echo ""
+echo "DONE!"
+
diff --git a/abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD b/abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD
new file mode 100644
index 0000000..d2a1217
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mytharchive/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mytharchive
+pkgver=0.23
+pkgrel=29
+pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'libxmu' 'mysql-python' 'pil' 'dvdauthor' 'mjpegtools' 'transcode')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mytharchive || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD b/abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD
new file mode 100644
index 0000000..0413b79
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythbrowser/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythbrowser
+pkgver=0.23
+pkgrel=29
+pkgdesc="Mini web browser for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'wget')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythbrowser || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD b/abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD
new file mode 100644
index 0000000..e18538b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythgallery/PKGBUILD
@@ -0,0 +1,45 @@
+pkgname=mythgallery
+pkgver=0.23
+pkgrel=29
+pkgdesc="Image gallery plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'libexif' 'libtiff')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythgallery || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
diff --git a/abs/core/mythtv/stable-0.23/mythgame/PKGBUILD b/abs/core/mythtv/stable-0.23/mythgame/PKGBUILD
new file mode 100644
index 0000000..67bd8a8
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythgame/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythgame
+pkgver=0.23
+pkgrel=29
+pkgdesc="Emulation plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'zlib')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythgame || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD b/abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD
new file mode 100644
index 0000000..8a92133
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythmovies/PKGBUILD
@@ -0,0 +1,48 @@
+pkgname=mythmovies
+pkgver=0.23
+pkgrel=29
+pkgdesc="Displays information about movies playing in the area."
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23')
+conflicts=('mythmovies')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythmovies || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD b/abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD
new file mode 100644
index 0000000..cd13ba7
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythmusic/PKGBUILD
@@ -0,0 +1,51 @@
+pkgname=mythmusic
+pkgver=0.23
+pkgrel=29
+pkgdesc="Music playing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'libid3tag' 'libmad' 'libvorbis' 'flac>=1.1.4' 'libcdaudio' \
+         'cdparanoia' 'fftw2' 'sdl' 'faad2>=2.6.1' 'lame' 'taglib' \
+         'libvisual-plugins' 'libvisual-projectm')
+conflicts=('mythmusic')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythmusic --enable-libvisual --enable-fftw --enable-sdl \
+	--enable-aac || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD b/abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD
new file mode 100644
index 0000000..cd2bf83
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythnetvision/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythnetvision
+pkgver=0.23
+pkgrel=29
+pkgdesc="Internet video plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv' 'mythbrowser' 'python-pycurl' 'flashplugin')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythnetvision || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythnews/PKGBUILD b/abs/core/mythtv/stable-0.23/mythnews/PKGBUILD
new file mode 100644
index 0000000..c5a52e1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythnews/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythnews
+pkgver=0.23
+pkgrel=29
+pkgdesc="News checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythnews || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD b/abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD
new file mode 100644
index 0000000..9041251
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythsmolt/PKGBUILD
@@ -0,0 +1,23 @@
+pkgname=mythsmolt
+pkgver=0.23
+pkgrel=4
+pkgdesc="mythsmolt, a hardware profileing tool"
+arch=('i686' 'x86_64')
+url="http://www.mythvantage.com"
+license=('GPL')
+depends=("mythtv>=${pkgver}" urlgrabber python-simplejson)
+source=("http://www.mythvantage.com/request.php?4" 'smolt_init_login.sh' 'mythsmolt.patch')
+
+groups=('mythtv-extras')
+
+build() {
+   cd $startdir/src/mythsmolt
+   patch -p1 < ../mythsmolt.patch || return 1
+   ./configure.sh
+   make || return 1
+   make INSTALL_ROOT=$startdir/pkg install
+   install -D -m 755 $srcdir/smolt_init_login.sh $pkgdir/etc/profile.d/smolt_init_login.sh
+}
+md5sums=('4641b425d1aa910d82972ebb3a8d4998'
+         '57a3416d90e59abbd5062436583c17e1'
+         '461350b3a7b9d7433cc11e2786e27005')
diff --git a/abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch b/abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch
new file mode 100644
index 0000000..9866587
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythsmolt/mythsmolt.patch
@@ -0,0 +1,8 @@
+diff -ruaN mythsmolt.orig/settings.pro mythsmolt/settings.pro
+--- mythsmolt.orig/settings.pro	2010-01-06 15:49:59.000000000 +0000
++++ mythsmolt/settings.pro	2010-05-28 03:30:59.000000000 +0000
+@@ -1,3 +1,3 @@
+ 
+-LIBVERSION = 0.22
++LIBVERSION = 0.23
+ 
diff --git a/abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh b/abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh
new file mode 100644
index 0000000..0b76305
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythsmolt/smolt_init_login.sh
@@ -0,0 +1,39 @@
+if [ $UID = 0  -o  $UID = 1000 ]
+then
+    INIT=`ps -p 1 -o comm=`
+    if [ x$INIT = xrunit ]
+    then
+        if [[ -f /home/mythtv/.configure  &&  $- = *i* ]]
+        then
+            if  [ ! -z "$PS1" ]
+            then
+                if  [ $0 = "-bash" ]
+                then
+                    if [ ! -e /home/mythtv/.mythtv/MythSmolt/hw-uuid ]
+                    then
+                        echo ""
+                        echo "####################################################"
+                        echo "It appears you have not yet run smolt"
+                        echo "Please take the time to submit your hardware profile"
+                        echo ""
+                        echo "press any key to continue:"
+                        echo "####################################################"
+                        read a
+                        mkdir -p /home/mythtv/.mythtv/MythSmolt
+                        chown -R mythtv:users /home/mythtv/.mythtv/MythSmolt
+
+                        if [ $UID = 0 ]
+                        then
+                            su   mythtv -c "/usr/share/mythtv/mythsmolt/scripts/sendProfile.py" &&   su mythtv -c "touch  /home/mythtv/.mythtv/MythSmolt/hw-uuid"
+                        else
+                            /usr/share/mythtv/mythsmolt/scripts/sendProfile.py &&  touch  /home/mythtv/.mythtv/MythSmolt/hw-uuid
+                        fi
+                    fi
+                fi
+            fi
+        fi
+    fi
+fi
+
+
+
diff --git a/abs/core/mythtv/stable-0.23/myththemes/PKGBUILD b/abs/core/mythtv/stable-0.23/myththemes/PKGBUILD
new file mode 100755
index 0000000..0d855db
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/myththemes/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=myththemes
+pkgver=0.23
+pkgrel=29
+pkgdesc="Themes for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/myththemes-0.23-fixes.tar.bz2' `echo ${patches[@]:0}`)
+
+md5sums=('5e5cafe0dd3fadadbc37d29708e3ec74')
+
+build() {
+
+	cd $startdir/src/myththemes
+	svn update
+	rm -fr Mythbuntu
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythtv/PKGBUILD b/abs/core/mythtv/stable-0.23/mythtv/PKGBUILD
new file mode 100755
index 0000000..a3420b5
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/PKGBUILD
@@ -0,0 +1,96 @@
+pkgname=mythtv
+pkgver=0.23
+pkgrel=31
+pkgdesc="A personal video recorder for Linux"
+url="http://www.mythtv.org"
+license="GPL"
+depends=('bash' 'mysql-clients>=5.0' 'qt' 'lame' 'lirc-utils' 'ffmpeg' \
+        'faad2' 'libxv' 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' \
+	'perl-net-upnp' 'libvdpau')
+makedepends=('libgl' 'subversion')
+replaces=()
+groups=('pvr')
+#backup=(/usr/share/mythtv/is.xml)
+#options=(!strip)
+#MAKEFLAGS="-j6"
+install='mythtv.install'
+
+patchs=()
+#patchs=('smolt_jump.patch')
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythtv-0.23-fixes.tar.bz2'
+	'mythbackend' 'myth.sh' `echo ${patchs[@]:0}` 'mythbackend.lr' 'mythfrontend.lr' 'pretty')
+arch=('i686' 'x86_64')
+
+build() {
+
+	# get clean copy from SVN repo
+	cd $startdir/src/mythtv
+	svn update
+
+	# apply patches
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patchs[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+
+        # Fix to allow AC3 5.1 to return http://svn.mythtv.org/trac/ticket/8659
+        sed -i 's/#define\ AUDIOMAXFRAMES\ \ \ \ \ \ \ 30/#define\ AUDIOMAXFRAMES\ \ \ \ \ \ \ 0/' libs/libmythtv/avformatdecoder.h 
+
+	sed -i -e "s/\`(svnversion \$\${SVNTREEDIR} 2>\/dev\/null) || echo Unknown\`/$pkgver/" version.pro
+
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up from last build
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --arch=${ARCH} \
+	--enable-vdpau --enable-xvmc --enable-xvmc-pro \
+	--enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
+	--compile-type=release --with-bindings=perl,python \
+	--enable-audio-alsa --disable-audio-jack --disable-audio-pulseoutput || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+    
+	# install db schema, scripts and docs
+	install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1
+	install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1
+#	cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+    rsync -arp --exclude .svn --delete-excluded  docs $startdir/pkg/usr/share/mythtv/ || return 1
+
+	# install contrib
+    rsync -arp --exclude .svn --delete-excluded  contrib $startdir/pkg/usr/share/mythtv/ || return 1
+	#cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
+
+	# patch the xml LinHES style
+	cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv/themes/defaultmenu/
+#	mv $startdir/pkg/usr/share/mythtv/themes/defaultmenu/is.xml $startdir/pkg/usr/share/mythtv/
+	cd $startdir/pkg/usr/share/mythtv/themes/defaultmenu
+	patch -p0 < $startdir/menu-xml/mainmenu.xml.patch || return 1
+	patch -p0 < $startdir/menu-xml/optical_menu.xml.patch || return 1
+	patch -p0 < $startdir/menu-xml/library.xml.patch || return 1
+	patch -p0 < $startdir/menu-xml/util_menu.xml.patch || return 1
+
+	# make log dir
+	mkdir -p $startdir/pkg/var/log/mythtv
+	chown 1000.1000 $startdir/pkg/var/log/mythtv
+	mkdir -p $startdir/pkg/etc/logrotate.d
+	cp $startdir/src/*.lr $startdir/pkg/etc/logrotate.d
+	mkdir -p $startdir/pkg/etc/cron.hourly/
+	install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
+}
+
+md5sums=('f75a4f1be66c2803df54466d4c30361a'
+	 '7ef6de58240e7aad389a0b13d91b1cf6'
+         '2babd4b8e146a7538d18dcd55695b0be'
+         'f735805a80b0d1180dee01f9df1b7004'
+         'f407d6af23e74a49540755420f84fa58'
+	 '5469d9921b726db750b991c87d226158')
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml
new file mode 100644
index 0000000..ac52497
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -0,0 +1,94 @@
+<mythmenu name="HOST_SETTINGS">
+
+   <button>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>Network Settings</text>
+      <action>EXEC  mythinstall -s network </action>
+   </button>
+
+   <button>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>DDNS Settings</text>
+      <action>EXEC  mythinstall -s ddns </action>
+   </button>
+   <button>
+      <type>MV_SYSTEM_SETUP_MENU</type>
+      <text>System Type</text>
+      <action>EXEC  mythinstall -s hostype </action>
+   </button>
+
+   <button>
+      <type>MV_SCREENSAVER_SETUP_MENU</type>
+      <text>Screensaver Settings</text>
+      <action>EXEC  mythinstall -s screensaver </action>
+   </button>
+
+   <button>
+      <type>MV_IR_SETUP_MENU</type>
+      <text>Remotes</text>
+       <action>EXEC  mythinstall -s ir </action>
+   </button>
+
+   <button>
+      <type>MV_MISC_SETUP_MENU</type>
+      <text>Miscellanous Settings</text>
+      <action>EXEC  mythinstall -s misc </action>
+   </button>
+
+   <button>
+      <type>MV_SOFTWARE_MENU</type>
+      <text>Software</text>
+      <action>EXEC  mythinstall -s  plugins </action>
+   </button>
+
+   <button>
+      <type>MV_SHUTDOWN_SETUP_MENU</type>
+      <text>Shutdown Settings</text>
+      <action>EXEC  mythinstall -s sleep </action>
+   </button>
+
+   <button>
+      <type>MV_ADVANCED_X_SETUP_MENU</type>
+      <text>Display Settings</text>
+      <action>EXEC  mythinstall -s advancedX</action>
+   </button>
+
+   <button>
+      <type>MV_ADVANCED_SETUP_MENU</type>
+      <text>Advanced Settings</text>
+      <action>EXEC  mythinstall -s advanced</action>
+   </button>
+
+   <button>
+      <type>MV_AUDIO_SETUP_MENU</type>
+      <text>Audio Settings</text>
+       <action>EXEC  mythinstall -s sound </action>
+   </button>
+
+   <button>
+      <type>MV_ACCESS_SETUP_MENU</type>
+      <text>Access Control</text>
+      <action>EXEC  mythinstall -s accesscontrol </action>
+   </button>
+
+   <button>
+      <type>MV_USER_SETUP_MENU</type>
+      <text>User Accounts</text>
+      <action>EXEC  mythinstall -s user </action>
+   </button>
+
+   <button>
+      <type>MV_WEBACCESS_SETUP_MENU</type>
+      <text>Web Security</text>
+      <action>EXEC  mythinstall -s webuser </action>
+   </button>
+
+   <!--
+   <button>
+      <type>SETUP_MENU</type>
+      <text>Settings Profile Manager</text>
+      <action>EXEC  mythinstall -t </action>
+   </button>
+   -->
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml
new file mode 100644
index 0000000..88b7e6b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/is.xml
@@ -0,0 +1,3 @@
+<mythmenu name="Internet Steams">
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch
new file mode 100644
index 0000000..81ea604
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/library.xml.patch
@@ -0,0 +1,12 @@
+--- library.xml.orig	2009-10-16 12:45:44.000000000 +0000
++++ library.xml	2009-10-16 17:21:44.000000000 +0000
+@@ -123,8 +123,7 @@
+         <text lang="HU">Online folyam lejátszása</text>
+         <description></description>
+         <description lang="DE"></description>
+-        <action>PLUGIN mythstream</action>
+-        <depends>mythstream</depends>
++        <action>MENU is.xml</action>
+     </button>
+ 
+     <button>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml
new file mode 100644
index 0000000..ebc848b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/linhes.xml
@@ -0,0 +1,59 @@
+<mythmenu name="LinHES">
+
+    <button>
+        <type>SETUP_GENERAL</type>
+        <text>MythTV Configuration</text>
+        <text lang="IT">Impostazioni</text>
+        <text lang="ES">Configuración</text>
+        <text lang="DE">Zubehör / Konfiguration</text>
+        <text lang="DA">Tilbehør/Indstillinger</text>
+        <text lang="IS">Uppsetning</text>
+        <text lang="NL">Configuratie</text>
+        <text lang="PT">Utensílios</text>
+        <text lang="SV">Verktyg / Inställningar</text>
+        <text lang="JA">設�~Z</text>
+        <text lang="FI">Oheis/Asetukset</text>
+        <text lang="ZH_TW">工�~E�/設�~Z</text>
+        <text lang="SL">Nastavitve</text>
+        <text lang="ET">Utiliidid / sätted</text>
+        <text lang="RU">У�~Bили�~B�~K / �~]а�~A�~B�~@ойки</text>
+        <text lang="AR">تضب�~Jطات</text>
+        <text lang="PL">Narz�~Ydzia / ustawienia</text>
+        <text lang="HE">ע�~Vר�~Y�~] / �~T�~R�~Sר�~Uת</text>
+        <text lang="HU">Eszközök / Beállítások</text>
+        <alttext lang="DE">Verschiedenes</alttext>
+        <alttext lang="SV">Inställningar</alttext>
+        <alttext lang="ET">Sätted</alttext>
+        <alttext lang="RU">�~]а�~A�~B�~@ойки</alttext>
+        <alttext lang="AR">تضب�~Jطات</alttext>
+        <description>Configure MythTV and plugins</description>
+        <description lang="DE">MythTV und Plugins konfigurieren</description>
+        <action>MENU util_menu.xml</action>
+    </button>
+
+   <button>
+     <type>LINHES_SETUP</type>
+     <text>LinHES Configuration</text>
+     <action>MENU HOST_SETTINGS.xml</action>
+   </button>
+
+   <button>
+     <type>BACKUP</type>
+     <text>Backup LinHES</text>
+     <action>MENU mythbackup.xml</action>
+   </button>
+
+   <button>
+     <type>RESTORE</type>
+     <text>Restore LinHES</text>
+     <action>MENU mythrestore.xml</action>
+   </button>
+
+<!--#Check for updates-->
+   <button>
+     <type>UPGRADE</type>
+     <text>Upgrade LinHES</text>
+     <action>MENU update.xml</action>
+   </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch
new file mode 100644
index 0000000..0ec7b5b
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mainmenu.xml.patch
@@ -0,0 +1,95 @@
+--- mainmenu.xml.orig	2010-04-18 01:29:44.000000000 +0000
++++ mainmenu.xml	2010-04-18 01:32:38.000000000 +0000
+@@ -2,6 +2,31 @@
+ <mythmenu name="MAIN">
+ 
+     <button>
++        <type>TV_WATCH_TV</type>
++        <text>Watch TV</text>
++        <text lang="IT">Guarda la TV</text>
++        <text lang="ES">Ver la TV</text>
++        <text lang="NL">TV Kijken</text>
++        <text lang="DE">Fernsehen</text>
++        <text lang="IS">Horfa á sjónvarp</text>
++        <text lang="PT">Ver Televisão</text>
++        <text lang="SV">Se på TV</text>
++        <text lang="JA">TV放送</text>
++        <text lang="FI">Katso Televisiota</text>
++        <text lang="ZH_TW">觀看電視</text>
++        <text lang="SL">Glej TV</text>
++        <text lang="ET">Vaata telerit</text>
++        <text lang="RU">Смотреть ТВ</text>
++        <text lang="AR">شاهد التلفاز</text>
++        <text lang="PL">Oglądanie TV</text>
++        <text lang="HE">צפיה בטלויזיה</text>
++        <text lang="HU">TV nézés</text>
++        <description>Watch live television</description>
++        <description lang="DE">Jetzt Fernsehen schauen</description>
++        <action>TV_WATCH_LIVE</action>
++    </button>
++    
++    <button>
+         <type>MENU_MEDIA_LIBRARY</type>
+         <text>Media Library</text>
+         <text lang="IT">Multimedia</text>
+@@ -125,58 +150,9 @@
+     </button>
+ 
+     <button>
+-        <type>TV_WATCH_TV</type>
+-        <text>Watch TV</text>
+-        <text lang="IT">Guarda la TV</text>
+-        <text lang="ES">Ver la TV</text>
+-        <text lang="NL">TV Kijken</text>
+-        <text lang="DE">Fernsehen</text>
+-        <text lang="IS">Horfa á sjónvarp</text>
+-        <text lang="PT">Ver Televisão</text>
+-        <text lang="SV">Se på TV</text>
+-        <text lang="JA">TV放送</text>
+-        <text lang="FI">Katso Televisiota</text>
+-        <text lang="ZH_TW">觀看電視</text>
+-        <text lang="SL">Glej TV</text>
+-        <text lang="ET">Vaata telerit</text>
+-        <text lang="RU">Смотреть ТВ</text>
+-        <text lang="AR">شاهد التلفاز</text>
+-        <text lang="PL">Oglądanie TV</text>
+-        <text lang="HE">צפיה בטלויזיה</text>
+-        <text lang="HU">TV nézés</text>
+-        <description>Watch live television</description>
+-        <description lang="DE">Jetzt Fernsehen schauen</description>
+-        <action>TV_WATCH_LIVE</action>
+-    </button>
+-
+-    <button>
+         <type>MENU_UTILITIES_SETUP</type>
+-        <text>Utilities / Setup</text>
+-        <text lang="IT">Impostazioni</text>
+-        <text lang="ES">Configuración</text>
+-        <text lang="DE">Zubehör / Konfiguration</text>
+-        <text lang="IS">Uppsetning</text>
+-        <text lang="NL">Configuratie</text>
+-        <text lang="PT">Utensílios</text>
+-        <text lang="SV">Verktyg / Inställningar</text>
+-        <text lang="JA">設定</text>
+-        <text lang="FI">Oheis/Asetukset</text>
+-        <text lang="ZH_TW">工具/設定</text>
+-        <text lang="SL">Nastavitve</text>
+-        <text lang="ET">Utiliidid / sätted</text>
+-        <text lang="RU">Утилиты / Настройки</text>
+-        <text lang="AR">تضبيطات</text>
+-        <text lang="PL">Narzędzia / ustawienia</text>
+-        <text lang="HE">עזרים / הגדרות</text>
+-        <text lang="HU">Eszközök / Beállítások</text>
+-        <alttext lang="DE">Verschiedenes</alttext>
+-        <alttext lang="SV">Inställningar</alttext>
+-        <alttext lang="ET">Sätted</alttext>
+-        <alttext lang="RU">Настройки</alttext>
+-        <alttext lang="AR">تضبيطات</alttext>
+-        <description>Configure MythTV and plugins</description>
+-        <description lang="DE">MythTV und Plugins konfigurieren</description>
+-        <action>MENU util_menu.xml</action>
++        <text>Service Menu</text>
++        <action>MENU linhes.xml</action>
+     </button>
+ 
+     <!-- <button>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml
new file mode 100644
index 0000000..5914b33
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythbackup.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>BACKUP</type>
+     <text>Do you wish to backup?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>BACKUP</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/mythbackup</action>
+   </button>
+   
+   <button>
+     <type>BACKUP</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml
new file mode 100644
index 0000000..8f5c285
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/mythrestore.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>RESTORE</type>
+     <text>Do you wish to restore?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>RESTORE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/mythrestore</action>
+   </button>
+   
+   <button>
+     <type>BACKUP</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch
new file mode 100644
index 0000000..b4b1411
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/optical_menu.xml.patch
@@ -0,0 +1,16 @@
+--- optical_menu.xml.orig	2009-03-23 20:05:43.000000000 +0000
++++ optical_menu.xml	2009-03-23 20:10:02.000000000 +0000
+@@ -134,6 +134,13 @@
+     </button>
+ 
+     <button>
++        <type>DVD_RIP</type>
++        <text>Import video files from DVD</text>
++	<description>Import video files from a data DVD</description>
++        <action>EXEC /usr/LH/bin/importfiles.sh</action>
++    </button>
++
++    <button>
+         <type>EJECT</type>
+         <text>Eject media</text>
+         <text lang="IT">Espelli Media</text>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh
new file mode 100755
index 0000000..34d8b8c
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/original/create_patch.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+for i in *.xml
+do
+	diff -u $i.orig $i > ../$i.patch
+done
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml
new file mode 100644
index 0000000..f56bb6f
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/setup.xml
@@ -0,0 +1,111 @@
+<mythmenu name="MAIN">
+
+   <button>
+     <type>SETUP_GENERAL</type>
+     <text>1. General</text>
+     <text lang="IT">1. Generale</text>
+     <text lang="PT">1. Geral</text>
+     <text lang="SV">1. Generellt</text>
+     <text lang="JA">1. 一般</text>
+     <text lang="DE">1. Allgemeines</text>
+     <text lang="FI">1. Yleiset</text>
+     <text lang="FR">1. Général</text>
+     <text lang="SI">1. Splošno</text>
+     <text lang="ET">1. Üldine</text>
+     <text lang="NB">1 Generelt</text>
+     <text lang="DK">1. Generelt</text>
+     <text lang="ES">1. General</text>
+     <text lang="CZ">1. Obecný</text>
+     <text lang="RU">1. Общие</text>
+     <action>GENERAL</action>
+   </button>
+
+   <button>
+     <type>SETUP_CAPTURE_CARDS</type>
+     <text>2. Capture cards</text>
+     <text lang="IT">2. Schede di Acquisizione</text>
+     <text lang="PT">2. Placas de Captura</text>
+     <text lang="SV">2. TV-kort</text>
+     <text lang="JA">2. キャプチャカード</text>
+     <text lang="DE">2. TV-Karten</text>
+     <text lang="FI">2. TV-kortit</text>
+     <text lang="FR">2. Cartes d'acquisition</text>
+     <text lang="SI">2. Kartice za zajem</text>
+     <text lang="ET">2. TV-kaardid</text>
+     <text lang="NB">2 TV-kort</text>
+     <text lang="DK">2. TV-kort</text>
+     <text lang="ES">2. Capturadoras</text>
+     <text lang="CZ">2. Zachytávací karty</text>
+     <text lang="RU">2. Карты захвата</text>
+     <action>CAPTURE CARDS</action>
+   </button>
+
+   <button>
+     <type>SETUP_VIDEO_SOURCES</type>
+     <text>3. Video sources</text>
+     <text lang="IT">3. Fonte Video</text>
+     <text lang="PT">3. Fontes de Vídeo</text>
+     <text lang="SV">3. Videokällor</text>
+     <text lang="JA">3. ビデオソース</text>
+     <text lang="DE">3. Videoquellen</text>
+     <text lang="FI">3. Kuvanlähteet</text>
+     <text lang="FR">3. Sources vidéo</text>
+     <text lang="SI">3. Video viri</text>
+     <text lang="ET">3. Videosisendid</text>
+     <text lang="NB">3 Videokilder</text>
+     <text lang="DK">3. Videokilder</text>
+     <text lang="ES">3. Fuentes de Vídeo</text>
+     <text lang="CZ">3. Zdroje obrazu</text>
+     <text lang="RU">3. Видео источники</text>
+     <action>VIDEO SOURCES</action>
+   </button>
+
+   <button>
+     <type>SETUP_INPUT_CONNECTIONS</type>
+     <text>4. Input connections</text>
+     <text lang="IT">4. Connessioni di Ingresso</text>
+     <text lang="PT">4. Ligações de Entrada</text>
+     <text lang="SV">4. Anslutningar</text>
+     <text lang="JA">4. 入力とソースの接続</text>
+     <text lang="DE">4. Verknüpfungen</text>
+     <text lang="FI">4. Sisääntuloasetukset</text>
+     <text lang="FR">4. Entrées Vidéos</text>
+     <text lang="SI">4. Vhodne povezave</text>
+     <text lang="ET">4. Sisendite ühendused</text>
+     <text lang="NB">4 Inndata</text>
+     <text lang="DK">4. Indgange</text>
+     <text lang="ES">4. Conexiones</text>
+     <text lang="CZ">4. Připojení vstupů</text>
+     <text lang="RU">4. Соединение входов</text>
+     <action>CARD INPUTS</action>
+   </button>
+
+   <button>
+     <type>SETUP_CHANNEL_EDITOR</type>
+     <text>5. Channel Editor</text>
+     <text lang="IT">5. Modifica Canali</text>
+     <text lang="SV">5. Kanaleditor</text>
+     <text lang="JA">5. チャンネル設定</text>
+     <text lang="DE">5. Sender bearbeiten</text>
+     <text lang="FI">5. Kanavanviritys</text>
+     <text lang="FR">5. Editeur de chaînes</text>
+     <text lang="SI">5. Urejanje kanalov</text>
+     <text lang="ET">5. Kanaliredaktor</text>
+     <text lang="NB">5 Kanalredigerer</text>
+     <text lang="DK">5. Kanal opsætning</text>
+     <text lang="ES">5. Editor Canales</text>
+     <text lang="CZ">5. Editor kanálů</text>
+     <text lang="RU">5. Редактор каналов</text>
+     <action>CHANNEL EDITOR</action>
+   </button>
+
+   <button>
+     <type>SETUP_STORAGE_GROUPS</type>
+     <text>6. Storage Directories</text>
+     <text lang="IT">6. Cartelle</text>
+     <text lang="FI">Tallennusryhmät</text>
+     <text lang="SV">Lagringsgrupper</text>
+     <action>STORAGE GROUPS</action>
+   </button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml
new file mode 100644
index 0000000..e317b36
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/siriusmenu.xml
@@ -0,0 +1,419 @@
+<mythmenu name="SIRIUS">
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Hits 1</text>
+      <action>EXEC /usr/bin/cliSipie siriushits1</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>StarLite</text>
+      <action>EXEC /usr/bin/cliSipie starlite</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Love</text>
+      <action>EXEC /usr/bin/cliSipie siriuslove</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Movin EZ</text>
+      <action>EXEC /usr/bin/cliSipie movineasy</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Gold</text>
+      <action>EXEC /usr/bin/cliSipie siriusgold</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>'60s Vibrations</text>
+      <action>EXEC /usr/bin/cliSipie 60svibrations</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Totally '70s</text>
+      <action>EXEC /usr/bin/cliSipie totally70s</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Big '80s</text>
+      <action>EXEC /usr/bin/cliSipie big80s</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>ThePulse</text>
+      <action>EXEC /usr/bin/cliSipie thepulse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Bridge</text>
+      <action>EXEC /usr/bin/cliSipie thebridge</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BBC Radio 1</text>
+      <action>EXEC /usr/bin/cliSipie bbcradio1</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Super Shuffle</text>
+      <action>EXEC /usr/bin/cliSipie supershuffle</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Elvis Radio</text>
+      <action>EXEC /usr/bin/cliSipie elvisradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Classic Vinyl</text>
+      <action>EXEC /usr/bin/cliSipie classicvinyl</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Classic Rewind</text>
+      <action>EXEC /usr/bin/cliSipie classicrewind</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>TheVault</text>
+      <action>EXEC /usr/bin/cliSipie thevault</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Jam_ON</text>
+      <action>EXEC /usr/bin/cliSipie jamon</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spectrum</text>
+      <action>EXEC /usr/bin/cliSipie thespectrum</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BuzzSaw</text>
+      <action>EXEC /usr/bin/cliSipie buzzsaw</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Octane</text>
+      <action>EXEC /usr/bin/cliSipie octane</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Alt Nation</text>
+      <action>EXEC /usr/bin/cliSipie altnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>1st Wave</text>
+      <action>EXEC /usr/bin/cliSipie firstwave</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hair Nation</text>
+      <action>EXEC /usr/bin/cliSipie hairnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>'90s Alternative</text>
+      <action>EXEC /usr/bin/cliSipie 90salternative</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Garage</text>
+      <action>EXEC /usr/bin/cliSipie undergroundgarage</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Left of Center</text>
+      <action>EXEC /usr/bin/cliSipie leftofcenter</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hard Attack</text>
+      <action>EXEC /usr/bin/cliSipie hardattack</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Faction</text>
+      <action>EXEC /usr/bin/cliSipie faction</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Punk</text>
+      <action>EXEC /usr/bin/cliSipie punk</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>The Coffee House</text>
+      <action>EXEC /usr/bin/cliSipie coffeehouse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Margaritaville</text>
+      <action>EXEC /usr/bin/cliSipie radiomargaritaville</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Disorder</text>
+      <action>EXEC /usr/bin/cliSipie siriusdisorder</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Reggae</text>
+      <action>EXEC /usr/bin/cliSipie reggaerhythms</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Area 33</text>
+      <action>EXEC /usr/bin/cliSipie area33</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Boombox</text>
+      <action>EXEC /usr/bin/cliSipie boombox</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Chill</text>
+      <action>EXEC /usr/bin/cliSipie chill</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>The Beat</text>
+      <action>EXEC /usr/bin/cliSipie thebeat</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Strobe</text>
+      <action>EXEC /usr/bin/cliSipie thestrobe</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hip-Hop Nation</text>
+      <action>EXEC /usr/bin/cliSipie hiphopnation</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>BackSpin</text>
+      <action>EXEC /usr/bin/cliSipie backspin</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Shade 45</text>
+      <action>EXEC /usr/bin/cliSipie shade45</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Hot Jamz</text>
+      <action>EXEC /usr/bin/cliSipie hotjamz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Heart  &amp; Soul</text>
+      <action>EXEC /usr/bin/cliSipie heartandsoul</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>SoulTown</text>
+      <action>EXEC /usr/bin/cliSipie soultown</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>New Country</text>
+      <action>EXEC /usr/bin/cliSipie newcountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Prime Country</text>
+      <action>EXEC /usr/bin/cliSipie primecountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Roadhouse</text>
+      <action>EXEC /usr/bin/cliSipie theroadhouse</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Outlaw Country</text>
+      <action>EXEC /usr/bin/cliSipie outlawcountry</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Bluegrass</text>
+      <action>EXEC /usr/bin/cliSipie bluegrass</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spirit</text>
+      <action>EXEC /usr/bin/cliSipie spirit</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Praise</text>
+      <action>EXEC /usr/bin/cliSipie praise</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Planet Jazz</text>
+      <action>EXEC /usr/bin/cliSipie planetjazz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>JazzCafe</text>
+      <action>EXEC /usr/bin/cliSipie jazzcafe</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>PureJazz</text>
+      <action>EXEC /usr/bin/cliSipie purejazz</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Spa 73</text>
+      <action>EXEC /usr/bin/cliSipie spa73</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Blues</text>
+      <action>EXEC /usr/bin/cliSipie siriusblues</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Siriusly Sinatra</text>
+      <action>EXEC /usr/bin/cliSipie siriuslysinatra</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Broadway's Best</text>
+      <action>EXEC /usr/bin/cliSipie broadwaysbest</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Symphony Hall</text>
+      <action>EXEC /usr/bin/cliSipie symphonyhall</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Met Opera Radio</text>
+      <action>EXEC /usr/bin/cliSipie metropolitanopera</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Pops</text>
+      <action>EXEC /usr/bin/cliSipie siriuspops</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Universo Latino</text>
+      <action>EXEC /usr/bin/cliSipie universolatino</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Rumbon</text>
+      <action>EXEC /usr/bin/cliSipie rumbon</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Martha Stewart</text>
+      <action>EXEC /usr/bin/cliSipie marthastewartlivingradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius Stars</text>
+      <action>EXEC /usr/bin/cliSipie siriusstars</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>OutQ Gay Radio</text>
+      <action>EXEC /usr/bin/cliSipie siriusoutq</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Patriot</text>
+      <action>EXEC /usr/bin/cliSipie siriuspatriot</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Left</text>
+      <action>EXEC /usr/bin/cliSipie siriusleft</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>CNN</text>
+      <action>EXEC /usr/bin/cliSipie cnn</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>wrn</text>
+      <action>EXEC /usr/bin/cliSipie wrn</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Blue Collar Comedy</text>
+      <action>EXEC /usr/bin/cliSipie bluecollarcomedy</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Raw Dog Comedy</text>
+      <action>EXEC /usr/bin/cliSipie rawdog</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Laugh Break Comedy</text>
+      <action>EXEC /usr/bin/cliSipie laughbreak</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>thefoxxhole</text>
+      <action>EXEC /usr/bin/cliSipie thefoxxhole</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>lime</text>
+      <action>EXEC /usr/bin/cliSipie lime</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Kids Stuff</text>
+      <action>EXEC /usr/bin/cliSipie kidsstuff</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Catholic Channel</text>
+      <action>EXEC /usr/bin/cliSipie thecatholicchannel</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>EWTN</text>
+      <action>EXEC /usr/bin/cliSipie ewtnglobal</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>christiantalk</text>
+      <action>EXEC /usr/bin/cliSipie christiantalk</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Sirius NFL Radio</text>
+      <action>EXEC /usr/bin/cliSipie siriusnflradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Maxim Radio</text>
+      <action>EXEC /usr/bin/cliSipie maximradio</action>
+   </button>
+   <button>
+      <type>MUSIC</type>
+      <text>Cosmo Radio</text>
+      <action>EXEC /usr/bin/cliSipie cosmopolitanradio</action>
+   </button>
+   <button>
+     <type>TV_DELETE</type>
+     <text>Stop Listening</text>
+     <action>EXEC /usr/bin/sipie_kill</action>
+  </button>
+
+</mythmenu>
+
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Check for updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Perform updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>View files to be upgraded.</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch
new file mode 100644
index 0000000..3a1072a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/util_menu.xml.patch
@@ -0,0 +1,16 @@
+--- util_menu.xml.orig	2009-03-23 18:43:18.000000000 +0000
++++ util_menu.xml	2009-03-23 20:16:56.000000000 +0000
+@@ -56,6 +56,13 @@
+     </button>
+ 
+     <button>
++        <type>VIDEO_SCREENSHOOTER</type>
++        <text>Thumbnail Generator</text>
++        <description>Generate thumbnail images for videos</description>
++        <action>EXEC /usr/LH/bin/shootscreens-mythtv.sh</action>
++    </button>
++
++    <button>
+         <type>SETUP_KEYS</type>
+         <text>Edit Keys</text>
+         <text lang="IT">Modifica Tasti</text>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml
new file mode 100644
index 0000000..6b26d11
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/menu-xml/xmmenu.xml
@@ -0,0 +1,574 @@
+<!-- Current as of April 25, 2007 -->
+<mythmenu name="XM">
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '40s</text>
+		<action>EXEC /usr/bin/xamp kill 4</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '50s</text>
+		<action>EXEC /usr/bin/xamp kill 5</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '60s</text>
+		<action>EXEC /usr/bin/xamp kill 6</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '70s</text>
+		<action>EXEC /usr/bin/xamp kill 7</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '80s</text>
+		<action>EXEC /usr/bin/xamp kill 8</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The '90s</text>
+		<action>EXEC /usr/bin/xamp kill 9</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>America</text>
+		<action>EXEC /usr/bin/xamp kill 10</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>X Country</text>
+		<action>EXEC /usr/bin/xamp kill 12</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Willie's Place</text>
+		<action>EXEC /usr/bin/xamp kill 13</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bluegrass Junction</text>
+		<action>EXEC /usr/bin/xamp kill 14</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Village</text>
+		<action>EXEC /usr/bin/xamp kill 15</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Highway 16</text>
+		<action>EXEC /usr/bin/xamp kill 16</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>US Country</text>
+		<action>EXEC /usr/bin/xamp kill 17</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>20 on 20</text>
+		<action>EXEC /usr/bin/xamp kill 20</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Heart</text>
+		<action>EXEC /usr/bin/xamp kill 23</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Blend</text>
+		<action>EXEC /usr/bin/xamp kill 25</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Flight 26</text>
+		<action>EXEC /usr/bin/xamp kill 26</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Cinemagic</text>
+		<action>EXEC /usr/bin/xamp kill 27</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>On Broadway</text>
+		<action>EXEC /usr/bin/xamp kill 28</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>U-Pop</text>
+		<action>EXEC /usr/bin/xamp kill 29</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Hitlist</text>
+		<action>EXEC /usr/bin/xamp kill 30</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Torch</text>
+		<action>EXEC /usr/bin/xamp kill 31</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Message</text>
+		<action>EXEC /usr/bin/xamp kill 32</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Spirit</text>
+		<action>EXEC /usr/bin/xamp kill 33</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>enLighten</text>
+		<action>EXEC /usr/bin/xamp kill 34</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Deep Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 40</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Boneyard</text>
+		<action>EXEC /usr/bin/xamp kill 41</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Liquid Metal</text>
+		<action>EXEC /usr/bin/xamp kill 42</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XMU</text>
+		<action>EXEC /usr/bin/xamp kill 43</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fred</text>
+		<action>EXEC /usr/bin/xamp kill 44</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Cafe</text>
+		<action>EXEC /usr/bin/xamp kill 45</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Top Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 46</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Ethel</text>
+		<action>EXEC /usr/bin/xamp kill 47</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Squizz</text>
+		<action>EXEC /usr/bin/xamp kill 48</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Big Tracks</text>
+		<action>EXEC /usr/bin/xamp kill 49</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Loft</text>
+		<action>EXEC /usr/bin/xamp kill 50</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Music Lab</text>
+		<action>EXEC /usr/bin/xamp kill 51</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Verge</text>
+		<action>EXEC /usr/bin/xamp kill 52</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fungus</text>
+		<action>EXEC /usr/bin/xamp kill 53</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Lucy</text>
+		<action>EXEC /usr/bin/xamp kill 54</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Soul Street</text>
+		<action>EXEC /usr/bin/xamp kill 60</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Flow</text>
+		<action>EXEC /usr/bin/xamp kill 61</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Suite 62</text>
+		<action>EXEC /usr/bin/xamp kill 62</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Groove</text>
+		<action>EXEC /usr/bin/xamp kill 64</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Rhyme</text>
+		<action>EXEC /usr/bin/xamp kill 65</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>RAW</text>
+		<action>EXEC /usr/bin/xamp kill 66</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The City</text>
+		<action>EXEC /usr/bin/xamp kill 67</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Heat</text>
+		<action>EXEC /usr/bin/xamp kill 68</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Real Jazz</text>
+		<action>EXEC /usr/bin/xamp kill 70</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Watercolors</text>
+		<action>EXEC /usr/bin/xamp kill 71</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Beyond Jazz</text>
+		<action>EXEC /usr/bin/xamp kill 72</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>High Standards</text>
+		<action>EXEC /usr/bin/xamp kill 73</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bluesville</text>
+		<action>EXEC /usr/bin/xamp kill 74</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Hear Music</text>
+		<action>EXEC /usr/bin/xamp kill 75</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fine Tuning</text>
+		<action>EXEC /usr/bin/xamp kill 76</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Audio Visions</text>
+		<action>EXEC /usr/bin/xamp kill 77</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Escape</text>
+		<action>EXEC /usr/bin/xamp kill 78</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>On The Rocks</text>
+		<action>EXEC /usr/bin/xamp kill 79</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Move</text>
+		<action>EXEC /usr/bin/xamp kill 80</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>BPM</text>
+		<action>EXEC /usr/bin/xamp kill 81</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The System</text>
+		<action>EXEC /usr/bin/xamp kill 82</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Chrome</text>
+		<action>EXEC /usr/bin/xamp kill 83</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM-Chill</text>
+		<action>EXEC /usr/bin/xamp kill 84</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Fuego</text>
+		<action>EXEC /usr/bin/xamp kill 90</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Viva</text>
+		<action>EXEC /usr/bin/xamp kill 91</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Aguila</text>
+		<action>EXEC /usr/bin/xamp kill 92</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Caliente</text>
+		<action>EXEC /usr/bin/xamp kill 94</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Luna</text>
+		<action>EXEC /usr/bin/xamp kill 95</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Air Musique</text>
+		<action>EXEC /usr/bin/xamp kill 100</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Joint</text>
+		<action>EXEC /usr/bin/xamp kill 101</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Sur La Route</text>
+		<action>EXEC /usr/bin/xamp kill 102</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>World Zone</text>
+		<action>EXEC /usr/bin/xamp kill 103</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Ngoma</text>
+		<action>EXEC /usr/bin/xamp kill 104</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Classics</text>
+		<action>EXEC /usr/bin/xamp kill 110</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Vox</text>
+		<action>EXEC /usr/bin/xamp kill 112</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Pops</text>
+		<action>EXEC /usr/bin/xamp kill 113</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Kids</text>
+		<action>EXEC /usr/bin/xamp kill 116</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Bob Edwards Show</text>
+		<action>EXEC /usr/bin/xamp kill 133</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>XM Comedy</text>
+		<action>EXEC /usr/bin/xamp kill 150</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Laugh USA</text>
+		<action>EXEC /usr/bin/xamp kill 151</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Special X</text>
+		<action>EXEC /usr/bin/xamp kill 154</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Agenda</text>
+		<action>EXEC /usr/bin/xamp kill 134</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Oprah and Friends</text>
+		<action>EXEC /usr/bin/xamp kill 156</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>The Virus</text>
+		<action>EXEC /usr/bin/xamp kill 202</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>1 Hit Wonders</text>
+		<action>EXEC /usr/bin/xamp kill 300</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Metalcore</text>
+		<action>EXEC /usr/bin/xamp kill 301</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Indie First</text>
+		<action>EXEC /usr/bin/xamp kill 302</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Late Night Mix</text>
+		<action>EXEC /usr/bin/xamp kill 303</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Sessions@AOL</text>
+		<action>EXEC /usr/bin/xamp kill 304</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>Shuffle</text>
+		<action>EXEC /usr/bin/xamp kill 305</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Rock First</text>
+		<action>EXEC /usr/bin/xamp kill 306</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Country First</text>
+		<action>EXEC /usr/bin/xamp kill 307</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Hip Hop First</text>
+		<action>EXEC /usr/bin/xamp kill 308</action>
+	</button>
+
+	<button>
+		<type>MUSIC</type>
+		<text>New Pop First</text>
+		<action>EXEC /usr/bin/xamp kill 309</action>
+	</button>
+
+	<button>
+		<type>TV_DELETE</type>
+		<text>Stop Listening</text>
+		<action>EXEC /usr/bin/xamp kill</action>
+	</button>
+
+</mythmenu>
diff --git a/abs/core/mythtv/stable-0.23/mythtv/myth.sh b/abs/core/mythtv/stable-0.23/mythtv/myth.sh
new file mode 100755
index 0000000..fb7122c
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/myth.sh
@@ -0,0 +1,4 @@
+export PATH=$PATH:/usr/local/bin
+# set core file size to 0
+ulimit -c 0
+export MALLOC_CHECK_=0
\ No newline at end of file
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythbackend b/abs/core/mythtv/stable-0.23/mythtv/mythbackend
new file mode 100755
index 0000000..93773a2
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythbackend
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/bin/mythbackend`
+case "$1" in
+  start)
+    stat_busy "Starting MythTV Backend"
+    [ ! -e /var/run/mysqld.pid ] && echo -n "mysqld not started" && stat_fail && exit
+    [ -z "$PID" ] && /usr/bin/mythbackend -d -l /var/log/mythbackend.log -v important 
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      echo $PID > /var/run/mythbackend.pid
+      add_daemon mythbackend
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping MythTV Backend"
+    [ ! -z "$PID" ]  && kill $PID &>/dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon mythbackend
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1s 
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr
new file mode 100644
index 0000000..4f218bc
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythbackend.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh
new file mode 100755
index 0000000..e7a7b70
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythbackend.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+#
+#	/etc/rc.d/init.d/mythbackend
+#
+# Starts the mythbackend as a daemon
+#
+# chkconfig: 345 90 10
+# description: Starts the mythbackend process as a daemon after the XWindows \
+#              system is started, in runlevel 5. This allows scheduled \
+#              recordings to occur without manual intervention.
+# processname: mythbackend
+
+# Copyright (c) by Michael Thomson <linux at m-thomson dot net>
+# With thanks to Stu Tomlinson <stu at nosnilmot dot com>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+
+# Default values to use if none are supplied in the config file.
+# User who should start the mythbackend processes
+MBE_USER="root"
+# Directory holding the mythbackend binary
+MBE_LOCATION="/usr/local/bin/"
+# Name of mythbackend binary
+MBE_PROG="mythbackend"
+# Full path to mythbackend log file
+MBE_LOGFILE="/var/log/mythtv/mythbackend.log"
+
+# Source function library.
+. /etc/init.d/functions
+
+# Source config file if available
+if [ -f "/etc/sysconfig/mythbackend" ]; then
+  . /etc/sysconfig/mythbackend
+fi
+
+test -x ${MBE_LOCATION}${MBE_PROG} || exit 0
+
+RETVAL=0
+
+#
+#	See how we were called.
+#
+
+start() {
+	# Check if mythbackend is already running
+	if [ ! -f /var/lock/subsys/${MBE_PROG} ]; then
+	    echo -n "Starting ${MBE_PROG}: "
+	    # /usr/local/bin/mythbackend -d -l /some/log/file
+	    #daemon --user ${MBE_USER} ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+	    ${MBE_LOCATION}${MBE_PROG} -d -l ${MBE_LOGFILE}
+	    RETVAL=$?
+	    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/${MBE_PROG}
+	    echo
+	fi
+	return $RETVAL
+}
+
+stop() {
+	echo -n "Stopping ${MBE_PROG}: "
+	killproc ${MBE_LOCATION}${MBE_PROG}
+	RETVAL=$?
+	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/${MBE_PROG}
+	echo
+        return $RETVAL
+}
+
+
+restart() {
+	stop
+	start
+}	
+
+reload() {
+	restart
+}	
+
+status_at() {
+ 	status ${MBE_LOCATION}${MBE_PROG}
+}
+
+case "$1" in
+start)
+	start
+	;;
+stop)
+	stop
+	;;
+reload|restart)
+	restart
+	;;
+condrestart)
+	if [ -f /var/lock/subsys/${MBE_PROG} ]; then
+	    restart
+	fi
+	;;
+status)
+	status_at
+	;;
+*)
+	echo "Usage: $0 {start|stop|restart|condrestart|status}"
+	exit 1
+esac
+
+exit $?
+exit $RETVAL
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr b/abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr
new file mode 100644
index 0000000..1580533
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythfrontend.lr
@@ -0,0 +1,9 @@
+/var/log/mythtv/mythfrontend.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/core/mythtv/stable-0.23/mythtv/mythtv.install b/abs/core/mythtv/stable-0.23/mythtv/mythtv.install
new file mode 100755
index 0000000..0524f86
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/mythtv.install
@@ -0,0 +1,47 @@
+# arg 1:  the new package version
+post_install() {
+	if [ ! -d /var/log/mythtv ]
+	then
+		mkdir -p /var/log/mythv
+		chown -R mythtv /var/log/mythtv
+		echo "---" > /var/log/mythtv/mythbackend.log
+		chown mythtv /var/log/mythtv/mythbackend.log
+	fi
+	ln -s /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/is.xml
+}
+
+pre_upgrade() {
+	if [ ! -L /usr/share/mythtv/is.xml ]
+	then
+		mv /usr/share/mythtv/is.xml /usr/share/mythtv/is.xml.pre
+	else
+		mv /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/themes/defaultmenu/is.xml.pre
+	fi
+}
+
+post_upgrade() {
+	if [ ! -d /var/log/mythtv ]
+	then
+		mkdir -p /var/log/mythv
+		chown -R mythtv /var/log/mythtv
+	fi
+	if [ -e /usr/share/mythtv/is.xml.pre ]
+	then
+		rm -fr /usr/share/mythtv/themes/defaultmenu/is.xml
+		mv /usr/share/mythtv/is.xml.pre /usr/share/mythtv/themes/defaultmenu/is.xml
+		ln -s /usr/share/mythtv/themes/defaultmenu/is.xml /usr/share/mythtv/is.xml
+	else
+		mv /usr/share/mythtv/themes/defaultmenu/is.xml.pre /usr/share/mythtv/themes/defaultmenu/is.xml
+	fi
+}
+
+
+# arg 1:  the old package version
+post_remove() {
+	/bin/true
+
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/stable-0.23/mythtv/pretty b/abs/core/mythtv/stable-0.23/mythtv/pretty
new file mode 100755
index 0000000..7e0ab21
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/pretty
@@ -0,0 +1,9 @@
+#!/bin/bash
+if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
+then
+        su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
+elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
+then
+        su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+fi
+
diff --git a/abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch b/abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch
new file mode 100644
index 0000000..0fc452a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythtv/smolt_jump.patch
@@ -0,0 +1,30 @@
+Index: programs/mythfrontend/networkcontrol.cpp
+===================================================================
+--- programs/mythfrontend/networkcontrol.cpp	(revision 19291)
++++ programs/mythfrontend/networkcontrol.cpp	(working copy)
+@@ -83,6 +83,7 @@
+     jumpMap["zoneminderliveview"]    = "ZoneMinder Live View";
+     jumpMap["zoneminderevents"]      = "ZoneMinder Events";
+     jumpMap["snapshot"]              = "ScreenShot";
++    jumpMap["mythsmolt"]             = "MythSmolt";
+ 
+     // These jump point names match the (lowercased) locations from gContext
+     jumpMap["channelrecpriority"]    = "Channel Recording Priorities";
+@@ -191,7 +192,7 @@
+     pthread_create(&command_thread, NULL, CommandThread, this);
+ 
+     gContext->addListener(this);
+-    
++
+     connect(this, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ }
+ 
+@@ -307,7 +308,7 @@
+         cs = new QTextStream(s);
+         cs->setCodec("UTF-8");
+     }
+-    
++
+     if (client)
+     {
+         closedOldConn = true;
diff --git a/abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD b/abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD
new file mode 100644
index 0000000..3dafe6a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythvideo/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythvideo
+pkgver=0.23
+pkgrel=29
+pkgdesc="Video playback and browsing plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'mplayer' 'perlxml' 'perl-libwww' 'perl-uri' 'perl-xml-simple' 'ffmpeg')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythvideo || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythweather/PKGBUILD b/abs/core/mythtv/stable-0.23/mythweather/PKGBUILD
new file mode 100644
index 0000000..bb92f2d
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythweather/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythweather
+pkgver=0.23
+pkgrel=30
+pkgdesc="Weather checking plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'wget' 'perl-date-manip' 'perl-xml-simple' 'perl-xml-xpath' 'perl-image-size' 'perl-datetime-format-iso8601' 'perl-soap-lite')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythweather || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/stable-0.23/mythweb/PKGBUILD b/abs/core/mythtv/stable-0.23/mythweb/PKGBUILD
new file mode 100644
index 0000000..a3b581a
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythweb/PKGBUILD
@@ -0,0 +1,46 @@
+pkgname=mythweb
+pkgver=0.23
+pkgrel=29
+pkgdesc="Web interface for MythTV's backend"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'lighttpd' 'php' 'local-website')
+groups=('mythtv-extras')
+install=mythweb.install
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+DOCROOT=/data/srv/httpd/htdocs/mythweb
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
+
+#	cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+#   cp $startdir/src/mythplugins-$pkgver/mythweb/data/.htaccess $startdir/pkg/$DOCROOT
+    rsync -arp --exclude .svn --delete-excluded   $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+	rm $startdir/pkg/$DOCROOT/README
+	chown -R http:users $startdir/pkg/$DOCROOT
+	chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
+
+}
diff --git a/abs/core/mythtv/stable-0.23/mythweb/mythweb.install b/abs/core/mythtv/stable-0.23/mythweb/mythweb.install
new file mode 100644
index 0000000..470cbd1
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythweb/mythweb.install
@@ -0,0 +1,10 @@
+post_install() {
+	echo "You must create a symlink from /home/httpd/html/mythweb/video_dir"
+	echo "to your MythTV recordings directory. Don't forget to change the"
+	echo "permissions so that the webserver can read those files and create"
+	echo "thumbnails."  
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD b/abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD
new file mode 100644
index 0000000..8981f9f
--- /dev/null
+++ b/abs/core/mythtv/stable-0.23/mythzoneminder/PKGBUILD
@@ -0,0 +1,47 @@
+pkgname=mythzoneminder
+pkgver=0.23
+pkgrel=29
+pkgdesc="Integrates ZoneMinder into MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv>=0.23' 'zoneminder=1.23.3')
+groups=('mythtv-extras')
+
+patches=()
+source=('ftp://ftp.knoppmyth.net/R6/sources/mythplugins-0.23-fixes.tar.bz2' `echo${patches[@]:0}`)
+
+md5sums=('590c6e72c72e10d4c7edf72d7fb6b940')
+
+build() {
+
+	cd $startdir/src/mythplugins
+	svn update
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythzoneminder || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
+
diff --git a/abs/core/mythtv/trunk/clean_all.sh b/abs/core/mythtv/trunk/clean_all.sh
index 1ebdc43..b56450e 100755
--- a/abs/core/mythtv/trunk/clean_all.sh
+++ b/abs/core/mythtv/trunk/clean_all.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
 
 # clean up current directory
 rm -f *~
diff --git a/abs/core/mythtv/trunk/morethemes/PKGBUILD b/abs/core/mythtv/trunk/morethemes/PKGBUILD
index d3aad58..c8f892e 100644
--- a/abs/core/mythtv/trunk/morethemes/PKGBUILD
+++ b/abs/core/mythtv/trunk/morethemes/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=morethemes-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Additional themes for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/themes
 _svnmod=themes
 
@@ -39,11 +40,15 @@ build() {
 	make distclean
 
 	# configure
-	./configure --prefix=/usr || return 1
+#	./configure --prefix=/usr || return 1
+       ./configure --prefix=/usr
 
 	# build and install
 	. /etc/profile
-	make || return 1
-	make INSTALL_ROOT=$startdir/pkg install || return 1
-
+#	make || return 1
+#	make INSTALL_ROOT=$startdir/pkg install || return 1
+        make
+	make INSTALL_ROOT=$startdir/pkg install
+	return 0
+#### THIS PKGBUILD IS HACKED TO BUILD WITH ZERO CONTENT RIGHT NOW ####
 }
diff --git a/abs/core/mythtv/trunk/mp_all.sh b/abs/core/mythtv/trunk/mp_all.sh
index f9593ff..4aefd89 100755
--- a/abs/core/mythtv/trunk/mp_all.sh
+++ b/abs/core/mythtv/trunk/mp_all.sh
@@ -1,9 +1,9 @@
 #!/bin/sh
-pkgver=21495
+pkgver=23790
 pkgrel=1
 
 # NOTE: Make sure to build and install mythtv first BEFORE building anything else
-buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythflix' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
+buildlist=('mythtv' 'mytharchive' 'mythbrowser' 'mythgallery' 'mythgame' 'mythmovies' 'mythmusic' 'mythnetvision' 'mythnews' 'mythvideo' 'mythweather' 'mythzoneminder' 'mythweb' 'myththemes' 'morethemes')
 
 # build and install
 for i in `echo ${buildlist[@]:0}`
@@ -16,7 +16,7 @@ do
 	sed -i s/^pkgrel=.*/pkgrel=$pkgrel/ PKGBUILD
 
 	# make the package
-	mp -f -i --holdver || exit 1
+	mp -f -i --holdver --skipinteg || exit 1
 
 	# clean up afterwards
 	rm -rf pkg
diff --git a/abs/core/mythtv/trunk/mytharchive/PKGBUILD b/abs/core/mythtv/trunk/mytharchive/PKGBUILD
index 75779a1..20e9904 100644
--- a/abs/core/mythtv/trunk/mytharchive/PKGBUILD
+++ b/abs/core/mythtv/trunk/mytharchive/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mytharchive-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="MythTV plugin that lets you create DVDs from or archive your recorded shows."
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythbrowser/PKGBUILD b/abs/core/mythtv/trunk/mythbrowser/PKGBUILD
index 7495407..fdcefe0 100644
--- a/abs/core/mythtv/trunk/mythbrowser/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythbrowser/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythbrowser-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Mini web browser for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythgallery/PKGBUILD b/abs/core/mythtv/trunk/mythgallery/PKGBUILD
index 7480178..6415b96 100644
--- a/abs/core/mythtv/trunk/mythgallery/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythgallery/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythgallery-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Image gallery plugin for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythgame/PKGBUILD b/abs/core/mythtv/trunk/mythgame/PKGBUILD
index 8f2e582..e7d09ab 100644
--- a/abs/core/mythtv/trunk/mythgame/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythgame/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythgame-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Emulation plugin for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythmovies/PKGBUILD b/abs/core/mythtv/trunk/mythmovies/PKGBUILD
index aca7c73..f05180c 100644
--- a/abs/core/mythtv/trunk/mythmovies/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythmovies/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythmovies-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Displays information about movies playing in the area."
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythmusic/PKGBUILD b/abs/core/mythtv/trunk/mythmusic/PKGBUILD
index df6d23d..3d9f5ce 100644
--- a/abs/core/mythtv/trunk/mythmusic/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythmusic/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythmusic-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Music playing plugin for MythTV"
 url="http://www.mythtv.org"
@@ -14,6 +14,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythnetvision/PKGBUILD b/abs/core/mythtv/trunk/mythnetvision/PKGBUILD
new file mode 100644
index 0000000..c820ac5
--- /dev/null
+++ b/abs/core/mythtv/trunk/mythnetvision/PKGBUILD
@@ -0,0 +1,51 @@
+pkgname=mythnetvision-svn
+pkgver=23790
+pkgrel=1
+pkgdesc="Internet video plugin for MythTV"
+url="http://www.mythtv.org"
+license="GPL"
+arch=('i686' 'x86_64')
+
+depends=('mythtv-svn' 'python-pycurl' 'flashplugin')
+conflicts=('mythnetvision')
+groups=('mythtv-extras-svn')
+
+patches=()
+source=(`echo ${patches[@]:0}`)
+
+_svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
+_svnmod=mythplugins
+
+
+build() {
+
+	svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/$_svnmod
+
+	echo "--------------------------applying patches----------------------------------------------------"
+	for i in `echo ${patches[@]:0} `
+	do
+		echo applying $i
+		echo "-----------------------------"
+		patch -Np0  -i ${startdir}/src/$i  || return 1
+	done
+	echo "--------------------------done applying patches-----------------------------------------------"
+	
+	[ "$CARCH" = "i686"   ] && ARCH="i686"
+	[ "$CARCH" = "x86_64" ] && ARCH="x86-64"
+
+	# clean up
+	make distclean
+
+	# configure
+	./configure --prefix=/usr --cpu=${ARCH} --disable-all --enable-opengl \
+	--enable-mythnetvision || return 1
+
+	# build and install
+	. /etc/profile
+	make || return 1
+	make INSTALL_ROOT=$startdir/pkg install || return 1
+
+}
diff --git a/abs/core/mythtv/trunk/mythnews/PKGBUILD b/abs/core/mythtv/trunk/mythnews/PKGBUILD
index b411e08..630325c 100644
--- a/abs/core/mythtv/trunk/mythnews/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythnews/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythnews-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="News checking plugin for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/myththemes/PKGBUILD b/abs/core/mythtv/trunk/myththemes/PKGBUILD
index 5d300e5..9e10ba2 100755
--- a/abs/core/mythtv/trunk/myththemes/PKGBUILD
+++ b/abs/core/mythtv/trunk/myththemes/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=myththemes-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Themes for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/myththemes
 _svnmod=myththemes
 
diff --git a/abs/core/mythtv/trunk/mythtv/PKGBUILD b/abs/core/mythtv/trunk/mythtv/PKGBUILD
index db119bd..65b12db 100755
--- a/abs/core/mythtv/trunk/mythtv/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythtv/PKGBUILD
@@ -1,12 +1,12 @@
 pkgname=mythtv-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="A personal video recorder for Linux"
 url="http://www.mythtv.org"
 license="GPL"
 depends=('bash' 'mysql-clients>=5.0' 'qt' 'lame' 'lirc-utils' 'ffmpeg' \
         'faad2' 'libxv' 'libxvmc' 'libavc1394' 'libdc1394' 'libiec61883' \
-	'perl-net-upnp')
+	'perl-net-upnp' 'libvdpau')
 makedepends=('libgl' 'subversion')
 conflicts=('mythtv')
 replaces=()
@@ -56,7 +56,7 @@ build() {
 	--enable-vdpau --enable-xvmc --enable-xvmc-pro \
 	--enable-opengl-vsync --enable-libfaad --enable-dvb --enable-firewire \
 	--compile-type=release --with-bindings=perl,python \
-	--enable-audio-alsa --disable-audio-jack --disable-audio-arts || return 1
+	--enable-audio-alsa --disable-audio-jack --disable-audio-pulseoutput || return 1
 
 	# build and install
 	. /etc/profile
@@ -66,11 +66,12 @@ build() {
 	# install db schema, scripts and docs
 	install -m0644 database/mc.sql $startdir/pkg/usr/share/mythtv/ || return 1
 	install -D -m0755 ../mythbackend $startdir/pkg/etc/rc.d/mythbackend || return 1
-	cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
-	# cp ../QUICKSTART.archlinux $startdir/pkg/usr/share/mythtv/ || return 1
+#	cp -r docs $startdir/pkg/usr/share/mythtv/ || return 1
+    rsync -arp --exclude .svn --delete-excluded  docs $startdir/pkg/usr/share/mythtv/ || return 1
 
 	# install contrib
-	cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
+    rsync -arp --exclude .svn --delete-excluded  contrib $startdir/pkg/usr/share/mythtv/ || return 1
+	#cp -r contrib $startdir/pkg/usr/share/mythtv/ || return 1
 
 	# patch the xml LinHES style
 	cp -r $startdir/menu-xml/*.xml $startdir/pkg/usr/share/mythtv/themes/defaultmenu/
@@ -89,3 +90,8 @@ build() {
 	install -m0755 $startdir/src/pretty $startdir/pkg/etc/cron.hourly/
 }
 
+md5sums=('7ef6de58240e7aad389a0b13d91b1cf6'
+         '2babd4b8e146a7538d18dcd55695b0be'
+         'f735805a80b0d1180dee01f9df1b7004'
+         'f407d6af23e74a49540755420f84fa58'
+         'ca547c201e3dd4bf3882bebf7c648652')
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml
index f257920..ac52497 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/HOST_SETTINGS.xml
@@ -1,87 +1,94 @@
 <mythmenu name="HOST_SETTINGS">
 
    <button>
-       <type>MV_NETWORK_SETUP_MENU</type>
+      <type>MV_NETWORK_SETUP_MENU</type>
       <text>Network Settings</text>
       <action>EXEC  mythinstall -s network </action>
    </button>
 
    <button>
-       <type>MV_SYSTEM_SETUP_MENU</type>
-      <text>System type</text>
-        <action>EXEC  mythinstall -s hostype </action>
+      <type>MV_NETWORK_SETUP_MENU</type>
+      <text>DDNS Settings</text>
+      <action>EXEC  mythinstall -s ddns </action>
    </button>
-
    <button>
-       <type>MV_MISC_SETUP_MENU</type>
-      <text>Misc Settings</text>
-       <action>EXEC  mythinstall -s misc </action>
+      <type>MV_SYSTEM_SETUP_MENU</type>
+      <text>System Type</text>
+      <action>EXEC  mythinstall -s hostype </action>
    </button>
 
    <button>
-       <type>MV_SOFTWARE_MENU</type>
-      <text>Software</text>
-       <action>EXEC  mythinstall -s  plugins </action>
+      <type>MV_SCREENSAVER_SETUP_MENU</type>
+      <text>Screensaver Settings</text>
+      <action>EXEC  mythinstall -s screensaver </action>
    </button>
 
    <button>
-      <type>MV_SHUTDOWN_SETUP_MENU</type>
-      <text>Shutdown settings</text>
-        <action>EXEC  mythinstall -s sleep </action>
+      <type>MV_IR_SETUP_MENU</type>
+      <text>Remotes</text>
+       <action>EXEC  mythinstall -s ir </action>
    </button>
 
+   <button>
+      <type>MV_MISC_SETUP_MENU</type>
+      <text>Miscellanous Settings</text>
+      <action>EXEC  mythinstall -s misc </action>
+   </button>
 
-<button>
-   <type>MV_ADVANCED_X_SETUP_MENU</type>
-    <text>Display</text>
-    <action>EXEC  mythinstall -s advancedX</action>
-</button>
-
-<button>
-   <type>MV_ADVANCED_SETUP_MENU</type>
-    <text>Advanced settings</text>
-    <action>EXEC  mythinstall -s advanced</action>
-</button>
-
-
-<button>
-       <type>MV_AUDIO_SETUP_MENU</type>
-       <text>Audio settings</text>
-        <action>EXEC  mythinstall -s sound </action>
-</button>
+   <button>
+      <type>MV_SOFTWARE_MENU</type>
+      <text>Software</text>
+      <action>EXEC  mythinstall -s  plugins </action>
+   </button>
 
+   <button>
+      <type>MV_SHUTDOWN_SETUP_MENU</type>
+      <text>Shutdown Settings</text>
+      <action>EXEC  mythinstall -s sleep </action>
+   </button>
 
-<button>
-       <type>MV_ACCESS_SETUP_MENU</type>
-       <text>Access</text>
-       <action>EXEC  mythinstall -s accesscontrol </action>
-</button>
+   <button>
+      <type>MV_ADVANCED_X_SETUP_MENU</type>
+      <text>Display Settings</text>
+      <action>EXEC  mythinstall -s advancedX</action>
+   </button>
 
-<button>
-       <type>MV_USER_SETUP_MENU</type>
-       <text>Password </text>
-       <action>EXEC  mythinstall -s user </action>
-</button>
+   <button>
+      <type>MV_ADVANCED_SETUP_MENU</type>
+      <text>Advanced Settings</text>
+      <action>EXEC  mythinstall -s advanced</action>
+   </button>
 
-<button>
-       <type>MV_WEBACCESS_SETUP_MENU</type>
-       <text>Web security</text>
-       <action>EXEC  mythinstall -s webuser </action>
-</button>
+   <button>
+      <type>MV_AUDIO_SETUP_MENU</type>
+      <text>Audio Settings</text>
+       <action>EXEC  mythinstall -s sound </action>
+   </button>
 
+   <button>
+      <type>MV_ACCESS_SETUP_MENU</type>
+      <text>Access Control</text>
+      <action>EXEC  mythinstall -s accesscontrol </action>
+   </button>
 
+   <button>
+      <type>MV_USER_SETUP_MENU</type>
+      <text>User Accounts</text>
+      <action>EXEC  mythinstall -s user </action>
+   </button>
 
+   <button>
+      <type>MV_WEBACCESS_SETUP_MENU</type>
+      <text>Web Security</text>
+      <action>EXEC  mythinstall -s webuser </action>
+   </button>
 
    <!--
    <button>
-       <type>SETUP_MENU</type>
-       <text>Settings profile manager</text>
-        <action>EXEC  mythinstall -t </action>
-
+      <type>SETUP_MENU</type>
+      <text>Settings Profile Manager</text>
+      <action>EXEC  mythinstall -t </action>
    </button>
    -->
 
-
-
-
 </mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch b/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch
index 14cb5f9..81ea604 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/library.xml.patch
@@ -1,9 +1,9 @@
---- library.xml.orig	2009-03-23 18:43:18.000000000 +0000
-+++ library.xml	2009-03-23 19:52:30.000000000 +0000
-@@ -126,8 +126,7 @@
-         <text>Play Online Streams</text>
-         <text lang="HE">נגן מדיה מכוונת</text>
+--- library.xml.orig	2009-10-16 12:45:44.000000000 +0000
++++ library.xml	2009-10-16 17:21:44.000000000 +0000
+@@ -123,8 +123,7 @@
+         <text lang="HU">Online folyam lejátszása</text>
          <description></description>
+         <description lang="DE"></description>
 -        <action>PLUGIN mythstream</action>
 -        <depends>mythstream</depends>
 +        <action>MENU is.xml</action>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml
index 8bc929f..ebc848b 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/linhes.xml
@@ -1,36 +1,35 @@
 <mythmenu name="LinHES">
 
-   <button>
-     <type>SETUP_GENERAL</type>
-     <text>MythTV Configuration</text>
-     <text lang="IT">Impostazioni</text>
-     <text lang="ES">Configuración</text>
-     <text lang="CA">Configurar</text>
-     <text lang="FR">paramètres</text>
-     <text lang="DE">Zubehör / Konfiguration</text>
-     <text lang="DK">Tilbehør/Indstillinger</text>
-     <text lang="IS">Uppsetning</text>
-     <text lang="NL">Configuratie</text>
-     <text lang="PT">Utensílios</text>
-     <text lang="SV">Verktyg / Inställningar</text>
-     <text lang="JA">設定</text>
-     <text lang="FI">Oheis/Asetukset</text>
-     <text lang="ZH_TW">工具/設定</text>
-     <text lang="SI">Nastavitve</text>
-     <text lang="ET">Utiliidid / sätted</text>
-     <text lang="NB">Verktøy/Oppsett</text>
-     <text lang="CZ">Pomůcky</text>
-     <text lang="RU">Утилиты / Настройки</text>
-     <text lang="AR">تضبيطات</text>
-     <text lang="PL">Narzędzia / ustawienia</text>
-     <text lang="HE">עזרים / הגדרות</text>
-     <alttext lang="DE">Verschiedenes</alttext>
-     <alttext lang="SV">Inställningar</alttext>
-     <alttext lang="ET">Sätted</alttext>
-     <alttext lang="RU">Настройки</alttext>
-     <alttext lang="AR">تضبيطات</alttext>
-     <action>MENU util_menu.xml</action>
-   </button>
+    <button>
+        <type>SETUP_GENERAL</type>
+        <text>MythTV Configuration</text>
+        <text lang="IT">Impostazioni</text>
+        <text lang="ES">Configuración</text>
+        <text lang="DE">Zubehör / Konfiguration</text>
+        <text lang="DA">Tilbehør/Indstillinger</text>
+        <text lang="IS">Uppsetning</text>
+        <text lang="NL">Configuratie</text>
+        <text lang="PT">Utensílios</text>
+        <text lang="SV">Verktyg / Inställningar</text>
+        <text lang="JA">設�~Z</text>
+        <text lang="FI">Oheis/Asetukset</text>
+        <text lang="ZH_TW">工�~E�/設�~Z</text>
+        <text lang="SL">Nastavitve</text>
+        <text lang="ET">Utiliidid / sätted</text>
+        <text lang="RU">У�~Bили�~B�~K / �~]а�~A�~B�~@ойки</text>
+        <text lang="AR">تضب�~Jطات</text>
+        <text lang="PL">Narz�~Ydzia / ustawienia</text>
+        <text lang="HE">ע�~Vר�~Y�~] / �~T�~R�~Sר�~Uת</text>
+        <text lang="HU">Eszközök / Beállítások</text>
+        <alttext lang="DE">Verschiedenes</alttext>
+        <alttext lang="SV">Inställningar</alttext>
+        <alttext lang="ET">Sätted</alttext>
+        <alttext lang="RU">�~]а�~A�~B�~@ойки</alttext>
+        <alttext lang="AR">تضب�~Jطات</alttext>
+        <description>Configure MythTV and plugins</description>
+        <description lang="DE">MythTV und Plugins konfigurieren</description>
+        <action>MENU util_menu.xml</action>
+    </button>
 
    <button>
      <type>LINHES_SETUP</type>
@@ -49,6 +48,12 @@
      <text>Restore LinHES</text>
      <action>MENU mythrestore.xml</action>
    </button>
-   
-</mythmenu>
 
+<!--#Check for updates-->
+   <button>
+     <type>UPGRADE</type>
+     <text>Upgrade LinHES</text>
+     <action>MENU update.xml</action>
+   </button>
+<!--#Check for updates-->
+</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch b/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch
index 0ec8143..74ace7b 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/mainmenu.xml.patch
@@ -1,16 +1,13 @@
---- mainmenu.xml.orig	2009-03-23 18:43:18.000000000 +0000
-+++ mainmenu.xml	2009-03-23 19:47:20.000000000 +0000
-@@ -163,35 +163,9 @@
+--- mainmenu.xml.orig	2010-03-24 13:11:27.223119163 -0400
++++ mainmenu.xml	2010-03-24 14:18:33.922746799 -0400
+@@ -151,32 +151,9 @@
  
      <button>
          <type>MENU_UTILITIES_SETUP</type>
 -        <text>Utilities / Setup</text>
 -        <text lang="IT">Impostazioni</text>
 -        <text lang="ES">Configuración</text>
--        <text lang="CS">Configurar</text>
--        <text lang="FR">paramètres</text>
 -        <text lang="DE">Zubehör / Konfiguration</text>
--        <text lang="DA">Tilbehør/Indstillinger</text>
 -        <text lang="IS">Uppsetning</text>
 -        <text lang="NL">Configuratie</text>
 -        <text lang="PT">Utensílios</text>
@@ -20,18 +17,18 @@
 -        <text lang="ZH_TW">工具/設定</text>
 -        <text lang="SL">Nastavitve</text>
 -        <text lang="ET">Utiliidid / sätted</text>
--        <text lang="NB">Verktøy/Oppsett</text>
--        <text lang="CS">Pomůcky</text>
 -        <text lang="RU">Утилиты / Настройки</text>
 -        <text lang="AR">تضبيطات</text>
 -        <text lang="PL">Narzędzia / ustawienia</text>
 -        <text lang="HE">עזרים / הגדרות</text>
+-        <text lang="HU">Eszközök / Beállítások</text>
 -        <alttext lang="DE">Verschiedenes</alttext>
 -        <alttext lang="SV">Inställningar</alttext>
 -        <alttext lang="ET">Sätted</alttext>
 -        <alttext lang="RU">Настройки</alttext>
 -        <alttext lang="AR">تضبيطات</alttext>
 -        <description>Configure MythTV and plugins</description>
+-        <description lang="DE">MythTV und Plugins konfigurieren</description>
 -        <action>MENU util_menu.xml</action>
 +        <text>Service Menu</text>
 +        <description>LinHES Service Menu</description>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml
index 656860d..5914b33 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/mythbackup.xml
@@ -15,6 +15,6 @@
    <button>
      <type>BACKUP</type>
      <text>No</text>
-     <action>MENU linhes.xml</action>
+     <action>UPMENU</action>
    </button>
 </mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml
index 05cb0a7..8f5c285 100644
--- a/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/mythrestore.xml
@@ -15,6 +15,6 @@
    <button>
      <type>BACKUP</type>
      <text>No</text>
-     <action>MENU linhes.xml</action>
+     <action>UPMENU</action>
    </button>
 </mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/update.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/update.xml
new file mode 100644
index 0000000..5b28833
--- /dev/null
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/update.xml
@@ -0,0 +1,20 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Check for updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml b/abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml
new file mode 100644
index 0000000..2ab82ea
--- /dev/null
+++ b/abs/core/mythtv/trunk/mythtv/menu-xml/update2.xml
@@ -0,0 +1,26 @@
+<mythmenu name="LinHES">
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Perform updates?</text>
+     <action>NONE</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>Yes</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update2.sh</action>
+   </button>
+   
+   <button>
+     <type>UPGRADE</type>
+     <text>No</text>
+     <action>UPMENU</action>
+   </button>
+
+   <button>
+     <type>UPGRADE</type>
+     <text>View files to be upgraded.</text>
+     <action>EXEC sudo /usr/LH/bin/linhes_update3.sh</action>
+   </button>
+</mythmenu>
diff --git a/abs/core/mythtv/trunk/mythtv/pretty b/abs/core/mythtv/trunk/mythtv/pretty
index 1cfc57b..7e0ab21 100755
--- a/abs/core/mythtv/trunk/mythtv/pretty
+++ b/abs/core/mythtv/trunk/mythtv/pretty
@@ -1,2 +1,9 @@
 #!/bin/bash
-su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+if [ -f /usr/share/mythtv/contrib/user_jobs/mythlink.pl ]
+then
+        su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythlink.pl --link /myth/pretty"
+elif [ -f /usr/share/mythtv/contrib/user_jobs/mythrename.pl ]
+then
+        su - mythtv -c "perl /usr/share/mythtv/contrib/user_jobs/mythrename.pl --link /myth/pretty"
+fi
+
diff --git a/abs/core/mythtv/trunk/mythvideo/PKGBUILD b/abs/core/mythtv/trunk/mythvideo/PKGBUILD
index 797b641..951a427 100644
--- a/abs/core/mythtv/trunk/mythvideo/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythvideo/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythvideo-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Video playback and browsing plugin for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythweather/PKGBUILD b/abs/core/mythtv/trunk/mythweather/PKGBUILD
index 0655236..1bc8430 100644
--- a/abs/core/mythtv/trunk/mythweather/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythweather/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythweather-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Weather checking plugin for MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/mythtv/trunk/mythweb/PKGBUILD b/abs/core/mythtv/trunk/mythweb/PKGBUILD
index 8f472b7..dedfcf5 100644
--- a/abs/core/mythtv/trunk/mythweb/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythweb/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythweb-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Web interface for MythTV's backend"
 url="http://www.mythtv.org"
@@ -13,6 +13,7 @@ install=mythweb.install
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
@@ -39,9 +40,10 @@ build() {
 
 	mkdir -p $startdir/pkg/$DOCROOT/{image_cache,php_sessions}
 
-	cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+#	cp -r $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
 #   cp $startdir/src/mythplugins-$pkgver/mythweb/data/.htaccess $startdir/pkg/$DOCROOT
-	rm $startdir/pkg/srv/$DOCROOT/README
+    rsync -arp --exclude .svn --delete-excluded   $startdir/src/mythplugins/mythweb/* $startdir/pkg/$DOCROOT
+	rm $startdir/pkg/$DOCROOT/README
 	chown -R http:users $startdir/pkg/$DOCROOT
 	chmod g+rw $startdir/pkg/$DOCROOT/{image_cache,php_sessions,data}
 
diff --git a/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD b/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD
index 7ace30f..038007b 100644
--- a/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD
+++ b/abs/core/mythtv/trunk/mythzoneminder/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythzoneminder-svn
-pkgver=21495
+pkgver=23790
 pkgrel=1
 pkgdesc="Integrates ZoneMinder into MythTV"
 url="http://www.mythtv.org"
@@ -12,6 +12,7 @@ groups=('mythtv-extras-svn')
 
 patches=()
 source=(`echo ${patches[@]:0}`)
+
 _svntrunk=http://cvs.mythtv.org/svn/trunk/mythplugins
 _svnmod=mythplugins
 
diff --git a/abs/core/nano/PKGBUILD b/abs/core/nano/PKGBUILD
index 4dcf3bc..6ecfd29 100644
--- a/abs/core/nano/PKGBUILD
+++ b/abs/core/nano/PKGBUILD
@@ -1,17 +1,16 @@
 # $Id: PKGBUILD 10350 2008-08-27 14:18:15Z andyrtr $
 # Maintainer: Judd <judd@archlinux.org>
 pkgname=nano
-pkgver=2.0.8
-pkgrel=12
+pkgver=2.2.4
+pkgrel=1
 pkgdesc="Pico editor clone with enhancements"
 arch=('i686' 'x86_64')
 license=('GPL')
 url="http://www.nano-editor.org"
 groups=('base')
 depends=('glibc' 'ncurses')
-source=(http://www.nano-editor.org/dist/v2.0/nano-${pkgver}.tar.gz)
+source=(http://www.nano-editor.org/dist/v2.2/nano-${pkgver}.tar.gz)
 backup=(etc/nanorc)
-md5sums=('fcb2a26285921458b6fe381c2802b1a8')
 install=nano.install
 
 build() {
@@ -23,3 +22,4 @@ build() {
 
   rm -f ${pkgdir}/usr/share/info/dir
 }
+md5sums=('6304308afb1f7ef4a5e93eb99206632a')
diff --git a/abs/core/ntp/PKGBUILD b/abs/core/ntp/PKGBUILD
index fc568b0..83e77ad 100755
--- a/abs/core/ntp/PKGBUILD
+++ b/abs/core/ntp/PKGBUILD
@@ -1,15 +1,14 @@
 pkgname=ntp
-pkgver=4.2.4p5
-pkgrel=3
+pkgver=4.2.6p2
+pkgrel=1
 pkgdesc="NTP (Network Time Protocol) tries to keep servers in sync"
 arch=(i686 x86_64)
 url="http://www.ntp.org/"
 depends=('openssl' 'readline' )
 backup=('etc/ntp.conf' 'conf.d/ntp-client.conf')
-source=(http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p5.tar.gz \
+source=(http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-${pkgver}.tar.gz \
          ntp.conf ntp-client.conf ntpd ntpdate )
 
-
 build() {
   cd $startdir/src/$pkgname-$pkgver
   ./configure --prefix=/usr 
@@ -24,3 +23,8 @@ build() {
   install -D -m644 $startdir/ntp.conf $startdir/pkg/etc/ntp.conf
 }
 
+md5sums=('cf73cd85f248232c62f8029e6eb05938'
+         '833c9d699765bd60825b5713670be460'
+         '25eb8d2176fe642b488e4b9fa03179ac'
+         'b1a1798b9cd1907d65a7fc794294d6ce'
+         '140855352baeb89da0c6c1c475c18b57')
diff --git a/abs/core/nvidia-173xx-utils/PKGBUILD b/abs/core/nvidia-173xx-utils/PKGBUILD
new file mode 100644
index 0000000..042c1ee
--- /dev/null
+++ b/abs/core/nvidia-173xx-utils/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 69361 2010-02-20 11:24:49Z tpowa $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+
+pkgname=nvidia-173xx-utils
+pkgver=173.14.25
+pkgrel=1
+pkgdesc="NVIDIA drivers utilities and libraries, 173xx branch."
+arch=('i686' 'x86_64')
+[ "$CARCH" = "i686"   ] && ARCH=x86 	 
+[ "$CARCH" = "x86_64" ] && ARCH=x86_64
+url="http://www.nvidia.com/"
+depends=('xorg-server')
+optdepends=('gtk2: nvidia-settings' 'pkgconfig: nvidia-xconfig')
+conflicts=('libgl')
+provides=('libgl')
+license=('custom')
+install=nvidia.install
+options=(!strip)
+source=("http://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run")
+
+build() {
+	cd $srcdir
+	sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run --extract-only
+	cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/
+
+	mkdir -p $pkgdir/usr/{lib,bin,share/applications,share/pixmaps,share/man/man1}
+	mkdir -p $pkgdir/usr/lib/xorg/modules/{extensions,drivers}
+	mkdir -p $pkgdir/usr/share/licenses/nvidia-173xx/
+
+	install lib/{libGLcore,libGL,libnvidia-cfg,tls/libnvidia-tls}.so.${pkgver} \
+	$pkgdir/usr/lib/ || return 1
+	install -m644 share/man/man1/* $pkgdir/usr/share/man/man1/ || return 1
+	rm $pkgdir/usr/share/man/man1/nvidia-installer.1.gz || return 1
+	install X11R6/lib/libXv* $pkgdir/usr/lib/ || return 1
+	install -m644 share/applications/nvidia-settings.desktop $pkgdir/usr/share/applications/ || return 1
+	# fix nvidia .desktop file
+	sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $pkgdir/usr/share/applications/nvidia-settings.desktop
+	install -m644 share/pixmaps/nvidia-settings.png $pkgdir/usr/share/pixmaps/ || return 1
+	install X11R6/lib/modules/drivers/nvidia_drv.so $pkgdir/usr/lib/xorg/modules/drivers || return 1
+	install X11R6/lib/modules/extensions/libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions || return 1
+	install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $pkgdir/usr/bin/ || return 1
+	cd $pkgdir/usr/lib/
+	ln -s libGL.so.$pkgver libGL.so || return 1
+	ln -s libGL.so.$pkgver libGL.so.1 || return 1
+	ln -s libGLcore.so.$pkgver libGLcore.so.1 || return 1
+	ln -s libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
+	ln -s libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
+	ln -s libXvMCNVIDIA.so.$pkgver libXvMCNVIDIA_dynamic.so.1 || return 1
+
+	cd $pkgdir/usr/lib/xorg/modules/extensions
+	ln -s libglx.so.$pkgver libglx.so || return 1
+
+	install -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/LICENSE $pkgdir/usr/share/licenses/nvidia-173xx/ || return 1
+	ln -s nvidia-173xx $startdir/pkg/usr/share/licenses/nvidia-173xx-utils || return 1
+
+	install -D -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/share/doc/README.txt $pkgdir/usr/share/doc/nvidia-173xx/README || return 1
+
+	find $pkgdir/usr -type d -exec chmod 755 {} \;
+}
+
+
+md5sums=('397bac51f760505ea57e863c1db9c572')
diff --git a/abs/core/nvidia-173xx-utils/nvidia.install b/abs/core/nvidia-173xx-utils/nvidia.install
new file mode 100644
index 0000000..0a878a7
--- /dev/null
+++ b/abs/core/nvidia-173xx-utils/nvidia.install
@@ -0,0 +1,6 @@
+post_install() {
+	echo By using this package you accept the NVIDIA license,
+	echo which has been installed in /usr/share/licenses/nvidia/LICENSE
+	echo If you do not accept this license, you must remove the package immediately.
+	echo Dont forget to update your /etc/X11/xorg.conf
+}
diff --git a/abs/core/nvidia-173xx-utils/supported-cards.txt b/abs/core/nvidia-173xx-utils/supported-cards.txt
new file mode 100644
index 0000000..d4f26ea
--- /dev/null
+++ b/abs/core/nvidia-173xx-utils/supported-cards.txt
@@ -0,0 +1,236 @@
+Archlinux currently manages three branches of the NVIDIA binary driver:
+
+nvidia (latest nvidia release)
+nvidia-96xx (96xx legacy branch)
+nvidia-71xx (71xx legacy branch)
+
+This excerpt from the NVIDIA 1.0.9746 README lists the supported devices
+for each of those:
+
+______________________________________________________________________________
+
+Appendix A. Supported NVIDIA Graphics Chips
+______________________________________________________________________________
+
+For the most complete and accurate listing of supported GPUs, please see the
+Supported Products List, available from the NVIDIA Linux x86 Graphics Driver
+download page. Please go to http://www.nvidia.com/object/unix.html, follow the
+Archive link under the Linux x86 heading, follow the link for the 1.0-9746
+driver, and then go to the Supported Products List.
+
+
+    NVIDIA chip name                      Device PCI ID
+    ----------------------------------    ----------------------------------
+    GeForce 6800 Ultra                    0x0040
+    GeForce 6800                          0x0041
+    GeForce 6800 XE                       0x0043
+    GeForce 6800 XT                       0x0044
+    GeForce 6800 GT                       0x0045
+    GeForce 6800 GT                       0x0046
+    GeForce 6800 GS                       0x0047
+    GeForce 6800 XT                       0x0048
+    Quadro FX 4000                        0x004E
+    GeForce 7800 GTX                      0x0090
+    GeForce 7800 GTX                      0x0091
+    GeForce 7800 GT                       0x0092
+    GeForce 7800 GS                       0x0093
+    GeForce Go 7800                       0x0098
+    GeForce Go 7800 GTX                   0x0099
+    Quadro FX 4500                        0x009D
+    GeForce 6800 GS                       0x00C0
+    GeForce 6800                          0x00C1
+    GeForce 6800 LE                       0x00C2
+    GeForce 6800 XT                       0x00C3
+    GeForce Go 6800                       0x00C8
+    GeForce Go 6800 Ultra                 0x00C9
+    Quadro FX Go1400                      0x00CC
+    Quadro FX 3450/4000 SDI               0x00CD
+    Quadro FX 1400                        0x00CE
+    GeForce 6800 Ultra/GeForce 6800       0x00F0
+    GeForce 6600 GT                       0x00F1
+    GeForce 6600                          0x00F2
+    GeForce 6200                          0x00F3
+    GeForce 6600 LE                       0x00F4
+    GeForce 7800 GS                       0x00F5
+    GeForce 6800 GS                       0x00F6
+    Quadro FX 3400/4400                   0x00F8
+    GeForce 6800 Ultra                    0x00F9
+    GeForce PCX 5750                      0x00FA
+    GeForce PCX 5900                      0x00FB
+    GeForce PCX 5300/Quadro FX 330        0x00FC
+    Quadro NVS 280 PCI-E/Quadro FX 330    0x00FD
+    Quadro FX 1300                        0x00FE
+    GeForce PCX 4300                      0x00FF
+    GeForce 6600 GT                       0x0140
+    GeForce 6600                          0x0141
+    GeForce 6600 LE                       0x0142
+    GeForce 6600 VE                       0x0143
+    GeForce Go 6600                       0x0144
+    GeForce 6610 XL                       0x0145
+    GeForce Go 6600 TE/6200 TE            0x0146
+    GeForce 6700 XL                       0x0147
+    GeForce Go 6600                       0x0148
+    GeForce Go 6600 GT                    0x0149
+    Quadro NVS 440                        0x014A
+    Quadro FX 550                         0x014C
+    Quadro FX 540                         0x014E
+    GeForce 6200                          0x014F
+    GeForce 6500                          0x0160
+    GeForce 6200 TurboCache(TM)           0x0161
+    GeForce 6200 LE                       0x0163
+    GeForce Go 6200                       0x0164
+    Quadro NVS 285                        0x0165
+    GeForce Go 6400                       0x0166
+    GeForce Go 6200                       0x0167
+    GeForce Go 6400                       0x0168
+    GeForce 8800 GTX                      0x0191
+    GeForce 8800 GTS                      0x0193
+    GeForce 7300 LE                       0x01D1
+    GeForce 7300 SE                       0x01D3
+    Quadro NVS 110M/GeForce Go 7300       0x01D7
+    GeForce Go 7400                       0x01D8
+    Quadro NVS 110M                       0x01DA
+    Quadro NVS 120M                       0x01DB
+    Quadro FX 350M                        0x01DC
+    Quadro FX 350                         0x01DE
+    GeForce 7300 GS                       0x01DF
+    GeForce 6800                          0x0211
+    GeForce 6800 LE                       0x0212
+    GeForce 6800 GT                       0x0215
+    GeForce 6800 XT                       0x0218
+    GeForce 6200                          0x0221
+    GeForce 6150                          0x0240
+    GeForce 6150 LE                       0x0241
+    GeForce 6100                          0x0242
+    GeForce Go 6100                       0x0247
+    GeForce 7900 GTX                      0x0290
+    GeForce 7900 GT/GTO                   0x0291
+    GeForce 7900 GS                       0x0292
+    GeForce 7950 GX2                      0x0294
+    GeForce Go 7900 GS                    0x0298
+    GeForce Go 7900 GTX                   0x0299
+    Quadro FX 2500M                       0x029A
+    Quadro FX 1500M                       0x029B
+    Quadro FX 5500                        0x029C
+    Quadro FX 3500M                       0x029D
+    Quadro FX 1500                        0x029E
+    Quadro FX 4500 X2                     0x029F
+    GeForce 7600 GS                       0x02E1
+    GeForce FX 5800 Ultra                 0x0301
+    GeForce FX 5800                       0x0302
+    Quadro FX 2000                        0x0308
+    Quadro FX 1000                        0x0309
+    GeForce FX 5600 Ultra                 0x0311
+    GeForce FX 5600                       0x0312
+    GeForce FX 5600XT                     0x0314
+    GeForce FX Go5600                     0x031A
+    GeForce FX Go5650                     0x031B
+    Quadro FX Go700                       0x031C
+    GeForce FX 5200                       0x0320
+    GeForce FX 5200 Ultra                 0x0321
+    GeForce FX 5200                       0x0322
+    GeForce FX 5200LE                     0x0323
+    GeForce FX Go5200                     0x0324
+    GeForce FX Go5250                     0x0325
+    GeForce FX 5500                       0x0326
+    GeForce FX 5100                       0x0327
+    GeForce FX Go5200 32M/64M             0x0328
+    Quadro NVS 55/280 PCI                 0x032A
+    Quadro FX 500/FX 600                  0x032B
+    GeForce FX Go53xx                     0x032C
+    GeForce FX Go5100                     0x032D
+    GeForce FX 5900 Ultra                 0x0330
+    GeForce FX 5900                       0x0331
+    GeForce FX 5900XT                     0x0332
+    GeForce FX 5950 Ultra                 0x0333
+    GeForce FX 5900ZT                     0x0334
+    Quadro FX 3000                        0x0338
+    Quadro FX 700                         0x033F
+    GeForce FX 5700 Ultra                 0x0341
+    GeForce FX 5700                       0x0342
+    GeForce FX 5700LE                     0x0343
+    GeForce FX 5700VE                     0x0344
+    GeForce FX Go5700                     0x0347
+    GeForce FX Go5700                     0x0348
+    Quadro FX Go1000                      0x034C
+    Quadro FX 1100                        0x034E
+    GeForce 7600 GT                       0x0391
+    GeForce 7600 GS                       0x0392
+    GeForce 7300 GT                       0x0393
+    GeForce Go 7600                       0x0398
+    Quadro FX 560                         0x039E
+
+
+Below are the legacy GPUs that are no longer supported in the unified driver.
+These GPUs will continue to be maintained through the special legacy NVIDIA
+GPU driver releases.
+
+The 1.0-96xx driver supports the following set of GPUs:
+
+
+    NVIDIA chip name                      Device PCI ID
+    ----------------------------------    ----------------------------------
+    GeForce2 MX/MX 400                    0x0110
+    GeForce2 MX 100/200                   0x0111
+    GeForce2 Go                           0x0112
+    Quadro2 MXR/EX/Go                     0x0113
+    GeForce4 MX 460                       0x0170
+    GeForce4 MX 440                       0x0171
+    GeForce4 MX 420                       0x0172
+    GeForce4 MX 440-SE                    0x0173
+    GeForce4 440 Go                       0x0174
+    GeForce4 420 Go                       0x0175
+    GeForce4 420 Go 32M                   0x0176
+    GeForce4 460 Go                       0x0177
+    Quadro4 550 XGL                       0x0178
+    GeForce4 440 Go 64M                   0x0179
+    Quadro NVS                            0x017A
+    Quadro4 500 GoGL                      0x017C
+    GeForce4 410 Go 16M                   0x017D
+    GeForce4 MX 440 with AGP8X            0x0181
+    GeForce4 MX 440SE with AGP8X          0x0182
+    GeForce4 MX 420 with AGP8X            0x0183
+    GeForce4 MX 4000                      0x0185
+    Quadro4 580 XGL                       0x0188
+    Quadro NVS 280 SD                     0x018A
+    Quadro4 380 XGL                       0x018B
+    Quadro NVS 50 PCI                     0x018C
+    GeForce2 Integrated GPU               0x01A0
+    GeForce4 MX Integrated GPU            0x01F0
+    GeForce3                              0x0200
+    GeForce3 Ti 200                       0x0201
+    GeForce3 Ti 500                       0x0202
+    Quadro DCC                            0x0203
+    GeForce4 Ti 4600                      0x0250
+    GeForce4 Ti 4400                      0x0251
+    GeForce4 Ti 4200                      0x0253
+    Quadro4 900 XGL                       0x0258
+    Quadro4 750 XGL                       0x0259
+    Quadro4 700 XGL                       0x025B
+    GeForce4 Ti 4800                      0x0280
+    GeForce4 Ti 4200 with AGP8X           0x0281
+    GeForce4 Ti 4800 SE                   0x0282
+    GeForce4 4200 Go                      0x0286
+    Quadro4 980 XGL                       0x0288
+    Quadro4 780 XGL                       0x0289
+    Quadro4 700 GoGL                      0x028C
+
+
+The 1.0-71xx driver supports the following set of GPUs:
+
+
+    NVIDIA chip name                      Device PCI ID
+    ----------------------------------    ----------------------------------
+    RIVA TNT                              0x0020
+    RIVA TNT2/TNT2 Pro                    0x0028
+    RIVA TNT2 Ultra                       0x0029
+    Vanta/Vanta LT                        0x002C
+    RIVA TNT2 Model 64/Model 64 Pro       0x002D
+    Aladdin TNT2                          0x00A0
+    GeForce 256                           0x0100
+    GeForce DDR                           0x0101
+    Quadro                                0x0103
+    GeForce2 GTS/GeForce2 Pro             0x0150
+    GeForce2 Ti                           0x0151
+    GeForce2 Ultra                        0x0152
+    Quadro2 Pro                           0x0153
diff --git a/abs/core/nvidia-173xx/PKGBUILD b/abs/core/nvidia-173xx/PKGBUILD
new file mode 100644
index 0000000..845e606
--- /dev/null
+++ b/abs/core/nvidia-173xx/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 69360 2010-02-20 11:24:15Z tpowa $
+# Maintainer : Thomas Baechler <thomas@archlinux.org>
+
+pkgname=nvidia-173xx
+pkgver=173.14.25
+_kernver='2.6.28-LinHES'
+
+pkgrel=1
+pkgdesc="NVIDIA drivers for kernel26, 173xx branch."
+arch=('i686' 'x86_64')
+[ "$CARCH" = "i686"   ] && ARCH=x86
+[ "$CARCH" = "x86_64" ] && ARCH=x86_64
+url="http://www.nvidia.com/"
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-173xx-utils')
+makedepends=('kernel-headers>=2.6.28' 'kernel-headers<2.6.29')
+conflicts=('nvidia' 'nvidia-173xx')
+license=('custom')
+install=nvidia.install
+source=("http://download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run")
+
+build() {
+	cd $srcdir
+	sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
+	cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
+	cd usr/src/nv/
+	ln -s Makefile.kbuild Makefile
+	make SYSSRC=/lib/modules/${_kernver}/build module || return 1
+
+	mkdir -p $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
+	install -m644 nvidia.ko $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
+
+	sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/nvidia.install
+}
+md5sums=('397bac51f760505ea57e863c1db9c572')
diff --git a/abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch b/abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch
new file mode 100644
index 0000000..44d44fd
--- /dev/null
+++ b/abs/core/nvidia-173xx/nvidia-96.43.11-2.6.30.patch
@@ -0,0 +1,103 @@
+--- usr/src/nv/nv.c.orig 
++++ usr/src/nv/nv.c 
+@@ -15,6 +15,7 @@
+ #include "nv_compiler.h"
+ #include "os-agp.h"
+ #include "nv-vm.h"
++#include <linux/version.h>
+ 
+ #ifdef MODULE_ALIAS_CHARDEV_MAJOR
+ MODULE_ALIAS_CHARDEV_MAJOR(NV_MAJOR_DEVICE_NUMBER);
+@@ -499,10 +500,12 @@
+      * Set the module owner to ensure that the reference
+      * count reflects accesses to the proc files.
+      */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     proc_nvidia->owner = THIS_MODULE;
+     proc_nvidia_cards->owner = THIS_MODULE;
+     proc_nvidia_warnings->owner = THIS_MODULE;
+ 
++#endif
+     for (j = 0; j < num_nv_devices; j++)
+     {
+         nvl = &nv_linux_devices[j];
+@@ -521,7 +524,9 @@
+ 
+         entry->data = nv;
+         entry->read_proc = nv_kern_read_cardinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+         entry->owner = THIS_MODULE;
++#endif
+ 
+         if (nvos_find_agp_capability(dev)) {
+             /*
+@@ -534,7 +539,9 @@
+                 goto failed;
+             }
+ 
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
++#endif
+             proc_nvidia_agp = entry;
+ 
+             entry = create_proc_entry("status", flags, proc_nvidia_agp);
+@@ -545,7 +552,9 @@
+ 
+             entry->data = nv;
+             entry->read_proc = nv_kern_read_status;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
++#endif
+ 
+             entry = create_proc_entry("host-bridge", flags, proc_nvidia_agp);
+             if (!entry) {
+@@ -555,8 +564,9 @@
+ 
+             entry->data = NULL;
+             entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
+-
++#endif
+             entry = create_proc_entry("card", flags, proc_nvidia_agp);
+             if (!entry) {
+                 NV_PCI_DEV_PUT(dev);
+@@ -565,7 +575,9 @@
+ 
+             entry->data = nv;
+             entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
++#endif
+         }
+ 
+         NV_PCI_DEV_PUT(dev);
+@@ -576,14 +588,18 @@
+         goto failed;
+ 
+     entry->read_proc = nv_kern_read_version;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     entry->owner = THIS_MODULE;
++#endif
+ 
+     entry = create_proc_entry("registry", flags, proc_nvidia);
+     if (!entry)
+         goto failed;
+ 
+     entry->read_proc = nv_kern_read_registry;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     entry->owner = THIS_MODULE;
++#endif
+ 
+     return;
+ 
+@@ -610,7 +626,9 @@
+ 
+     entry->data = (void *)message;
+     entry->read_proc = nv_kern_read_warning;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     entry->owner = THIS_MODULE;
++#endif
+ #endif
+ }
+ 
diff --git a/abs/core/nvidia-173xx/nvidia.install b/abs/core/nvidia-173xx/nvidia.install
new file mode 100644
index 0000000..ab86ea2
--- /dev/null
+++ b/abs/core/nvidia-173xx/nvidia.install
@@ -0,0 +1,14 @@
+post_install() {
+	KERNEL_VERSION='2.6.28-LinHES'
+	depmod $KERNEL_VERSION
+}
+
+post_upgrade() {
+	post_install
+	rmmod nvidia || echo 'In order to use the new nvidia module, exit Xserver and unload it manually.'
+}
+
+post_remove() {
+	KERNEL_VERSION='2.6.28-LinHES'
+	depmod $KERNEL_VERSION
+}
diff --git a/abs/core/nvidia-71xx-utils/PKGBUILD b/abs/core/nvidia-71xx-utils/PKGBUILD
index 9522ff8..aa29a73 100644
--- a/abs/core/nvidia-71xx-utils/PKGBUILD
+++ b/abs/core/nvidia-71xx-utils/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: James Rayner <iphitus@gmail.com>
 
 pkgname=nvidia-71xx-utils
-pkgver=71.86.09
+pkgver=71.86.13
 pkgrel=1
 pkgdesc="NVIDIA legacy drivers utilities and libraries, 71xx branch."
 arch=(i686 x86_64)
@@ -20,10 +20,6 @@ install=nvidia-71xx.install
 source=(http://us.download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run \
         supported-cards.txt)
 options=(docs !strip)
-md5sums=('51ce70e2ba967a2bad1cf01ce25c7f76'
-         '6363d7e494d33729609540088e33e73f')
-[ "$CARCH" = "x86_64" ] && md5sums=('205599549ddd6fadecfbc1adb090dfe2'
-         '6363d7e494d33729609540088e33e73f')
 
 build()
 {
@@ -61,3 +57,5 @@ build()
   find $startdir/pkg/usr -type d -exec chmod 755 {} \;
   # phew :)
 }
+md5sums=('e058328595aaad8558a58067d9580bb6'
+         '6363d7e494d33729609540088e33e73f')
diff --git a/abs/core/nvidia-71xx/PKGBUILD b/abs/core/nvidia-71xx/PKGBUILD
index 318b798..fcc09d8 100644
--- a/abs/core/nvidia-71xx/PKGBUILD
+++ b/abs/core/nvidia-71xx/PKGBUILD
@@ -1,23 +1,20 @@
 # Contributor : Alessandro Sagratini <ale_sagra@hotmail.com>
 
 pkgname=nvidia-71xx
-pkgver=71.86.09
+pkgver=71.86.13
 _kernver='2.6.28-LinHES'
-pkgrel=3
+pkgrel=1
 pkgdesc="NVIDIA legacy drivers for kernel26-ice, 71xx branch"
 arch=(i686 x86_64)
 [ "$CARCH" = "i686"   ] && ARCH=x86
 [ "$CARCH" = "x86_64" ] && ARCH=x86_64
 url="http://www.nvidia.com/"
-depends=('nvidia-71xx-utils' 'kernel26' 'vdpinfo-71xx')
+depends=('nvidia-71xx-utils' 'kernel26' 'vdpauinfo-legacy')
 conflicts=('nvidia' 'nvidia-96xx')
 license=('custom')
 source=(http://us.download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run
 	NVIDIA_kernel-96.43.05-2290218.diff.txt) 
 install="nvidia-71xx.install"
-md5sums=('51ce70e2ba967a2bad1cf01ce25c7f76')
-[ "$CARCH" = "x86_64" ] && md5sums=('9d102e8a6a1746423f0e0a231df63eeb'
-				    'f2d9c8605a0f655b3c5c9b2434b9dccd')
 
 build() {  
   cd $startdir/src 
@@ -39,3 +36,5 @@ build() {
 
   sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
 }
+md5sums=('e058328595aaad8558a58067d9580bb6'
+         'a238b659c665036d1281ab0f3c567d8e')
diff --git a/abs/core/nvidia-96xx-utils/PKGBUILD b/abs/core/nvidia-96xx-utils/PKGBUILD
index 749dc08..7442a21 100644
--- a/abs/core/nvidia-96xx-utils/PKGBUILD
+++ b/abs/core/nvidia-96xx-utils/PKGBUILD
@@ -1,65 +1,63 @@
-# $Id: PKGBUILD 18827 2008-11-09 14:01:28Z jgc $
-# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
-# Contributor: James Rayner <iphitus@gmail.com>
+# $Id: PKGBUILD 69361 2010-02-20 11:24:49Z tpowa $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
 
 pkgname=nvidia-96xx-utils
-pkgver=96.43.09
+pkgver=96.43.16
 pkgrel=1
-pkgdesc="NVIDIA legacy drivers utilities and libraries, 96xx branch."
-arch=(i686 x86_64)
-license=('custom')
+pkgdesc="NVIDIA drivers utilities and libraries, 96xx branch."
+arch=('i686' 'x86_64')
 [ "$CARCH" = "i686"   ] && ARCH=x86 	 
 [ "$CARCH" = "x86_64" ] && ARCH=x86_64
 url="http://www.nvidia.com/"
 depends=('xorg-server')
-conflicts=('libgl' 'libgl-dri' 'ati-fglrx-utils' 'nvidia-utils' \
-           'nvidia-71xx-utils' 'nvidia-legacy-utils')
+optdepends=('gtk2: nvidia-settings' 'pkgconfig: nvidia-xconfig')
+conflicts=('libgl')
 provides=('libgl')
-install=nvidia-96xx.install
-source=(http://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run \
-        supported-cards.txt)
-md5sums=('758c739114b81ea2cb7da7c22ab80a7e'
-         '6363d7e494d33729609540088e33e73f')
-[ "$CARCH" = "x86_64" ] && md5sums=('c03bd2469292d91dde8767af1418c4e1'
-         '6363d7e494d33729609540088e33e73f')
-options=(docs !strip)
+license=('custom')
+install=nvidia.install
+options=(!strip)
+source=("http://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run")
+md5sums=('7479b25c747e29af95b9ccf06f43fbf9')
+[ "$CARCH" = "x86_64" ] && md5sums=('73e226d4ee0996b6df4bdf44cc1fc6f5')
+
+build() {
+	cd $srcdir
+	sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run --extract-only
+	cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/
+
+	mkdir -p $pkgdir/usr/{lib,bin,share/applications,share/pixmaps,share/man/man1}
+	mkdir -p $pkgdir/usr/lib/xorg/modules/{extensions,drivers}
+	mkdir -p $pkgdir/usr/share/licenses/nvidia-96xx/
 
-build()
-{
-  # override nvida install routine and do it the long way.
-  cd $startdir/src/
-  sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg0.run --extract-only
-  cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/
+	install lib/{libGLcore,libGL,libnvidia-cfg,tls/libnvidia-tls}.so.${pkgver} \
+	$pkgdir/usr/lib/ || return 1
+	install -m644 share/man/man1/* $pkgdir/usr/share/man/man1/ || return 1
+	rm $pkgdir/usr/share/man/man1/nvidia-installer.1.gz || return 1
+	install X11R6/lib/libXv* $pkgdir/usr/lib/ || return 1
+	install -m644 share/applications/nvidia-settings.desktop $pkgdir/usr/share/applications/ || return 1
+	# fix nvidia .desktop file
+	sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $pkgdir/usr/share/applications/nvidia-settings.desktop
+	install -m644 share/pixmaps/nvidia-settings.png $pkgdir/usr/share/pixmaps/ || return 1
+	install X11R6/lib/modules/drivers/nvidia_drv.so $pkgdir/usr/lib/xorg/modules/drivers || return 1
+	install X11R6/lib/modules/extensions/libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions || return 1
+	install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $pkgdir/usr/bin/ || return 1
+	cd $pkgdir/usr/lib/
+	ln -s libGL.so.$pkgver libGL.so || return 1
+	ln -s libGL.so.$pkgver libGL.so.1 || return 1
+	ln -s libGLcore.so.$pkgver libGLcore.so.1 || return 1
+	ln -s libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
+	ln -s libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
+	ln -s libXvMCNVIDIA.so.$pkgver libXvMCNVIDIA_dynamic.so.1 || return 1
 
-  mkdir -p $startdir/pkg/usr/{lib,bin,share/applications,share/pixmaps,share/man/man1}
-  mkdir -p $startdir/pkg/usr/lib/xorg/modules/{extensions,drivers}
-  mkdir -p $startdir/pkg/usr/share/licenses/nvidia-96xx/
-  
-  install lib/{libGLcore.so.${pkgver},libGL.so.${pkgver},libnvidia-cfg.so.${pkgver},tls/libnvidia-tls.so.${pkgver}} \
-       $startdir/pkg/usr/lib/ || return 1
-  install -m644 share/man/man1/* $startdir/pkg/usr/share/man/man1/ || return 1
-  rm $startdir/pkg/usr/share/man/man1/nvidia-installer.1.gz || return 1
-  install X11R6/lib/libXv* $startdir/pkg/usr/lib/ || return 1
-  install -m644 share/applications/nvidia-settings.desktop $startdir/pkg/usr/share/applications/ || return 1
-  # fix nvidia .desktop file
-  sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $startdir/pkg/usr/share/applications/nvidia-settings.desktop
-  install -m644 share/pixmaps/nvidia-settings.png $startdir/pkg/usr/share/pixmaps/ || return 1
-  install X11R6/lib/modules/drivers/nvidia_drv.so $startdir/pkg/usr/lib/xorg/modules/drivers || return 1
-  install X11R6/lib/modules/extensions/libglx.so.$pkgver $startdir/pkg/usr/lib/xorg/modules/extensions || return 1
-  install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $startdir/pkg/usr/bin/ || return 1
-  cd $startdir/pkg/usr/lib/
-  ln -s /usr/lib/libGL.so.$pkgver libGL.so || return 1
-  ln -s /usr/lib/libGL.so.$pkgver libGL.so.1 || return 1
-  ln -s /usr/lib/libGLcore.so.$pkgver libGLcore.so.1 || return 1
-  ln -s /usr/lib/libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
-  ln -s /usr/lib/libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
-  cd $startdir/pkg/usr/lib/xorg/modules/extensions
-  ln -s /usr/lib/xorg/modules/extensions/libglx.so.$pkgver libglx.so || return 1
+	cd $pkgdir/usr/lib/xorg/modules/extensions
+	ln -s libglx.so.$pkgver libglx.so || return 1
 
-  install -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/LICENSE $startdir/pkg/usr/share/licenses/nvidia-96xx/ || return 1
-  install -D -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/share/doc/README.txt $startdir/pkg/usr/share/doc/nvidia/README || return 1
-  install -D -m644 $startdir/src/supported-cards.txt $startdir/pkg/usr/share/doc/nvidia/supported-cards.txt || return 1
-  
-  find $startdir/pkg/usr -type d -exec chmod 755 {} \;
-  # phew :)
+	install -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/LICENSE $pkgdir/usr/share/licenses/nvidia-96xx/ || return 1
+	ln -s nvidia-96xx $startdir/pkg/usr/share/licenses/nvidia-96xx-utils || return 1
+
+	install -D -m644 $srcdir/NVIDIA-Linux-${ARCH}-${pkgver}-pkg0/usr/share/doc/README.txt $pkgdir/usr/share/doc/nvidia-96xx/README || return 1
+
+	find $pkgdir/usr -type d -exec chmod 755 {} \;
 }
+
+
diff --git a/abs/core/nvidia-96xx-utils/nvidia.install b/abs/core/nvidia-96xx-utils/nvidia.install
new file mode 100644
index 0000000..0a878a7
--- /dev/null
+++ b/abs/core/nvidia-96xx-utils/nvidia.install
@@ -0,0 +1,6 @@
+post_install() {
+	echo By using this package you accept the NVIDIA license,
+	echo which has been installed in /usr/share/licenses/nvidia/LICENSE
+	echo If you do not accept this license, you must remove the package immediately.
+	echo Dont forget to update your /etc/X11/xorg.conf
+}
diff --git a/abs/core/nvidia-96xx/PKGBUILD b/abs/core/nvidia-96xx/PKGBUILD
index ee165d2..df89e5f 100644
--- a/abs/core/nvidia-96xx/PKGBUILD
+++ b/abs/core/nvidia-96xx/PKGBUILD
@@ -1,38 +1,35 @@
-# $Id: PKGBUILD 22496 2008-12-26 22:51:15Z tpowa $
-# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+# $Id: PKGBUILD 69360 2010-02-20 11:24:15Z tpowa $
+# Maintainer : Thomas Baechler <thomas@archlinux.org>
 
 pkgname=nvidia-96xx
-pkgver=96.43.09
+pkgver=96.43.16
 _kernver='2.6.28-LinHES'
-pkgrel=5
-pkgdesc="NVIDIA legacy drivers for kernel26, 96xx branch"
-arch=(i686 x86_64)
-license=('custom:NVIDIA')
+
+pkgrel=1
+pkgdesc="NVIDIA drivers for kernel26, 96xx branch."
+arch=('i686' 'x86_64')
 [ "$CARCH" = "i686"   ] && ARCH=x86
 [ "$CARCH" = "x86_64" ] && ARCH=x86_64
 url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-96xx-utils' 'vdpinfo-96xx')
-conflicts=('nvidia' 'nvidia-71xx' 'nvidia-legacy')
-install=nvidia-96xx.install
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-96xx-utils')
+makedepends=('kernel-headers>=2.6.28' 'kernel-headers<2.6.29')
+conflicts=('nvidia' 'nvidia-173xx')
 license=('custom')
-source=(http://download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run)
-md5sums=('758c739114b81ea2cb7da7c22ab80a7e')
-[ "$CARCH" = "x86_64" ] && md5sums=('00a4cd93adc956f8cf173ab1036a5bf7')
+install=nvidia.install
+source=("http://download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run")
+md5sums=('7479b25c747e29af95b9ccf06f43fbf9')
+[ "$CARCH" = "x86_64" ] && md5sums=('73e226d4ee0996b6df4bdf44cc1fc6f5')
+
+build() {
+	cd $srcdir
+	sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
+	cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
+	cd usr/src/nv/
+	ln -s Makefile.kbuild Makefile
+	make SYSSRC=/lib/modules/${_kernver}/build module || return 1
 
-build()
-{
-  # Extract
-  cd $startdir/src/
-  sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
-  cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
-  
-  cd usr/src/nv/
-  ln -s Makefile.kbuild Makefile
-  make SYSSRC=/lib/modules/$_kernver/build module || return 1
-  
-  # install kernel module
-  mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
-  install -m644 nvidia.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/ || return 1
+	mkdir -p $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
+	install -m644 nvidia.ko $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/
 
-  sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+	sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/nvidia.install
 }
diff --git a/abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch b/abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch
new file mode 100644
index 0000000..44d44fd
--- /dev/null
+++ b/abs/core/nvidia-96xx/nvidia-96.43.11-2.6.30.patch
@@ -0,0 +1,103 @@
+--- usr/src/nv/nv.c.orig 
++++ usr/src/nv/nv.c 
+@@ -15,6 +15,7 @@
+ #include "nv_compiler.h"
+ #include "os-agp.h"
+ #include "nv-vm.h"
++#include <linux/version.h>
+ 
+ #ifdef MODULE_ALIAS_CHARDEV_MAJOR
+ MODULE_ALIAS_CHARDEV_MAJOR(NV_MAJOR_DEVICE_NUMBER);
+@@ -499,10 +500,12 @@
+      * Set the module owner to ensure that the reference
+      * count reflects accesses to the proc files.
+      */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     proc_nvidia->owner = THIS_MODULE;
+     proc_nvidia_cards->owner = THIS_MODULE;
+     proc_nvidia_warnings->owner = THIS_MODULE;
+ 
++#endif
+     for (j = 0; j < num_nv_devices; j++)
+     {
+         nvl = &nv_linux_devices[j];
+@@ -521,7 +524,9 @@
+ 
+         entry->data = nv;
+         entry->read_proc = nv_kern_read_cardinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+         entry->owner = THIS_MODULE;
++#endif
+ 
+         if (nvos_find_agp_capability(dev)) {
+             /*
+@@ -534,7 +539,9 @@
+                 goto failed;
+             }
+ 
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
++#endif
+             proc_nvidia_agp = entry;
+ 
+             entry = create_proc_entry("status", flags, proc_nvidia_agp);
+@@ -545,7 +552,9 @@
+ 
+             entry->data = nv;
+             entry->read_proc = nv_kern_read_status;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
++#endif
+ 
+             entry = create_proc_entry("host-bridge", flags, proc_nvidia_agp);
+             if (!entry) {
+@@ -555,8 +564,9 @@
+ 
+             entry->data = NULL;
+             entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
+-
++#endif
+             entry = create_proc_entry("card", flags, proc_nvidia_agp);
+             if (!entry) {
+                 NV_PCI_DEV_PUT(dev);
+@@ -565,7 +575,9 @@
+ 
+             entry->data = nv;
+             entry->read_proc = nv_kern_read_agpinfo;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+             entry->owner = THIS_MODULE;
++#endif
+         }
+ 
+         NV_PCI_DEV_PUT(dev);
+@@ -576,14 +588,18 @@
+         goto failed;
+ 
+     entry->read_proc = nv_kern_read_version;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     entry->owner = THIS_MODULE;
++#endif
+ 
+     entry = create_proc_entry("registry", flags, proc_nvidia);
+     if (!entry)
+         goto failed;
+ 
+     entry->read_proc = nv_kern_read_registry;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     entry->owner = THIS_MODULE;
++#endif
+ 
+     return;
+ 
+@@ -610,7 +626,9 @@
+ 
+     entry->data = (void *)message;
+     entry->read_proc = nv_kern_read_warning;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)
+     entry->owner = THIS_MODULE;
++#endif
+ #endif
+ }
+ 
diff --git a/abs/core/nvidia-96xx/nvidia.install b/abs/core/nvidia-96xx/nvidia.install
new file mode 100644
index 0000000..ab86ea2
--- /dev/null
+++ b/abs/core/nvidia-96xx/nvidia.install
@@ -0,0 +1,14 @@
+post_install() {
+	KERNEL_VERSION='2.6.28-LinHES'
+	depmod $KERNEL_VERSION
+}
+
+post_upgrade() {
+	post_install
+	rmmod nvidia || echo 'In order to use the new nvidia module, exit Xserver and unload it manually.'
+}
+
+post_remove() {
+	KERNEL_VERSION='2.6.28-LinHES'
+	depmod $KERNEL_VERSION
+}
diff --git a/abs/core/nvidia-utils/20-nvidia.conf b/abs/core/nvidia-utils/20-nvidia.conf
new file mode 100644
index 0000000..171f613
--- /dev/null
+++ b/abs/core/nvidia-utils/20-nvidia.conf
@@ -0,0 +1,6 @@
+Section "Device"
+        Identifier "Default nvidia Device"
+        Driver "nvidia"
+        Option "NoLogo" "True" 
+EndSection
+
diff --git a/abs/core/nvidia-utils/PKGBUILD b/abs/core/nvidia-utils/PKGBUILD
index b265eea..88c2709 100644
--- a/abs/core/nvidia-utils/PKGBUILD
+++ b/abs/core/nvidia-utils/PKGBUILD
@@ -1,73 +1,110 @@
+# $Id: PKGBUILD 83977 2010-06-25 06:51:43Z pierre $
+# Maintainer: Thomas Baechler <thomas@archlinux.org>
+# Contributor: James Rayner <iphitus@gmail.com>
+
 pkgname=nvidia-utils
-pkgver=185.18.36
-pkgrel=1
-pkgdesc="NVIDIA beta drivers utilities and libraries."
-provides=('nvidia-utils' 'libgl')
+pkgver=256.35
+pkgrel=4
+pkgdesc="NVIDIA drivers utilities and libraries."
 arch=('i686' 'x86_64')
-[ "$CARCH" = "i686"   ] && ARCH=x86 && NV=0
-[ "$CARCH" = "x86_64" ] && ARCH=x86_64 && NV=0
 url="http://www.nvidia.com/"
-depends=('xorg-server>=1.5')
-conflicts=('libgl' 'libgl-dri' 'ati-fglrx-utils' 'nvidia-legacy-utils' \
-           'nvidia-71xx-utils' 'nvidia-96xx-utils' )
+depends=('xorg-server' 'libxvmc')
+optdepends=('gtk2: nvidia-settings' 'pkg-config: nvidia-xconfig')
+conflicts=('libgl')
+provides=('libgl')
 license=('custom')
 install=nvidia.install
-source=(ftp://download.nvidia.com/XFree86/Linux-${ARCH}/${pkgver}/NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}.run \
-        supported-cards.txt) 
-        
-options=(docs)
+options=('!strip')
+backup=('etc/X11/xorg.conf.d/20-nvidia.conf')
+
+if [ "$CARCH" = "i686" ]; then
+        _arch='x86'
+        _pkg="NVIDIA-Linux-${_arch}-${pkgver}"
+        source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+        md5sums=('f6af8917a500de28396a438f3f548c88')
+elif [ "$CARCH" = "x86_64" ]; then
+        _arch='x86_64'
+        _pkg="NVIDIA-Linux-${_arch}-${pkgver}-no-compat32"
+        source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+        md5sums=('7b5924f14a4d2326b4d916efdb7852ff')
+fi
+
+source[1]='20-nvidia.conf'
+md5sums[1]='a3ddac4732c06d5cec7aefeed4d719c3'
+
+build() {
+        cd $srcdir
+        sh ${_pkg}.run --extract-only
+}
+
+package() {
+        cd $srcdir/${_pkg}
+
+        # X driver
+        install -D -m755 nvidia_drv.so $pkgdir/usr/lib/xorg/modules/drivers/nvidia_drv.so
+        # GLX extension module for X
+        install -D -m755 libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions/libglx.so.$pkgver
+        ln -s libglx.so.$pkgver $pkgdir/usr/lib/xorg/modules/extensions/libglx.so       # X doesn't find glx otherwise
+        # OpenGL library
+        install -D -m755 libGL.so.$pkgver $pkgdir/usr/lib/libGL.so.$pkgver
+        # OpenGL core library
+        install -D -m755 libnvidia-glcore.so.$pkgver $pkgdir/usr/lib/libnvidia-glcore.so.$pkgver
+        # XvMC
+        install -D -m644 libXvMCNVIDIA.a $pkgdir/usr/lib/libXvMCNVIDIA.a
+        install -D -m755 libXvMCNVIDIA.so.$pkgver $pkgdir/usr/lib/libXvMCNVIDIA.so.$pkgver
+        # VDPAU
+        install -D -m755 libvdpau_nvidia.so.$pkgver $pkgdir/usr/lib/vdpau/libvdpau_nvidia.so.$pkgver
+        # CUDA
+        install -D -m755 libcuda.so.$pkgver $pkgdir/usr/lib/libcuda.so.$pkgver
+        install -D -m644 cuda.h $pkgdir/usr/include/cuda/cuda.h
+        install -D -m644 cudaGL.h $pkgdir/usr/include/cuda/cudaGL.h
+        install -D -m644 cudaVDPAU.h $pkgdir/usr/include/cuda/cudaVDPAU.h
+        # nvidia-tls libraries
+        install -D -m755 libnvidia-tls.so.$pkgver $pkgdir/usr/lib/libnvidia-tls.so.$pkgver
+        install -D -m755 tls/libnvidia-tls.so.$pkgver $pkgdir/usr/lib/tls/libnvidia-tls.so.$pkgver
+        # OpenCL
+        install -D -m755 libnvidia-compiler.so.$pkgver $pkgdir/usr/lib/libnvidia-compiler.so.$pkgver
+        install -D -m755 libOpenCL.so.1.0.0 $pkgdir/usr/lib/libOpenCL.so.1.0.0
+        install -D -m644 cl.h $pkgdir/usr/include/CL/cl.h
+        install -D -m644 cl_gl.h $pkgdir/usr/include/CL/cl_gl.h
+        install -D -m644 nvidia.icd $pkgdir/etc/OpenCL/vendors/nvidia.icd
+        install -D -m644 cl_platform.h $pkgdir/usr/include/CL/cl_platform.h
+
+        install -D -m755 libnvidia-cfg.so.$pkgver $pkgdir/usr/lib/libnvidia-cfg.so.$pkgver
+
+        # create soname links
+        for _lib in $(find $pkgdir -name '*.so*'); do
+                _soname="$(dirname ${_lib})/$(readelf -d "$_lib" | sed -nr 's/.*Library soname: \[(.*)\].*/\1/p')"
+                if [ ! -e "${_soname}" ]; then
+                        ln -s "$(basename ${_lib})" "${_soname}"
+                        ln -s "$(basename ${_soname})" "${_soname/.[0-9]*/}"
+                fi
+        done
+
+
+        # nvidia-xconfig
+        install -D -m755 nvidia-xconfig $pkgdir/usr/bin/nvidia-xconfig
+        install -D -m644 nvidia-xconfig.1.gz $pkgdir/usr/share/man/man1/nvidia-xconfig.1.gz
+        # nvidia-settings
+        install -D -m755 nvidia-settings $pkgdir/usr/bin/nvidia-settings
+        install -D -m644 nvidia-settings.1.gz $pkgdir/usr/share/man/man1/nvidia-settings.1.gz
+        install -D -m644 nvidia-settings.desktop $pkgdir/usr/share/applications/nvidia-settings.desktop
+        install -D -m644 nvidia-settings.png $pkgdir/usr/share/pixmaps/nvidia-settings.png
+        sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $pkgdir/usr/share/applications/nvidia-settings.desktop
+        # nvidia-bug-report
+        install -D -m755 nvidia-bug-report.sh $pkgdir/usr/bin/nvidia-bug-report.sh
+        # nvidia-smi
+        install -D -m755 nvidia-smi $pkgdir/usr/bin/nvidia-smi
+        install -D -m644 nvidia-smi.1.gz $pkgdir/usr/share/man/man1/nvidia-smi.1.gz
 
-build()
-{
-  # override nvida install routine and do it the long way.
-  cd $startdir/src/
-  sh NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}.run --extract-only
-  cd NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}/usr/
 
-  mkdir -p $startdir/pkg/usr/{lib,bin,share/applications,share/pixmaps,man/man1}
-  mkdir -p $startdir/pkg/usr/lib/xorg/modules/{extensions,drivers}
-  mkdir -p $startdir/pkg/usr/share/licenses/nvidia/
-  
-  #install lib/{libGLcore,libGL,libnvidia-cfg,libcuda,tls/libnvidia-tls}.so.${pkgver} \
-  mkdir -p $startdir/pkg/usr/include/{,GL,cuda,vdpau}
-  
-  install -m644 include/cuda/{cudaGL,cuda}.h $startdir/pkg/usr/include/cuda
-  install -m644 include/vdpau/{vdpau_x11,vdpau}.h $startdir/pkg/usr/include/vdpau
-  # Conflicts with MESA; if you want to develop opengl app, enable this line
-  #install -m644 include/GL/{glxext,gl,glx,glext}.h $startdir/pkg/usr/include/GL
-  
-  install lib/{libGLcore,libGL,libnvidia-cfg,libcuda,tls/libnvidia-tls,libvdpau_nvidia,libvdpau,libvdpau_trace}.so.${pkgver} \
-    $startdir/pkg/usr/lib/ || return 1
-  
-  install -m644 share/man/man1/* $startdir/pkg/usr/man/man1/ || return 1
-  rm $startdir/pkg/usr/man/man1/nvidia-installer.1.gz || return 1
-  install X11R6/lib/libXv* $startdir/pkg/usr/lib/ || return 1
-  install -m644 share/applications/nvidia-settings.desktop $startdir/pkg/usr/share/applications/ || return 1
-  # fix nvidia .desktop file
-  sed -e 's:__UTILS_PATH__:/usr/bin:' -e 's:__PIXMAP_PATH__:/usr/share/pixmaps:' -i $startdir/pkg/usr/share/applications/nvidia-settings.desktop
-  install -m644 share/pixmaps/nvidia-settings.png $startdir/pkg/usr/share/pixmaps/ || return 1
-  install X11R6/lib/modules/libnvidia-wfb.so.$pkgver $startdir/pkg/usr/lib/xorg/modules || return 1
-  install X11R6/lib/modules/drivers/nvidia_drv.so $startdir/pkg/usr/lib/xorg/modules/drivers || return 1
-  install X11R6/lib/modules/extensions/libglx.so.$pkgver $startdir/pkg/usr/lib/xorg/modules/extensions || return 1
-  install -m755 bin/nvidia-{settings,xconfig,bug-report.sh} $startdir/pkg/usr/bin/ || return 1
-  cd $startdir/pkg/usr/lib/
-  ln -s libGL.so.$pkgver libGL.so || return 1
-  ln -s libGL.so.$pkgver libGL.so.1 || return 1
-  ln -s libGLcore.so.$pkgver libGLcore.so.1 || return 1
-  ln -s libnvidia-cfg.so.$pkgver libnvidia-cfg.so.1 || return 1
-  ln -s libnvidia-tls.so.$pkgver libnvidia-tls.so.1 || return 1
-  ln -s libcuda.so.$pkgver libcuda.so.1 || return 1
-  ln -s libXvMCNVIDIA.so.$pkgver libXvMCNVIDIA_dynamic.so.1 || return 1
-  ln -s libvdpau.so.$pkgver libvdpau.so.1 || return 1
-  ln -s libvdpau.so.$pkgver libvdpau.so || return 1
-  cd $startdir/pkg/usr/lib/xorg/modules/extensions
-  ln -s libglx.so.$pkgver libglx.so || return 1
+        install -D -m644 LICENSE $pkgdir/usr/share/licenses/nvidia/LICENSE
+        ln -s nvidia $pkgdir/usr/share/licenses/nvidia-utils
+        install -D -m644 README.txt $pkgdir/usr/share/doc/nvidia/README
+        install -D -m644 NVIDIA_Changelog $pkgdir/usr/share/doc/nvidia/NVIDIA_Changelog
+        ln -s nvidia $pkgdir/usr/share/doc/nvidia-utils
 
-  install -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}/LICENSE $startdir/pkg/usr/share/licenses/nvidia/ || return 1
-  ln -s nvidia $startdir/pkg/usr/share/licenses/nvidia-utils || return 1
-  install -D -m644 $startdir/src/NVIDIA-Linux-${ARCH}-${pkgver}-pkg${NV}/usr/share/doc/README.txt $startdir/pkg/usr/share/doc/nvidia/README || return 1
-  install -D -m644 $startdir/src/supported-cards.txt $startdir/pkg/usr/share/doc/nvidia/supported-cards.txt || return 1
-  
-  find $startdir/pkg/usr -type d -exec chmod 755 {} \;
+        # Install xorg.conf.d file for nvidia autodetection in xorg.conf-less configurations
+        install -D -m644 $srcdir/20-nvidia.conf $pkgdir/etc/X11/xorg.conf.d/20-nvidia.conf
 }
 
diff --git a/abs/core/nvidia/PKGBUILD b/abs/core/nvidia/PKGBUILD
index 8da003b..ca1d20f 100644
--- a/abs/core/nvidia/PKGBUILD
+++ b/abs/core/nvidia/PKGBUILD
@@ -1,37 +1,43 @@
-# $Id: PKGBUILD 24051 2009-01-12 12:47:18Z pierre $
+# $Id: PKGBUILD 83850 2010-06-23 10:39:40Z pierre $
 # Maintainer : Thomas Baechler <thomas@archlinux.org>
 
 pkgname=nvidia
-pkgver=185.18.36
+pkgver=256.35
 _kernver='2.6.28-LinHES'
 pkgrel=1
 pkgdesc="NVIDIA drivers for kernel26."
 arch=('i686' 'x86_64')
-[ "$CARCH" = "i686"   ] && ARCH=x86
-[ "$CARCH" = "x86_64" ] && ARCH=x86_64
 url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.28' 'kernel26<2.6.29' 'nvidia-utils=185.18.36' 'vdpinfo')
-conflicts=('nvidia-96xx' 'nvidia-71xx' 'nvidia-legacy' 'nvidia-beta')
+depends=('kernel26>=2.6.28' 'kernel26<2.6.29' "nvidia-utils=${pkgver}")
+makedepends=('kernel-headers>=2.6.28' 'kernel-headers<2.6.29')
+conflicts=('nvidia-96xx' 'nvidia-173xx')
 license=('custom')
 install=nvidia.install
-source=(http://us.download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run)
-# [ "$CARCH" = "x86_64" ] && md5sums=('318e36822c095fcd410161b1326797b1')
 
-build()
-{
-  # Extract
-  cd $startdir/src/
-  sh NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run --extract-only
-  cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
-  
-  # Any extra patches are applied in here...
-  cd usr/src/nv/
-  ln -s Makefile.kbuild Makefile
-  make SYSSRC=/lib/modules/${_kernver}/build module || return 1
-  
-  # install kernel module
-  mkdir -p $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
-  install -m644 nvidia.ko $startdir/pkg/lib/modules/${_kernver}/kernel/drivers/video/
+if [ "$CARCH" = "i686" ]; then
+        _arch='x86'
+        _pkg="NVIDIA-Linux-${_arch}-${pkgver}"
+        source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+        md5sums=('f6af8917a500de28396a438f3f548c88')
+elif [ "$CARCH" = "x86_64" ]; then
+        _arch='x86_64'
+        _pkg="NVIDIA-Linux-${_arch}-${pkgver}-no-compat32"
+        source=("ftp://download.nvidia.com/XFree86/Linux-${_arch}/${pkgver}/${_pkg}.run")
+        md5sums=('7b5924f14a4d2326b4d916efdb7852ff')
+fi
 
-  sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/*.install
+build() {
+        cd $srcdir
+        sh ${_pkg}.run --extract-only
+        cd ${_pkg}/kernel
+        make SYSSRC=/lib/modules/${_kernver}/build module
 }
+
+package() {
+        install -D -m644 $srcdir/${_pkg}/kernel/nvidia.ko \
+                $pkgdir/lib/modules/${_kernver}/kernel/drivers/video/nvidia.ko
+        install -d -m755 $pkgdir/etc/modprobe.d
+        echo "blacklist nouveau" >> $pkgdir/etc/modprobe.d/nouveau_blacklist.conf
+        sed -i -e "s/KERNEL_VERSION='.*'/KERNEL_VERSION='${_kernver}'/" $startdir/nvidia.install
+}
+
diff --git a/abs/core/openssh/PKGBUILD b/abs/core/openssh/PKGBUILD
index ade755f..fb2ec18 100644
--- a/abs/core/openssh/PKGBUILD
+++ b/abs/core/openssh/PKGBUILD
@@ -3,8 +3,8 @@
 # Contributor: judd <jvinet@zeroflux.org>
 
 pkgname=openssh
-pkgver=5.1p1
-pkgrel=4
+pkgver=5.5p1
+pkgrel=1
 #_gsskexver=20080404
 pkgdesc='A Secure SHell server/client'
 arch=(i686 x86_64)
@@ -15,9 +15,6 @@ depends=('openssl>=0.9.8g' 'zlib' 'pam' 'tcp_wrappers' 'heimdal>=1.2-1')
 source=(ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/$pkgname-$pkgver.tar.gz
         sshd sshd.confd sshd.pam sshd.patch)
         #http://www.sxw.org.uk/computing/patches/$pkgname-$pkgver-gsskex-$_gsskexver.patch
-md5sums=('03f2d0c1b5ec60d4ac9997a146d2faec' 'd9ee5e0a0d143689b3d6f11454a2a892'
-         'e2cea70ac13af7e63d40eb04415eacd5' '1c7c2ea8734ec7e3ca58d820634dc73a'
-	 'd5e6ef9fd6126f6a560e402561f5be6e')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -63,3 +60,8 @@ build() {
     -e 's|^# Host \*|Host *|g' \
     $startdir/pkg/etc/ssh/ssh_config
 }
+md5sums=('88633408f4cb1eb11ec7e2ec58b519eb'
+         'd9ee5e0a0d143689b3d6f11454a2a892'
+         'e2cea70ac13af7e63d40eb04415eacd5'
+         '1c7c2ea8734ec7e3ca58d820634dc73a'
+         'ea43aad77b405518aaadad172e0f91eb')
diff --git a/abs/core/openssh/sshd.patch b/abs/core/openssh/sshd.patch
index e883a4c..f3ba392 100644
--- a/abs/core/openssh/sshd.patch
+++ b/abs/core/openssh/sshd.patch
@@ -1,6 +1,5 @@
-diff -ruaN openssh-5.1p1.orig/sshd_config openssh-5.1p1/sshd_config
---- openssh-5.1p1.orig/sshd_config	2008-07-02 12:35:43.000000000 +0000
-+++ openssh-5.1p1/sshd_config	2009-02-28 05:40:09.000000000 +0000
+--- openssh-5.1p1/sshd_config.org	2010-03-08 23:43:07.000000000 +0000
++++ openssh-5.1p1/sshd_config	2010-03-08 23:45:37.000000000 +0000
 @@ -38,14 +38,14 @@
  # Authentication:
  
@@ -28,7 +27,15 @@ diff -ruaN openssh-5.1p1.orig/sshd_config openssh-5.1p1/sshd_config
  #X11DisplayOffset 10
  #X11UseLocalhost yes
  #PrintMotd yes
-@@ -117,3 +117,4 @@
+@@ -110,10 +110,11 @@
+ #Banner none
+ 
+ # override default of no subsystems
+-Subsystem	sftp	/usr/libexec/sftp-server
++Subsystem	sftp	/usr/lib/ssh/sftp-server
+ 
+ # Example of overriding settings on a per-user basis
+ #Match User anoncvs
  #	X11Forwarding no
  #	AllowTcpForwarding no
  #	ForceCommand cvs server
diff --git a/abs/core/pacman/PKGBUILD b/abs/core/pacman/PKGBUILD
index ecb96c7..239abb8 100644
--- a/abs/core/pacman/PKGBUILD
+++ b/abs/core/pacman/PKGBUILD
@@ -1,36 +1,60 @@
-# $Id: PKGBUILD 23245 2009-01-07 02:10:32Z dan $
+# $Id: PKGBUILD 58635 2009-11-11 00:00:52Z dan $
 # Maintainer: Aaron Griffin <aaron@archlinux.org>
 # Maintainer: Dan McGee <dan@archlinux.org>
 
 pkgname=pacman
-pkgver=3.2.2
-pkgrel=1
+pkgver=3.3.3
+pkgrel=10
 pkgdesc="A library-based package manager with dependency support"
 arch=('i686' 'x86_64')
 url="http://www.archlinux.org/pacman/"
 license=('GPL')
 groups=('base')
-depends=('bash' 'libarchive>=2.6.0' 'libdownload>=1.3' 'pacman-mirrorlist')
+depends=('bash' 'libarchive>=2.7.1' 'libfetch>=2.25' 'pacman-mirrorlist')
 optdepends=('fakeroot: for makepkg usage as normal user'
             'python: for rankmirrors script usage')
-backup=(etc/pacman.conf etc/makepkg.conf etc/pacman.d/mirrorlist)
+backup=(etc/pacman.conf etc/makepkg.conf)
 install=pacman.install
 options=(!libtool)
 source=(ftp://ftp.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz
-        pacman.conf)
-md5sums=('8404fc38566bb52f8eee2ea483a41051'
-         '27271a59b9c9f748547ef4feae90bc5c')
+        pacman.conf
+        makepkg.conf)
+md5sums=('a8cef73d68e2a4c3a46fb46c33210719'
+         'abe70dabacee7036368c7afeb686eb10'
+         '52c7bc651b107d73f9902755b7594458')
 
 build() {
   cd $srcdir/$pkgname-$pkgver
   
   ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
   make || return 1
+}
+
+package() {
+  cd $srcdir/$pkgname-$pkgver
   make DESTDIR=$pkgdir install || return 1
 
-  # install arch specific stuff
+  # install Arch specific stuff
   mkdir -p $pkgdir/etc
   install -m644 $srcdir/pacman.conf $pkgdir/etc/
+  install -m644 $srcdir/makepkg.conf $pkgdir/etc/
+  # set things correctly in the default conf file
+  case "$CARCH" in
+    i686)
+      mycarch="i686"
+      mychost="i686-pc-linux-gnu"
+      myflags="-march=i686 "
+      ;;
+    x86_64)
+      mycarch="x86_64"
+      mychost="x86_64-unknown-linux-gnu"
+      myflags="-march=x86-64 "
+      ;;
+  esac
+  sed -i $pkgdir/etc/makepkg.conf \
+    -e "s|@CARCH[@]|$mycarch|g" \
+    -e "s|@CHOST[@]|$mychost|g" \
+    -e "s|@CARCHFLAGS[@]|$myflags|g"
 
   # install completion files
   mkdir -p $pkgdir/etc/bash_completion.d/
diff --git a/abs/core/pacman/makepkg.conf b/abs/core/pacman/makepkg.conf
new file mode 100644
index 0000000..12cfebd
--- /dev/null
+++ b/abs/core/pacman/makepkg.conf
@@ -0,0 +1,107 @@
+#
+# /etc/makepkg.conf
+#
+
+#########################################################################
+# SOURCE ACQUISITION
+#########################################################################
+#
+#-- The download utilities that makepkg should use to acquire sources
+#  Format: 'protocol::agent'
+DLAGENTS=('ftp::/usr/bin/wget -c --passive-ftp -t 3 --waitretry=3 -O %o %u'
+          'http::/usr/bin/wget -c -t 3 --waitretry=3 -O %o %u'
+          'https::/usr/bin/wget -c -t 3 --waitretry=3 --no-check-certificate -O %o %u'
+          'rsync::/usr/bin/rsync -z %u %o'
+          'scp::/usr/bin/scp -C %u %o')
+
+# Other common tools:
+# /usr/bin/snarf
+# /usr/bin/lftpget -c
+# /usr/bin/curl
+
+#########################################################################
+# ARCHITECTURE, COMPILE FLAGS
+#########################################################################
+#
+CARCH="@CARCH@"
+CHOST="@CHOST@"
+
+#-- Exclusive: will only run on @CARCH@
+# -march (or -mcpu) builds exclusively for an architecture
+# -mtune optimizes for an architecture, but builds for whole processor family
+CFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
+CXXFLAGS="@CARCHFLAGS@-mtune=generic -O2 -pipe"
+LDFLAGS="-Wl,--hash-style=gnu -Wl,--as-needed"
+#-- Make Flags: change this for DistCC/SMP systems
+#MAKEFLAGS="-j2"
+
+#########################################################################
+# BUILD ENVIRONMENT
+#########################################################################
+#
+# Defaults: BUILDENV=(fakeroot !distcc color !ccache)
+#  A negated environment option will do the opposite of the comments below.
+#
+#-- fakeroot: Allow building packages as a non-root user
+#-- distcc:   Use the Distributed C/C++/ObjC compiler
+#-- color:    Colorize output messages
+#-- ccache:   Use ccache to cache compilation
+#
+BUILDENV=(fakeroot !distcc color !ccache)
+#
+#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
+#-- specify a space-delimited list of hosts running in the DistCC cluster.
+#DISTCC_HOSTS=""
+
+#########################################################################
+# GLOBAL PACKAGE OPTIONS
+#   These are default values for the options=() settings
+#########################################################################
+#
+# Default: OPTIONS=(strip docs libtool emptydirs zipman purge)
+#  A negated option will do the opposite of the comments below.
+#
+#-- strip:     Strip symbols from binaries/libraries in STRIP_DIRS
+#-- docs:      Save doc directories specified by DOC_DIRS
+#-- libtool:   Leave libtool (.la) files in packages
+#-- emptydirs: Leave empty directories in packages
+#-- zipman:    Compress manual (man and info) pages in MAN_DIRS with gzip
+#-- purge:     Remove files specified by PURGE_TARGETS
+#
+OPTIONS=(strip docs libtool emptydirs zipman purge)
+
+#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
+INTEGRITY_CHECK=(md5)
+#-- Manual (man and info) directories to compress (if zipman is specified)
+MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
+#-- Doc directories to remove (if !docs is specified)
+DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
+#-- Directories to be searched for the strip option (if strip is specified)
+STRIP_DIRS=(bin lib sbin usr/{bin,lib,sbin,local/{bin,lib,sbin}} opt/*/{bin,lib,sbin})
+#-- Files to be removed from all packages (if purge is specified)
+PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
+
+#########################################################################
+# PACKAGE OUTPUT
+#########################################################################
+#
+# Default: put built package and cached source in build directory
+#
+#-- Destination: specify a fixed directory where all packages will be placed
+#PKGDEST=/home/packages
+#-- Source cache: specify a fixed directory where source files will be cached
+#SRCDEST=/home/sources
+#-- Packager: name/email of the person or organization building packages
+#PACKAGER="John Doe <john@doe.com>"
+
+#########################################################################
+# EXTENSION DEFAULTS
+#########################################################################
+#
+# WARNING: Do NOT modify these variables unless you know what you are
+#          doing.
+#
+PKGEXT='.pkg.tar.gz'
+SRCEXT='.src.tar.gz'
+
+# vim: set ft=sh ts=2 sw=2 et:
diff --git a/abs/core/pacman/pacman.conf b/abs/core/pacman/pacman.conf
index 6fe3d29..de7e17d 100644
--- a/abs/core/pacman/pacman.conf
+++ b/abs/core/pacman/pacman.conf
@@ -28,7 +28,6 @@ SyncFirst   = pacman
 #NoExtract   =
 
 # Misc options (all disabled by default)
-#NoPassiveFtp
 #UseSyslog
 #ShowSize
 #UseDelta
@@ -52,10 +51,12 @@ SyncFirst   = pacman
 # uncommented to enable the repo.
 #
 
-# Testing is disabled by default.  To enable, uncomment the following
-# two lines.  You can add preferred servers immediately after the header,
-# and they will be used before the default mirrors.
+# The testing repositories are disabled by default. To enable, uncomment the
+# repo name header and Include lines. You can add preferred servers immediately
+# after the header, and they will be used before the default mirrors.
+
 #[testing]
+## Add your preferred servers here, they will be used first
 #Include = /etc/pacman.d/mirrorlist
 
 [core]
@@ -66,6 +67,10 @@ Include = /etc/pacman.d/mirrorlist
 # Add your preferred servers here, they will be used first
 Include = /etc/pacman.d/mirrorlist
 
+#[community-testing]
+## Add your preferred servers here, they will be used first
+#Include = /etc/pacman.d/mirrorlist
+
 [community]
 # Add your preferred servers here, they will be used first
 Include = /etc/pacman.d/mirrorlist
diff --git a/abs/core/pacman/pacman.install b/abs/core/pacman/pacman.install
index 46e4763..ed10f0d 100644
--- a/abs/core/pacman/pacman.install
+++ b/abs/core/pacman/pacman.install
@@ -1,10 +1,15 @@
+#!/bin/sh
 # arg 1:  the new package version
 # arg 2:  the old package version
 post_upgrade() {
 	# one time stuff for md5sum issue with older pacman versions
-	if [ "$(vercmp $2 3.0.2)" -lt 0 ]; then
-		_resetbackups
-	fi
+	if [  -f /usr/bin/vercmp ]
+	then
+		if  [ "$(vercmp $2 3.0.2)" -lt 0 ]
+		then
+        	 	_resetbackups
+		fi
+	fi	
 }
 
 _resetbackups() {
@@ -50,7 +55,3 @@ _resetbackups() {
         fi
     done
 }
-
-op=$1
-shift
-$op $*
diff --git a/abs/core/pciutils/PKGBUILD b/abs/core/pciutils/PKGBUILD
index d206022..838f800 100644
--- a/abs/core/pciutils/PKGBUILD
+++ b/abs/core/pciutils/PKGBUILD
@@ -1,8 +1,8 @@
 # $Id: PKGBUILD 7903 2008-08-05 06:38:41Z tpowa $
 # Maintainer: Tobias Powalowski <tpowa@archlinux.org>
 pkgname=pciutils
-pkgver=3.0.0
-pkgrel=12
+pkgver=3.1.5
+pkgrel=1
 pkgdesc="PCI bus configuration space access library and tools"
 arch=(i686 x86_64)
 license=('GPL2')
@@ -26,4 +26,4 @@ build() {
     install -D -m 644 lib/${i} ${startdir}/pkg/usr/include/pci/${i}
   done
 }
-md5sums=('85b5dae042217cf11bca10d52210a78d')
+md5sums=('7ccf8ae2353033158652bdca4e4aad0a')
diff --git a/abs/core/perl_modules/libxml-perl/PKGBUILD b/abs/core/perl_modules/libxml-perl/PKGBUILD
new file mode 100644
index 0000000..5867a11
--- /dev/null
+++ b/abs/core/perl_modules/libxml-perl/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=libxml-perl
+pkgver=0.08
+pkgrel=1
+pkgdesc="Perl library for working with XML"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~KMACLEOD/libxml-perl"
+license=('GPL' 'PerlArtistic')
+depends=('perlxml>=2.19')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/K/KM/KMACLEOD/libxml-perl-$pkgver.tar.gz) 
+md5sums=('0ed5fbdda53d1301ddaed88db10503bb')
+
+build() {
+  cd  $startdir/src/libxml-perl-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1 
+  make || return 1
+  make install DESTDIR=$startdir/pkg || return 1
+  find $startdir/pkg -name '.packlist' -delete
+  find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-class-factory-util/PKGBUILD b/abs/core/perl_modules/perl-class-factory-util/PKGBUILD
new file mode 100644
index 0000000..dadcff8
--- /dev/null
+++ b/abs/core/perl_modules/perl-class-factory-util/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id:$
+pkgname=perl-class-factory-util
+_realname=Class-Factory-Util
+pkgver=1.7
+pkgrel=1
+pkgdesc="Provide utility methods for factory classes"
+arch=(i686 x86_64)
+license=('GPL' 'Artistic')
+url="http://search.cpan.org/~drolsky/Class-Factory-Util"
+options=(!emptydirs)
+depends=('perl')
+provides=('class-factory-util=1.7' 'Class::Factory::Util=1.7' 'perl-class-factory-util=1.7')
+source=(http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Class-Factory-Util-1.7.tar.gz)
+md5sums=('aebd79da361b676a7ecd3245fc3d1b3f')
+
+build() {
+  cd ${srcdir}/${_realname}-${pkgver}
+  # install module in vendor directories.
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+  make  || return 1
+  make install DESTDIR=${pkgdir} || return 1
+
+  # remove perllocal.pod and .packlist
+  find ${pkgdir} -name perllocal.pod -delete
+  find ${pkgdir} -name .packlist -delete
+}
+
diff --git a/abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD b/abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD
new file mode 100644
index 0000000..10df715
--- /dev/null
+++ b/abs/core/perl_modules/perl-datetime-format-builder/PKGBUILD
@@ -0,0 +1,28 @@
+# CPAN Name  : DateTime-Format-Builder
+# Contributor: Caleb Cushing <xenoterracide@gmail.com>
+# Generator  : CPANPLUS::Dist::Arch 0.18
+pkgname=perl-datetime-format-builder
+pkgver=0.8000
+pkgrel=3
+pkgdesc="Create DateTime parser classes and objects"
+arch=('i686' 'x86_64')
+license=('PerlArtistic' 'GPL')
+options=('!emptydirs')
+provides=('perl-datetime-format-builder=0.80')
+depends=('perl' 'perl-class-factory-util>=1.6' 'perl-datetime>=0.12' 'perl-datetime-format-strptime>=1.04' 'perl-params-validate>=0.72')
+url='http://search.cpan.org/dist/DateTime-Format-Builder'
+source=('http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/DateTime-Format-Builder-0.80.tar.gz')
+md5sums=('f6c5d5a17b5b7478ff555a2d3cce5136')
+
+build() {
+  DIST_DIR="${srcdir}/DateTime-Format-Builder-0.80"
+  export PERL_MM_USE_DEFAULT=1
+  { cd "$DIST_DIR" &&
+    perl Makefile.PL INSTALLDIRS=vendor &&
+    make &&
+    make test &&
+    make DESTDIR="$pkgdir" install;
+  } || return 1;
+
+  find "$pkgdir" -name .packlist -o -name perllocal.pod -delete
+}
diff --git a/abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD b/abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD
new file mode 100644
index 0000000..360b88a
--- /dev/null
+++ b/abs/core/perl_modules/perl-datetime-format-iso8601/PKGBUILD
@@ -0,0 +1,26 @@
+# Contributor: Lukas Fleischer <archlinux at cryptocrack dot de>
+
+pkgname=perl-datetime-format-iso8601
+pkgver=0.07
+pkgrel=1
+pkgdesc="Parses ISO8601 formats."
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/DateTime-Format-ISO8601/"
+license=('PerlArtistic')
+depends=('perl-datetime-format-builder>=0.770.0' 'perl-datetime>=0.18')
+#makedepends=('perl-module-build>=0.350.0')
+optdepends=('perl-file-find-rule'
+            'perl-test-distribution'
+            'perl-test-pod')
+options=(!emptydirs)
+source=("http://search.cpan.org/CPAN/authors/id/J/JH/JHOBLITT/DateTime-Format-ISO8601-$pkgver.tar.gz")
+md5sums=('debb51180d0318ae09cad01c544a1d7d')
+
+build() {
+  cd $srcdir/DateTime-Format-ISO8601-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1
+  make  || return 1
+  make install DESTDIR="${pkgdir}" || return 1
+  find ${pkgdir} -name perllocal.pod -delete
+  find ${pkgdir} -name .packlist -delete
+}
diff --git a/abs/core/perl_modules/perl-fcgi/PKGBUILD b/abs/core/perl_modules/perl-fcgi/PKGBUILD
index 73b9ef1..3a97d1e 100644
--- a/abs/core/perl_modules/perl-fcgi/PKGBUILD
+++ b/abs/core/perl_modules/perl-fcgi/PKGBUILD
@@ -2,16 +2,15 @@
 # Contributor: François Charette <firmicus ατ gmx δοτ net>
 
 pkgname=perl-fcgi
-pkgver=0.67
-pkgrel=4
+pkgver=0.71
+pkgrel=1
 pkgdesc="Fast CGI"
 arch=('i686' 'x86_64')
 url="http://search.cpan.org/~SKIMO/FCGI"
 license=('GPL' 'PerlArtistic')
 depends=('perl>=5.10.0')
 options=('!emptydirs')
-source=(http://www.cpan.org/authors/id/S/SK/SKIMO/FCGI-$pkgver.tar.gz) 
-md5sums=('2e9b5bd1f74290fd9788555e8108a3d2')
+source=(http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/FCGI-$pkgver.tar.gz) 
 
 build() {
   cd  $startdir/src/FCGI-$pkgver
@@ -21,3 +20,4 @@ build() {
   find $startdir/pkg -name '.packlist' -delete
   find $startdir/pkg -name '*.pod' -delete
 }
+md5sums=('26bc4ea53ccc9c9c16695e88e46a1cfb')
diff --git a/abs/core/perl_modules/perl-math-round/PKGBUILD b/abs/core/perl_modules/perl-math-round/PKGBUILD
new file mode 100644
index 0000000..6501887
--- /dev/null
+++ b/abs/core/perl_modules/perl-math-round/PKGBUILD
@@ -0,0 +1,22 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+
+pkgname=perl-math-round
+pkgver=0.06
+pkgrel=2
+pkgdesc="Perl extension for rounding numbers"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/Math-Round"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/G/GR/GROMMEL/Math-Round-$pkgver.tar.gz) 
+md5sums=('552cef2753b246f97a6e20d8dee66e7c')
+
+build() {
+  cd  $startdir/src/Math-Round-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1 
+  make || return 1
+  make install DESTDIR=$startdir/pkg || return 1
+  find $startdir/pkg -name '.packlist' -delete
+  find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-parse-yapp/PKGBUILD b/abs/core/perl_modules/perl-parse-yapp/PKGBUILD
new file mode 100644
index 0000000..82d27db
--- /dev/null
+++ b/abs/core/perl_modules/perl-parse-yapp/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Cecil H. Watson <knoppmyth@gmail.com>
+
+pkgname=perl-parse-yapp
+_realname=Parse-Yapp
+pkgver=1.05
+pkgrel=1
+pkgdesc="Parse::Yapp - Perl extension for generating and using LALR parsers."
+arch=(i686 x86_64)
+license=('PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perlxml' 'perl>=5.10.0')
+options=('!emptydirs')
+source=(ftp://ftp.cpan.org/pub/CPAN/authors/id/F/FD/FDESAR/${_realname}-${pkgver}.tar.gz)
+md5sums=('7bfca736d6af36c51edf7a97111a8f3b')
+
+build() {
+  cd ${startdir}/src/${_realname}-${pkgver}
+  perl Makefile.PL INSTALLDIRS=vendor || return 1
+  make  || return 1
+  make DESTDIR=${startdir}/pkg install || return 1
+
+  find ${startdir}/pkg -name '.packlist' -delete
+  find ${startdir}/pkg -name 'perllocal.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-dom/PKGBUILD b/abs/core/perl_modules/perl-xml-dom/PKGBUILD
new file mode 100644
index 0000000..ab6e8a5
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-dom/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-dom
+pkgver=1.44
+pkgrel=5
+pkgdesc="Implements Level 1 of W3's DOM"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/~TJMATHER/XML-DOM"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perlxml>=2.30' 'perl-xml-regexp' 'libxml-perl>=0.07' 'perl-libwww')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/T/TJ/TJMATHER/XML-DOM-$pkgver.tar.gz) 
+md5sums=('1ec2032a06e5762984f7a332c199c205')
+
+build() {
+  cd  $startdir/src/XML-DOM-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1 
+  make || return 1
+  make install DESTDIR=$startdir/pkg || return 1
+  find $startdir/pkg -name '.packlist' -delete
+  find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-parser/PKGBUILD b/abs/core/perl_modules/perl-xml-parser/PKGBUILD
index c0fe960..cf2f801 100644
--- a/abs/core/perl_modules/perl-xml-parser/PKGBUILD
+++ b/abs/core/perl_modules/perl-xml-parser/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Charles Mauch <cmauch@gmail.com>
 pkgname=perl-xml-parser
 pkgver=2.34
-pkgrel=2
+pkgrel=3
 pkgdesc="Perl/CPAN Module XML::Parser : Flexible fast parser with plugin styles"
 arch=("i686" "x86_64")
 url="http://search.cpan.org/MSERGEANT/XML-Parser"
@@ -21,4 +21,5 @@ build() {
   /usr/bin/find $startdir/pkg -name '.packlist' -exec rm  '{}' \; && \
   /usr/bin/find $startdir/pkg -name 'perllocal.pod' -exec rm  '{}' \; && \
   /usr/bin/find $startdir/pkg -depth -type d -empty -exec rmdir '{}' \;
+  rm -fr $pkgdir/usr/share/man
 }
diff --git a/abs/core/perl_modules/perl-xml-xpath/PKGBUILD b/abs/core/perl_modules/perl-xml-xpath/PKGBUILD
new file mode 100644
index 0000000..fddb97d
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-xpath/PKGBUILD
@@ -0,0 +1,23 @@
+# This PKGBUILD was generated by cpan4pacman via CPANPLUS::Dist::Pacman
+# Contributor: François Charette <firmicus ατ gmx δοτ net>
+
+pkgname=perl-xml-xpath
+pkgver=1.13
+pkgrel=4
+pkgdesc="A set of modules for parsing and evaluating"
+arch=('i686' 'x86_64')
+url="http://search.cpan.org/dist/XML-XPath"
+license=('GPL' 'PerlArtistic')
+depends=('perl>=5.10.0' 'perlxml>=2.23')
+options=('!emptydirs')
+source=(http://www.cpan.org/authors/id/M/MS/MSERGEANT/XML-XPath-$pkgver.tar.gz) 
+md5sums=('b5919d9220d83982feb6e2321850c5d7')
+
+build() {
+  cd  $startdir/src/XML-XPath-$pkgver
+  PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor || return 1 
+  make || return 1
+  make install DESTDIR=$startdir/pkg || return 1
+  find $startdir/pkg -name '.packlist' -delete
+  find $startdir/pkg -name '*.pod' -delete
+}
diff --git a/abs/core/perl_modules/perl-xml-xql/PKGBUILD b/abs/core/perl_modules/perl-xml-xql/PKGBUILD
new file mode 100755
index 0000000..34757a3
--- /dev/null
+++ b/abs/core/perl_modules/perl-xml-xql/PKGBUILD
@@ -0,0 +1,34 @@
+# Contributor: ndlarsen <ndlarsen@gmail.com>
+# Comment: Based on PKGBUILDs from the perlcpan repo by Charles Mauch <cmauch@gmail.com>
+
+pkgname=perl-xml-xql
+pkgver=0.68
+pkgrel=1
+pkgdesc="A perl module for querying XML tree structures with XQL"
+arch=('i686')
+url="http://search.cpan.org/dist/XML-XQL/lib/XML/XQL.pm"
+license=('GPL Artistic')
+depends=('perl-parse-yapp' 'perl-xml-dom' 'perl-xml-parser' 'perl-date-manip')
+makedepends=()
+provides=()
+conflicts=()
+replaces=()
+backup=()
+groups=()
+options=(docs !emptydirs)
+install=
+noextract=()
+source=(http://search.cpan.org/CPAN/authors/id/T/TJ/TJMATHER/XML-XQL-$pkgver.tar.gz)
+md5sums=('bb84096fdf8bcc96a35971539ce8c19e')
+
+build() {
+
+	cd $startdir/src/XML-XQL-$pkgver
+	/usr/bin/perl Makefile.PL INSTALLDIRS=vendor MAN1ext=1p MAN3EXT=3pm
+	make || return 1
+	make DESTDIR=$startdir/pkg install || return 1
+	/usr/bin/find $startdir/pkg -name '.packlist' -exec rm  '{}' \; && \
+	/usr/bin/find $startdir/pkg -name 'perllocal.pod' -exec rm  '{}' \; 
+		
+}
+# $Id$
\ No newline at end of file
diff --git a/abs/core/perl_modules/perlxml/PKGBUILD b/abs/core/perl_modules/perlxml/PKGBUILD
new file mode 100644
index 0000000..c9b2f30
--- /dev/null
+++ b/abs/core/perl_modules/perlxml/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: herb <hrose@archlinux.org>
+
+pkgname=perlxml
+_realname=XML-Parser
+pkgver=2.36
+pkgrel=1
+pkgdesc="XML::Parser - an XML parser module for perl"
+arch=(i686 x86_64)
+license=('GPL' 'PerlArtistic')
+url="http://search.cpan.org/dist/${_realname}/"
+depends=('perl>=5.10.0' 'expat>=2.0')
+options=(!emptydirs)
+source=(http://search.cpan.org/CPAN/authors/id/M/MS/MSERGEANT/${_realname}-${pkgver}.tar.gz)
+md5sums=('1b868962b658bd87e1563ecd56498ded')
+
+build() {
+  cd ${startdir}/src/${_realname}-${pkgver}
+  
+  # install module in vendor directories.
+  perl Makefile.PL INSTALLDIRS=vendor || return 1
+  make MAN1EXT=1p MAN3EXT=3pm || return 1
+  make install MAN1EXT=1p MAN3EXT=3pm DESTDIR=${startdir}/pkg || return 1
+
+  # remove perllocal.pod and .packlist.
+  find ${startdir}/pkg -name perllocal.pod -delete
+  find ${startdir}/pkg -name .packlist -delete
+}
diff --git a/abs/core/php/PKGBUILD b/abs/core/php/PKGBUILD
index 975716a..9e297f0 100644
--- a/abs/core/php/PKGBUILD
+++ b/abs/core/php/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=php
 pkgver=5.2.6
-pkgrel=23
+pkgrel=31
 _suhosinver=0.9.6.2
 pkgdesc='A high-level scripting language'
 arch=('i686' 'x86_64')
@@ -174,3 +174,15 @@ build() {
 #	install -D -m644 libs/libphp5.so ${pkgdir}/usr/lib/httpd/modules/libphp5.so || return 1
 #	install -D -m644 ${srcdir}/apache.conf ${pkgdir}/etc/httpd/conf/extra/php5_module.conf || return 1
 }
+
+
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+         'f2ec986341a314c271259dbe4d940858'
+         '0ba86d39163d577c195d57c9129149cd'
+         '96ca078be6729b665be8a865535a97bf'
+         '74e5ce5a02488ec91b1c59f539e42936')
+md5sums=('7380ffecebd95c6edb317ef861229ebd'
+         'f2ec986341a314c271259dbe4d940858'
+         '13795526fe1a5da17c0aa46d5ea1a5d8'
+         '96ca078be6729b665be8a865535a97bf'
+         '74e5ce5a02488ec91b1c59f539e42936')
diff --git a/abs/core/php/__changelog b/abs/core/php/__changelog
index aac14ba..375545c 100644
--- a/abs/core/php/__changelog
+++ b/abs/core/php/__changelog
@@ -4,3 +4,5 @@ added /data/srv/tmp to basedir
 added /usr/share/mythtv/mythweather/scripts/
 send errors to stderr 
 change .install file, timezone is modified on install
+php.ini -jm
+	remove open_basedir
diff --git a/abs/core/php/php.ini b/abs/core/php/php.ini
index 8cbcd56..0d3a568 100644
--- a/abs/core/php/php.ini
+++ b/abs/core/php/php.ini
@@ -249,7 +249,7 @@ safe_mode_protected_env_vars = LD_LIBRARY_PATH
 ; and below.  This directive makes most sense if used in a per-directory
 ; or per-virtualhost web server configuration file. This directive is
 ; *NOT* affected by whether Safe Mode is turned On or Off.
-open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive:/etc
+;open_basedir = /data/srv/httpd/htdocs/:/home/:/tmp/:/usr/share/pear/:/data/srv/tmp:/usr/share/mythtv/mythweather/scripts/:/data/srv/httpd/htdocs/mythweb/data/video:/myth/ipodfeed:/data/srv/httpd/htdocs/archive:/etc:/myth:/media
 
 ; This directive allows you to disable certain functions for security reasons.
 ; It receives a comma-delimited list of function names. This directive is
diff --git a/abs/core/pil/PKGBUILD b/abs/core/pil/PKGBUILD
index 6f01309..5ae42bb 100644
--- a/abs/core/pil/PKGBUILD
+++ b/abs/core/pil/PKGBUILD
@@ -4,19 +4,20 @@
 
 pkgname=pil
 pkgver=1.1.6
-pkgrel=6
+pkgrel=11
 pkgdesc="Python imaging library"
 arch=('i686' 'x86_64')
 url="http://www.pythonware.com/products/pil/index.htm"
 license=('custom:"pil"')
-depends=('python' 'libjpeg' 'freetype2') 
+depends=('python' 'libjpeg6' 'freetype2') 
 makedepends=('tk>=8.5.0')
 source=(http://effbot.org/downloads/Imaging-$pkgver.tar.gz)
 md5sums=('3a9b5c20ca52f0a9900512d2c7347622')
 
 build() {
   cd $srcdir/Imaging-$pkgver
-  python setup.py build_ext 
+  sed -i "s#JPEG_ROOT\ =\ None#JPEG_ROOT\ =\ \"/opt/libjpeg6/lib\",\ \"/opt/libjpeg6/include\"#" setup.py
+  python setup.py build_ext -i
   python setup.py install --root=$pkgdir
   mkdir -p $pkgdir/usr/include/python2.6/
   cp libImaging/*.h $pkgdir/usr/include/python2.6/
diff --git a/abs/core/pil/__changelog b/abs/core/pil/__changelog
new file mode 100644
index 0000000..91214ed
--- /dev/null
+++ b/abs/core/pil/__changelog
@@ -0,0 +1,2 @@
+__change so that it builds against libjpeg6 and not libjpeg7
+  sed -i "s#JPEG_ROOT\ =\ None#JPEG_ROOT\ =\ \"/opt/libjpeg6\"#" setup.py
diff --git a/abs/core/plextor-convertX-driver/PKGBUILD b/abs/core/plextor-convertX-driver/PKGBUILD
index 14ecfdc..8b203f6 100755
--- a/abs/core/plextor-convertX-driver/PKGBUILD
+++ b/abs/core/plextor-convertX-driver/PKGBUILD
@@ -2,7 +2,7 @@
 
 pkgname=plextor-convertX-driver
 pkgver=0.9.8
-pkgrel=6
+pkgrel=7
 _kernver=2.6.28-LinHES
 pkgdesc="Drivers for Plextor tuners"
 arch=(i686 x86_64)
@@ -31,3 +31,6 @@ build() {
   install -m755 apps/gorecord $startdir/pkg/usr/bin/gorecord
   install -m755 apps/modet $startdir/pkg/usr/bin/modet
 }
+md5sums=('b4299b6e2fcbaf461bc8afe36654f314'
+         'e4c7bc33d6e69eafc10bd107cf648828'
+         '3b89d8746adf70102eeeb47d03627ece')
diff --git a/abs/core/plextor-convertX-driver/convertX.install b/abs/core/plextor-convertX-driver/convertX.install
index 8081c6a..5b79d84 100755
--- a/abs/core/plextor-convertX-driver/convertX.install
+++ b/abs/core/plextor-convertX-driver/convertX.install
@@ -7,6 +7,8 @@ post_install() {
   echo ">>> Updating module dependencies. Please wait ..."
   KERNEL_VERSION=2.6.28-LinHES
   depmod -v $KERNEL_VERSION > /dev/null 2>&1
+  echo "# Added For Plextor ConvertX" >> /etc/fstab
+  echo "usbfs /proc/bus/usb usbfs devmode=0666 0 0" >> /etc/fstab
   /bin/true
 }
 
@@ -23,6 +25,7 @@ post_remove() {
   echo ">>> Updating module dependencies. Please wait ..."
   KERNEL_VERSION=2.6.28-LinHES
   depmod -v $KERNEL_VERSION > /dev/null 2>&1
+  sed -i~ -e '/ConvertX/d' -e '/usbfs/d' /etc/fstab
   /bin/true
 }
 
diff --git a/abs/core/python-pycurl/PKGBUILD b/abs/core/python-pycurl/PKGBUILD
new file mode 100644
index 0000000..3d17877
--- /dev/null
+++ b/abs/core/python-pycurl/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 82 2009-07-17 19:56:55Z aaron $
+# Maintainer: Angel 'angvp' Velasquez <angvp[at]archlinux.com.ve> 
+# Contributor: kontrast <kontr4st@gmail.com> 
+pkgname=python-pycurl
+pkgver=7.19.0
+pkgrel=3
+pkgdesc="A Python interface to libcurl"
+arch=('i686' 'x86_64')
+url="http://pycurl.sourceforge.net"
+license=('GPL')
+depends=('python' 'curl>=7.19.0')
+replaces=('pycurl')
+provides=('pycurl')
+source=(http://pycurl.sourceforge.net/download/pycurl-$pkgver.tar.gz)
+md5sums=('919d58fe37e69fe87ce4534d8b6a1c7b')
+
+build() {
+  cd $srcdir/pycurl-$pkgver
+  python setup.py install --curl-config=/usr/bin/curl-config --prefix $pkgdir/usr || return 1
+}
diff --git a/abs/core/python-simplejson/PKGBUILD b/abs/core/python-simplejson/PKGBUILD
new file mode 100644
index 0000000..d1c7437
--- /dev/null
+++ b/abs/core/python-simplejson/PKGBUILD
@@ -0,0 +1,24 @@
+# $ Id: $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: David Moore <davidm@sjsoft.com>
+
+pkgname=python-simplejson
+pkgver=2.0.9
+pkgrel=1
+pkgdesc="Simple, fast, extensible JSON encoder/decoder for Python"
+license=('MIT')
+arch=('i686' 'x86_64')
+url="http://undefined.org/python/#simplejson"
+depends=('python')
+makedepends=('setuptools')
+source=("http://pypi.python.org/packages/source/s/simplejson/simplejson-${pkgver}.tar.gz")
+md5sums=('af5e67a39ca3408563411d357e6d5e47')
+
+build() {
+    cd ${srcdir}/simplejson-${pkgver}
+    python setup.py install --root=${pkgdir}
+
+    # License
+    install -Dm644 ${srcdir}/simplejson-${pkgver}/LICENSE.txt \
+      ${pkgdir}/usr/share/licenses/python-simplejson/license
+}
diff --git a/abs/core/qt/PKGBUILD b/abs/core/qt/PKGBUILD
old mode 100644
new mode 100755
index 87ec9f7..e315180
--- a/abs/core/qt/PKGBUILD
+++ b/abs/core/qt/PKGBUILD
@@ -3,11 +3,11 @@
 
 pkgname=qt
 pkgver=4.5.2
-pkgrel=4
+pkgrel=5
 _kdeqtver=2d1727e396d5dca24ae0fb6a45d35ffc1abd0c12
 pkgdesc='A cross-platform application and UI framework'
 arch=('i686' 'x86_64')
-url='http://www.qtsoftware.com/'
+url='http://www.qt.nokia.com/'
 license=('GPL3' 'LGPL')
 depends=('libpng' 'mesa' 'fontconfig' 'libtiff>=3.8.2-5' 'libmng>=1.0.10-2' 'sqlite3'
          'libxrandr' 'glib2' 'libxi' 'dbus' 'libxcursor' 'libxinerama' 'libxrender')
@@ -18,17 +18,10 @@ replaces=('qt4')
 conflicts=('qt4')
 options=('!libtool')
 _pkgfqn="qt-x11-opensource-src-${pkgver}"
-source=("ftp://ftp.qtsoftware.com/qt/source/${_pkgfqn}.tar.bz2"
+source=("http://get.qt.nokia.com/qt/source/${_pkgfqn}.tar.bz2"
         "ftp://ftp.archlinux.org/other/kde-qt/kde-qt-patches-${_kdeqtver}.tar.bz2"
         'assistant.desktop' 'designer.desktop' 'linguist.desktop' 'qtconfig.desktop'
-        'qdoc3.patch')
-md5sums=('28a7e8ac9805a6f614d2a27ee1a6ac9d'
-         '4b333add3031f59538629b35858178d9'
-         'b352b4b70faba2571af3fce5d119580a'
-         '491a96682faa03407f768a53cca71db5'
-         'cda7ed7e132689991dc2968a0043b4b0'
-         '717669b728a0a795217d2f52969e454c'
-         '9c0a0db3569e889a54a6cddcd55c538c')
+        'qdoc3.patch' 'QtWebKit_Flash.patch')
 
 _create-kdeqt-patches() {
 	local codir=$(mktemp -d)
@@ -59,6 +52,7 @@ build() {
 	done
 
 	patch -p0 -i $srcdir/qdoc3.patch
+	patch < $srcdir/QtWebKit_Flash.patch ${srcdir}/${_pkgfqn}/src/3rdparty/webkit/WebCore/plugins/qt/PluginPackageQt.cpp || return 1
 
 	sed -i "s|-O2|$CXXFLAGS|" mkspecs/common/g++.conf
 	sed -i "/^QMAKE_RPATH/s| -Wl,-rpath,||g" mkspecs/common/g++.conf
@@ -116,3 +110,12 @@ build() {
 	sed -i -e "s|$srcdir/${_pkgfqn}/bin/moc|/usr/bin/moc|g" $pkgdir/usr/lib/pkgconfig/*.pc
 	sed -i -e "s|$srcdir/${_pkgfqn}/bin/uic|/usr/bin/uic|g" $pkgdir/usr/lib/pkgconfig/*.pc
 }
+
+md5sums=('28a7e8ac9805a6f614d2a27ee1a6ac9d'
+         '4b333add3031f59538629b35858178d9'
+         'b352b4b70faba2571af3fce5d119580a'
+         '491a96682faa03407f768a53cca71db5'
+         'cda7ed7e132689991dc2968a0043b4b0'
+         '717669b728a0a795217d2f52969e454c'
+         '9c0a0db3569e889a54a6cddcd55c538c'
+         '0e2f5e43ed9dba32816fd4142b021762')
diff --git a/abs/core/qt/QtWebKit_Flash.patch b/abs/core/qt/QtWebKit_Flash.patch
new file mode 100644
index 0000000..102f73c
--- /dev/null
+++ b/abs/core/qt/QtWebKit_Flash.patch
@@ -0,0 +1,48 @@
+--- PluginPackageQt.cpp.orig	2010-06-30 21:29:47.178707288 +0000
++++ PluginPackageQt.cpp	2010-06-30 21:35:40.185441603 +0000
+@@ -36,6 +36,8 @@
+ 
+ namespace WebCore {
+ 
++typedef void gtkInitFunc(int *argc, char ***argv); 
++
+ bool PluginPackage::fetchInfo()
+ {
+     if (!load())
+@@ -100,7 +102,8 @@
+ 
+     NP_InitializeFuncPtr NP_Initialize;
+     NPError npErr;
+-
++    gtkInitFunc* gtkInit;
++    
+     NP_Initialize = (NP_InitializeFuncPtr)m_module->resolve("NP_Initialize");
+     m_NPP_Shutdown = (NPP_ShutdownProcPtr)m_module->resolve("NP_Shutdown");
+ 
+@@ -157,6 +160,26 @@
+     m_browserFuncs.enumerate = _NPN_Enumerate;
+     m_browserFuncs.construct = _NPN_Construct;
+ 
++    // WORKAROUND: Prevent gtk based plugin crashes such as BR# 40567 by
++    // explicitly forcing the initializing of Gtk, i.e. calling gtk_init,
++    // whenver the symbol is present in the plugin library loaded above.
++    // Note that this workaround is based on code from the NSPluginClass ctor
++    // in KDE's kdebase/apps/nsplugins/viewer/nsplugin.cpp file.
++    gtkInit = (gtkInitFunc*)m_module->resolve("gtk_init");
++    if (gtkInit) {
++        // Prevent gtk_init() from replacing the X error handlers, since the Gtk
++        // handlers abort when they receive an X error, thus killing the viewer.
++#ifdef Q_WS_X11
++        int (*old_error_handler)(Display*, XErrorEvent*) = XSetErrorHandler(0);
++        int (*old_io_error_handler)(Display*) = XSetIOErrorHandler(0);
++#endif
++        gtkInit(0, 0);
++#ifdef Q_WS_X11
++        XSetErrorHandler(old_error_handler);
++        XSetIOErrorHandler(old_io_error_handler);
++#endif
++}
++
+ #if defined(XP_UNIX)
+     npErr = NP_Initialize(&m_browserFuncs, &m_pluginFuncs);
+ #else
diff --git a/abs/core/qt/__changelog b/abs/core/qt/__changelog
index 2abf977..86af276 100644
--- a/abs/core/qt/__changelog
+++ b/abs/core/qt/__changelog
@@ -1 +1,2 @@
 remove cups support
+added QtWebKit_Flash.patch to fix crash with Flash 10.1 and webkit browsers like mythbrowser. http://trac.webkit.org/changeset/61307  This shouldn't be needed in qt versions 4.6.4 or later.
diff --git a/abs/core/rsync/PKGBUILD b/abs/core/rsync/PKGBUILD
index d9f2968..23fb9d0 100644
--- a/abs/core/rsync/PKGBUILD
+++ b/abs/core/rsync/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=rsync
-pkgver=3.0.4
-pkgrel=2
+pkgver=3.0.7
+pkgrel=1
 pkgdesc="A file transfer program to keep remote files in sync"
 arch=('i686' 'x86_64')
 url="http://samba.anu.edu.au/rsync/"
@@ -9,12 +9,6 @@ depends=('acl')
 backup=('etc/rsyncd.conf' 'etc/xinetd.d/rsync')
 source=(http://rsync.samba.org/ftp/rsync/${pkgname}-${pkgver}.tar.gz \
         rsyncd.conf rsyncd rsync.xinetd)
-md5sums=('2b2d159c9bd1b5f8adfd8b13da3a1f3f' '4395c0591638349b1a7aeaaa4da1f03a'\
-         '9de4d03d49f4b5c73ffd67d452716a49' 'ea3e9277dc908bc51f9eddc0f6b935c1')
-sha1sums=('e89ed8d84fe0b6740208ba8183ee1dbc220ba5e5'
-          '48be09294134dfed888818872fe552a59c29147a'
-          'ebec275bbd0c11692c91dc59368349601bd9eaf4'
-          'fdb99785bc87ee13d77aa90dc1804f3f75dd7fc1')
 
 build() {
   cd ${srcdir}/${pkgname}-${pkgver}
@@ -27,3 +21,7 @@ build() {
   install -D -m 644 ../rsyncd.conf ${pkgdir}/etc/rsyncd.conf || return 1
   install -D -m 644 ../rsync.xinetd ${pkgdir}/etc/xinetd.d/rsync || return 1
 }
+md5sums=('b53525900817cf1ba7ad3a516ab5bfe9'
+         '4395c0591638349b1a7aeaaa4da1f03a'
+         '9de4d03d49f4b5c73ffd67d452716a49'
+         'ea3e9277dc908bc51f9eddc0f6b935c1')
diff --git a/abs/core/rsync/__changelog b/abs/core/rsync/__changelog
new file mode 100644
index 0000000..e07c296
--- /dev/null
+++ b/abs/core/rsync/__changelog
@@ -0,0 +1 @@
+update to 3.0.7
diff --git a/abs/core/runit-scripts/PKGBUILD b/abs/core/runit-scripts/PKGBUILD
index 1615994..a8087bd 100755
--- a/abs/core/runit-scripts/PKGBUILD
+++ b/abs/core/runit-scripts/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=runit-scripts
 pkgver=1.8.0
-pkgrel=95
+pkgrel=117
 pkgdesc="collection of startup scripts for runit"
 url="http://smarden.org/runit/"
 license="BSD"
diff --git a/abs/core/runit-scripts/runitscripts/services/ddclient/run b/abs/core/runit-scripts/runitscripts/services/ddclient/run
new file mode 100755
index 0000000..c5488f6
--- /dev/null
+++ b/abs/core/runit-scripts/runitscripts/services/ddclient/run
@@ -0,0 +1,8 @@
+#!/bin/sh
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+stat_runit "Starting ddclient"
+
+
+exec /usr/sbin/ddclient -foreground &> /var/log/ddclient.log
diff --git a/abs/core/runit-scripts/runitscripts/services/frontend/finish b/abs/core/runit-scripts/runitscripts/services/frontend/finish
index 5b0bd5b..417488d 100755
--- a/abs/core/runit-scripts/runitscripts/services/frontend/finish
+++ b/abs/core/runit-scripts/runitscripts/services/frontend/finish
@@ -1,28 +1,45 @@
-#!/bin/bash
-exec 2>&1
-export TERM=linux
-. /etc/rc.conf
-. /etc/rc.d/functions
+#!/bin/bash                                                
+exec 2>&1                                                  
+export TERM=linux                                          
+. /etc/rc.conf                                             
+. /etc/rc.d/functions                                      
+
+function cleanup(){
+             rm -f /etc/sv/frontend/.runtime/*
+             printhl  "    Cleaning up  /etc/sv/frontend/.runtime/"
+}
 
 grep -q  nox /proc/cmdline
 STATUS=$?
  if  [ $STATUS = 0 ]
       then
+      printhl  " status = 0"
       chvt 2
 else
+    pkill   -f  "X :0"
+    printhl  " status = 1"
     if [ ! -d /etc/sv/frontend/.runtime ]
     then
-	    mkdir  -p /etc/sv/frontend/.runtime
+            mkdir  -p /etc/sv/frontend/.runtime
     fi
     touch /etc/sv/frontend/.runtime/`date +%s`
     sleep 0.2
     ps -U mythtv -ef |grep  "/bin/sh /usr/bin/startx"|grep -v grep|awk ' { print $2 } '|xargs kill -9  2> /dev/null
     cdate=`date`
-    numfiles=`/usr/bin/file_time_offset.py   -s10 -d/etc/sv/frontend/.runtime`   
-    if [ $numfiles -gt 2 ]
+    numfilestotal=`/usr/bin/file_time_offset.py   -s0 -d/etc/sv/frontend/.runtime`
+    numfilesover10secondsold=`/usr/bin/file_time_offset.py   -s10 -d/etc/sv/frontend/.runtime`
+    numfileslessthan10secondsold=$(($numfilestotal-$numfilesover10secondsold))
+    if [ $numfileslessthan10secondsold -gt 2 ]
     then
          sv stop frontend
-         rm -f /etc/sv/frontend/.runtime/*
-         printhl  "    Frontend is not able to start, disabling it."
+         printhl  "   Frontend disabled, due to many restarts."
+         printhl  "   Run \"sv start frontend\" to try again"
+         cleanup
+    else
+         if [ $numfilestotal -gt 10 ]
+         then
+                 cleanup
+         fi
     fi
 fi
+
diff --git a/abs/core/runit-scripts/runitscripts/services/lircd/run b/abs/core/runit-scripts/runitscripts/services/lircd/run
index 0a398ac..3ff8af3 100755
--- a/abs/core/runit-scripts/runitscripts/services/lircd/run
+++ b/abs/core/runit-scripts/runitscripts/services/lircd/run
@@ -6,8 +6,6 @@ export TERM=linux
 . /etc/rc.conf
 . /etc/rc.d/functions
 
-#since what we do may not be enough
-#if your one of those people, this is where you place your stuff
 
 LOG=/tmp/lirc.log
 
@@ -16,12 +14,17 @@ then
     rm -f $LOG
 fi
 
+#since what we do may not be enough
+#if your one of those people, this is where you place your stuff
+#This means place your lirc stuff in /etc/runit/lirc.sh.  
+#Anything in that file will be used and the rest of this file is ignored
+
 if [ -f /etc/runit/lirc.sh ]
 then
     #program must not terminate.
 
     stat_runit "Starting lirc"
-	
+    
     /etc/runit/lirc.sh
 else
     . /etc/systemconfig
@@ -55,8 +58,8 @@ else
     then
         #/dev/ttyS0 (COM1), port 0x3f8, irq 4
         #/dev/ttyS1 (COM2), port 0x2f8, irq 3
-    	#/dev/ttyS2 (COM3), port 0x3e8, irq 4
-    	#/dev/ttyS3 (COM4), port 0x2e8, irq 3
+        #/dev/ttyS2 (COM3), port 0x3e8, irq 4
+        #/dev/ttyS3 (COM4), port 0x2e8, irq 3
 
         case $serial_port in
         ttyS0)
@@ -72,67 +75,74 @@ else
                FLAGS="io=0x2e8  irq=3"
                ;;
         esac
-        /usr/bin/setserial /dev/serial_port uart none
-	sleep 0.5
+        /usr/bin/setserial /dev/$serial_port uart none
+        sleep 0.5
         /sbin/modprobe lirc_serial $FLAGS
-	sleep 0.5
+        sleep 0.5
     fi
 
     dvico_detect
 
     if [ x$HostBlasterType = xCommandIR -o x$ReceiverType = xCommandIR ]
     then
-        CMD="/usr/sbin/lircd -n  --driver=commandir"
-	printhl "	Using commandir"
+        CMD="/usr/sbin/lircd -r -n  --driver=commandir"
+        printhl "   Using commandir"
         $CMD >>$LOG 2>>$LOG
-#echo $CMD
+        #echo $CMD
     elif [  x$HostBlasterType = xiguanaIR-usb -o x$ReceiverType = xiguanaIR-usb ]
     then
-	sv start igdaemon
-        CMD="/usr/sbin/lircd -n  --driver=iguanaIR"
-	printhl "       Using iguanaIR usb"
-#echo $CMD
+        sv start igdaemon
+        CMD="/usr/sbin/lircd -r -n  --driver=iguanaIR"
+        printhl "       Using iguanaIR usb"
+        #echo $CMD
         $CMD >>$LOG 2>>$LOG
+
+    elif [ x$ReceiverType = "xSiliconDust_HDHR" ]
+    then
+        # if using the SiliconDust_HDHR as an I/R Receiver
+        printhl "   Using SiliconDust on port 5000"
+        CMD="/usr/sbin/lircd -H udp -d 5000 -n"
+        exec $CMD >>$LOG 2>>$LOG
     else
         LASTCMD=""
 
         for i in `seq 1 $num_lirc`
         do
-            CMD="/usr/sbin/lircd -d /dev/lirc$i --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
-	    printhl "	Device $i"
-#echo $CMD
+            CMD="/usr/sbin/lircd -r -d /dev/lirc$i --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
+            printhl "   Device $i"
+            #echo $CMD
             $CMD >>$LOG 2>>$LOG
             LASTCMD="--connect=localhost:876$i   $LASTCMD    "
         done
 
-	if [ $RunDvico = "true" ]
-	then
-	    if [ x$Remotetype = "xdvico" ]
+        if [ $RunDvico = "true" ]
+        then
+            if [ x$Remotetype = "xdvico" ]
             then
-                LCMD="/usr/sbin/lircd -n -d /dev/usb/dvicoIR --driver=dvico  --output /dev/lircd"
+                LCMD="/usr/sbin/lircd -r -n -d /dev/usb/dvicoIR --driver=dvico  --output /dev/lircd"
             else
-                LCMD="/usr/sbin/lircd -n -d /dev/input/irremote --driver=devinput  --output /dev/lircd"
+                LCMD="/usr/sbin/lircd -r -n -d /dev/input/irremote --driver=devinput  --output /dev/lircd"
             fi
 
-	    if [ $num_lirc -lt 0 ]
-	    then
-		# Only run Dvico
-		printhl "   Device $Remotetype"
-#echo $LCMD
-            	exec $LCMD >>$LOG 2>>$LOG
-	    elif [ $num_lirc -gt -1  ]
-	    then
+            if [ $num_lirc -lt 0 ]
+            then
+                # Only run Dvico
+                printhl "   Device $Remotetype"
+                #echo $LCMD
+                exec $LCMD >>$LOG 2>>$LOG
+            elif [ $num_lirc -gt -1  ]
+            then
                 i=$((i+1))
                 CMD="$LCMD --output=/dev/lircd$i --pidfile=/var/run/lircd$i.pid --listen=876$i"
                 $CMD >> $LOG
                 LASTCMD="--connect=localhost:876$i   $LASTCMD    "
-	        printhl "	Device Dvico"
-		/usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd  $LASTCMD  >>$LOG 2>>$LOG
-	    fi
-	else
-	    LCMD="/usr/sbin/lircd -n -d /dev/lirc0 --output /dev/lircd  $LASTCMD"
-#echo $LCMD
-     	    exec $LCMD >>$LOG 2>>$LOG
-	fi
+                printhl "   Device Dvico"
+                /usr/sbin/lircd -r -n -d /dev/lirc0 --output /dev/lircd  $LASTCMD  >>$LOG 2>>$LOG
+            fi
+        else
+            LCMD="/usr/sbin/lircd -r -n -d /dev/lirc0 --output /dev/lircd  $LASTCMD"
+            #echo $LCMD
+            exec $LCMD >>$LOG 2>>$LOG
+        fi
     fi
 fi
diff --git a/abs/core/runit-scripts/runitscripts/services/mdadm/run b/abs/core/runit-scripts/runitscripts/services/mdadm/run
index 0ab432e..567332e 100755
--- a/abs/core/runit-scripts/runitscripts/services/mdadm/run
+++ b/abs/core/runit-scripts/runitscripts/services/mdadm/run
@@ -1,19 +1,10 @@
-#!/bin/bash
-#
-# Start Monitoring software raid arrays
-exec 2>&1
-export TERM=linux
-. /etc/rc.conf
-. /etc/rc.d/functions
-
-PID=`pidof -o %PPID /sbin/mdadm`
-    stat_runit "Starting mdadm RAID Monitor"
-    if [ -z "$PID" ]; then
-       /sbin/mdadm -F -s
-    fi
-    if [ ! -z "$PID" -o $? -gt 0 ]; then
-      stat_fail
-    else
-      add_daemon mdadm
-      stat_done
-    fi
+#!/bin/bash
+#
+# Start Monitoring software raid arrays
+exec 2>&1
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+    stat_runit "Starting mdadm RAID Monitor"
+       exec /sbin/mdadm -F -s
diff --git a/abs/core/runit-scripts/runitscripts/services/nmbd/run b/abs/core/runit-scripts/runitscripts/services/nmbd/run
index 9ed032b..976cfc1 100755
--- a/abs/core/runit-scripts/runitscripts/services/nmbd/run
+++ b/abs/core/runit-scripts/runitscripts/services/nmbd/run
@@ -6,4 +6,4 @@ export TERM=linux
 stat_runit "Starting NMBD"
 
 
-exec nmbd -F -S -d1  2>/dev/null >/dev/null
+exec nmbd -F   2>/dev/null >/dev/null
diff --git a/abs/core/runit-scripts/runitscripts/services/postfix/run b/abs/core/runit-scripts/runitscripts/services/postfix/run
new file mode 100755
index 0000000..1fa526e
--- /dev/null
+++ b/abs/core/runit-scripts/runitscripts/services/postfix/run
@@ -0,0 +1,8 @@
+#!/bin/bash
+exec 1>&2
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+stat_runit "Starting postfix"
+exec /usr/lib/postfix/master -D
diff --git a/abs/core/runit-scripts/runitscripts/services/smbd/run b/abs/core/runit-scripts/runitscripts/services/smbd/run
index b4a545b..0fe0516 100755
--- a/abs/core/runit-scripts/runitscripts/services/smbd/run
+++ b/abs/core/runit-scripts/runitscripts/services/smbd/run
@@ -6,4 +6,4 @@ export TERM=linux
 stat_runit "Starting Samba"
 
 
-exec smbd -F -S -d3 2>/dev/null >/dev/null
+exec smbd -F 2>/dev/null >/dev/null
diff --git a/abs/core/runit/PKGBUILD b/abs/core/runit/PKGBUILD
index 90bb57e2..bb3a4f5 100755
--- a/abs/core/runit/PKGBUILD
+++ b/abs/core/runit/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=runit
 pkgver=1.8.0
-pkgrel=62
+pkgrel=64
 pkgdesc="A replacement for sysvinit, and other init schemes, with service supervision"
 url="http://smarden.org/runit/"
 license="BSD"
@@ -64,3 +64,10 @@ build() {
 
 
 }
+md5sums=('46549303a336bee8f627bfb399d44085'
+         '5828ac37537d60ded00252dc02d462c6'
+         '984dbe096b0db26ad9f3f5b51addd9c9'
+         'e347ea8cf2981f2cd4105111ea1ce1d4'
+         '263198ec006b87891ea0f3ab1d103086'
+         '3ec5f3013dcbd60b6b957d17ba220585'
+         'febe6821f4bea3bfa93f4b6d3df4d801')
diff --git a/abs/core/runit/shutdown.script b/abs/core/runit/shutdown.script
index 3bcc5d3..229996b 100755
--- a/abs/core/runit/shutdown.script
+++ b/abs/core/runit/shutdown.script
@@ -23,9 +23,8 @@ then
 	done
 	if [ x$delay = x ]
 	then
-	        echo "-t is mandatory"
-        	exit 4
-	fi
+	    delay=0
+    fi
 
 	if [ x$reboot = x1 ]
 	then
diff --git a/abs/core/samba/PKGBUILD b/abs/core/samba/PKGBUILD
index 24b2dba..44996c6 100644
--- a/abs/core/samba/PKGBUILD
+++ b/abs/core/samba/PKGBUILD
@@ -1,39 +1,91 @@
-# $Id: PKGBUILD 37517 2009-05-02 16:35:12Z tpowa $
-# Maintainer: judd <jvinet@zeroflux.org>
-pkgname=samba
-pkgver=3.3.4
+# $Id: PKGBUILD 64318 2010-01-19 19:31:39Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributor: judd <jvinet@zeroflux.org>
+pkgbase=samba
+pkgname=('smbclient' 'samba')
+pkgver=3.4.5
 # We use the 'A' to fake out pacman's version comparators.  Samba chooses
 # to append 'a','b',etc to their subsequent releases, which pamcan
 # misconstrues as alpha, beta, etc.  Bad samba!
-_realver=3.3.4
-pkgrel=1
-pkgdesc="Tools to access a server's filespace and printers via SMB"
+_realver=3.4.5
+pkgrel=3
 arch=(i686 x86_64)
 url="http://www.samba.org"
 license=('GPL3')
-backup=(etc/logrotate.d/samba etc/pam.d/samba etc/samba/smb.conf etc/xinetd.d/swat etc/conf.d/samba)
-depends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' 'smbclient=3.3.4' 'libcap>=2.16' 'heimdal>=1.2-1' 'pam'  'gnutls>=2.4.1' 'tdb=3.3.4')
+makedepends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' 'libcap>=2.16' 'heimdal>=1.2-1' 'pam'  'gnutls>=2.4.1' 'talloc' 'tdb')
 options=(!makeflags)
-source=(http://us1.samba.org/samba/ftp/stable/${pkgname}-${_realver}.tar.gz \
-        no-clients.patch samba samba.logrotate swat.xinetd samba.pam samba.conf.d)
+source=(http://us1.samba.org/samba/ftp/stable/${pkgbase}-${_realver}.tar.gz
+        samba samba.logrotate 
+        swat.xinetd 
+        samba.pam 
+        samba.conf.d)
+### UNINSTALL dmapi package before building!!!
 
 build() {
-  cd ${srcdir}/${pkgname}-${_realver}/source
-  patch -Np2 -i ${srcdir}/no-clients.patch || return 1
-
-  ./configure --prefix=/usr --with-configdir=/etc/samba \
+  cd ${srcdir}/${pkgbase}-${_realver}/source3
+  ./configure --prefix=/usr \
+              --libdir=/usr/lib/ \
+              --localstatedir=/var \
+              --with-configdir=/etc/samba \
               --with-lockdir=/var/cache/samba \
               --with-piddir=/var/run/samba \
-              --with-fhs --with-pam --with-ads --with-acl-support \
-              --without-cifsmount --without-libsmbclient \
-              --with-syslog --with-pam_smbpass \
-              --localstatedir=/var --disable-dnssd \
-	      --disable-avahi --libdir=/usr/lib/samba --without-fam
+              --with-fhs \
+              --with-pam \
+              --with-pam_smbpass \
+              --with-pammodulesdir=/lib/security \
+              --with-ads \
+              --with-acl-support \
+              --with-cifsmount \
+              --with-libsmbclient \
+              --with-syslog \
+              --enable-external-libtalloc \
+              --disable-dnssd \
+              --disable-avahi \
+              --without-libtdb  --disable-fam
   make || return 1
+}
+
+package_smbclient () {
+pkgdesc="Tools to access a server's filespace and printers via SMB"
+depends=('readline>=5.0.00' 'popt' 'libldap>=2.4.11-1' 'libcap>=2.16' 'heimdal>=1.2-1' 'db>=4.7' 'e2fsprogs' 'tdb' 'talloc')
+  cd ${srcdir}/${pkgbase}-${_realver}/source3
+  mkdir -p ${pkgdir}/usr/bin ${pkgdir}/sbin ${pkgdir}/usr/lib
+  install -m755 bin/{smbclient,rpcclient,smbspool,smbtree,smbcacls,smbcquotas,smbget,net,nmblookup} ${pkgdir}/usr/bin/
+  install -m755 bin/{mount.cifs,umount.cifs} ${pkgdir}/sbin/
+  for i in libnetapi* libwbclient* libsmbclient*;do
+      cp  -a bin/${i}*.so* ${pkgdir}/usr/lib/
+  done
+  install -m755 script/smbtar ${pkgdir}/usr/bin/
+  mkdir -p ${pkgdir}/usr/lib/cups/backend
+  ln -sf /usr/bin/smbspool ${pkgdir}/usr/lib/cups/backend/smb
+  mkdir -p ${pkgdir}/usr/include
+  install -m644 include/libsmbclient.h ${pkgdir}/usr/include/
+  install -m644 lib/netapi/netapi.h ${pkgdir}/usr/include/
+  mkdir -p ${pkgdir}/usr/share/man/man{1,7,8}
+  for man in smbspool \
+      umount.cifs mount.cifs net; do
+      install -m644 ../docs/manpages/${man}.8 ${pkgdir}/usr/share/man/man8/
+  done
+  for man in rpcclient smbcacls smbclient smbcquotas smbget \
+      smbtree smbtar nmblookup; do
+      install -m644 ../docs/manpages/${man}.1 ${pkgdir}/usr/share/man/man1/
+  done
+  install -m644 ../docs/manpages/libsmbclient.7 ${pkgdir}/usr/share/man/man7/
+}
+
+package_samba () {
+pkgdesc="Tools to access a server's filespace and printers via SMB"
+backup=(etc/logrotate.d/samba 
+        etc/pam.d/samba 
+        etc/samba/smb.conf
+        etc/xinetd.d/swat
+        etc/conf.d/samba)
+depends=('db>=4.7' 'popt' 'libcups' 'acl' 'libldap' "smbclient>=$pkgver" 'libcap>=2.16' 'heimdal>=1.2-1' 'pam' 'fam' 'gnutls>=2.4.1' 'e2fsprogs' 'tdb' 'talloc')
+  cd ${srcdir}/samba-${_realver}/source3
   mkdir -p ${pkgdir}/var/log/samba
   mkdir -p ${pkgdir}/etc/samba/private
   chmod 700 ${pkgdir}/etc/samba/private
-  make DESTDIR=$startdir/pkg install
+  make DESTDIR=${pkgdir} install || return 1
   chmod 644 ${pkgdir}/usr/include/*.h
   rm -rf ${pkgdir}/usr/var
   (cd script; cp installbin.sh i; cat i | sed 's/\/sbin\///' > installbin.sh)
@@ -45,42 +97,41 @@ build() {
   install -D -m644 ../../samba.logrotate ${pkgdir}/etc/logrotate.d/samba
   install -D -m644 ../../swat.xinetd ${pkgdir}/etc/xinetd.d/swat
   install -D -m644 ../../samba.pam ${pkgdir}/etc/pam.d/samba
-  # symlink libs
-  for i in ${pkgdir}/usr/lib/samba/libsmbshare*; do
-	ln -sf samba/$(basename $i) ${pkgdir}/usr/lib/$(basename $i)
-  done
   # spool directory
   install -d -m1777 ${pkgdir}/var/spool/samba
   sed -i 's|/usr/spool/samba|/var/spool/samba|g' ${pkgdir}/etc/samba/smb.conf.default
   # fix logrotate
   sed -i -e 's|log.%m|%m.log|g' ${pkgdir}/etc/samba/smb.conf.default
   # nsswitch libraries
-  install -D -m755 nsswitch/libnss_wins.so ${pkgdir}/lib/libnss_wins.so
+  install -D -m755 ${srcdir}/samba-${_realver}/nsswitch/libnss_wins.so ${pkgdir}/lib/libnss_wins.so
   ln -s libnss_wins.so ${pkgdir}/lib/libnss_wins.so.2
-  install -D -m755 nsswitch/libnss_winbind.so ${pkgdir}/lib/libnss_winbind.so
-  install -D -m755 bin/pam_winbind.so ${pkgdir}/lib/security/pam_winbind.so
-  # remove conflict files of smbclient and tdb
+  install -D -m755 ${srcdir}/samba-${_realver}/nsswitch/libnss_winbind.so ${pkgdir}/lib/libnss_winbind.so
+  # remove conflict files of smbclient
   for man in libsmbclient smbspool \
       umount.cifs mount.cifs net; do
-    rm -f ${pkgdir}/usr/share/man/man8/${man}.8
+      rm -f ${pkgdir}/usr/share/man/man8/${man}.8
+  done
+  for i in libnetapi* libwbclient* libsmbclient*;do
+      rm -f ${pkgdir}/usr/lib/$i
   done
-  for i in libnetapi* libtdb* libtalloc* libwbclient*; do
-	  rm -f ${pkgdir}/usr/lib/samba/$i
+  for bin in net \
+      nmblookup rpcclient smbcacls smbclient \
+      smbcquotas smbget smbspool smbtar smbtree; do
+      rm -f ${pkgdir}/usr/bin/$bin
   done
-  rm -f ${pkgdir}/usr/bin/tdbbackup
-  rm -f ${pkgdir}/usr/include/{tdb.h,talloc.h,netapi.h}
+  rm -f ${pkgdir}/usr/include/netapi.h
   for man in rpcclient smbcacls smbclient smbcquotas \
       smbtree smbtar nmblookup smbget; do
-    rm -f ${pkgdir}/usr/share/man/man1/${man}.1
+      rm -f ${pkgdir}/usr/share/man/man1/${man}.1
   done
   rm -f ${pkgdir}/usr/share/man/man7/libsmbclient.7
-
   rm -f ${pkgdir}/usr/include/libsmbclient.h
+  # remove conflict files of tdb
+  rm -f ${pkgdir}/usr/bin/{tdbbackup,tdbdump,tdbtool}
   # copy ldap example
-  install -D -m644 ${srcdir}/${pkgname}-${_realver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema
+  install -D -m644 ${srcdir}/samba-${_realver}/examples/LDAP/samba.schema ${pkgdir}/usr/share/doc/samba/examples/LDAP/samba.schema
 }
-md5sums=('1443165edb7cb3f56f1e77aec1ee3266'
-         'ce3d88336ade7522e9a8f59bb306accd'
+md5sums=('8e8a484782f2b7716b6c6bd9a7d2bf71'
          'e93533fa2296c07c1f645dfdd373657f'
          '5697da77590ec092cc8a883bae06093c'
          'a4bbfa39fee95bba2e7ad6b535fae7e6'
diff --git a/abs/core/sdparm/PKGBUILD b/abs/core/sdparm/PKGBUILD
index d6b7155..e0019e1 100644
--- a/abs/core/sdparm/PKGBUILD
+++ b/abs/core/sdparm/PKGBUILD
@@ -3,15 +3,15 @@
 # Contributor: grimi@poczta.fm
 
 pkgname=sdparm
-pkgver=1.02
-pkgrel=2
+pkgver=1.05
+pkgrel=1
 pkgdesc="An utility similar to hdparm but for SCSI devices"
 arch=('i686' 'x86_64')
-url="http://sg.torque.net/sg/sdparm.html"
+url="http://sg.danny.cz/sg/sdparm.html"
 groups=('base')
 license=('BSD')
 depends=('glibc')
-source=("http://sg.torque.net/sg/p/$pkgname-$pkgver.tgz")
+source=("http://sg.danny.cz/sg/p/$pkgname-$pkgver.tgz")
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -20,3 +20,4 @@ build() {
   make DESTDIR=$startdir/pkg install || return 1
   install -Dm644 COPYING $startdir/pkg/usr/share/licenses/sdparm/COPYING
 }
+md5sums=('8f42a10c5f4a826a29d6f5ccccf0c280')
diff --git a/abs/core/setuptools/PKGBUILD b/abs/core/setuptools/PKGBUILD
index 53c26a9..022f939 100644
--- a/abs/core/setuptools/PKGBUILD
+++ b/abs/core/setuptools/PKGBUILD
@@ -4,8 +4,8 @@
 # Contributor: Todd Maynard <arch@toddmaynard.com>
 
 pkgname=setuptools
-pkgver=0.6c9
-pkgrel=2
+pkgver=0.6c11
+pkgrel=1
 pkgdesc="setuptools is a collection of enhancements to the Python distutils"
 license=('PSF')
 arch=(i686 x86_64)
@@ -13,11 +13,11 @@ url="http://peak.telecommunity.com/DevCenter/setuptools"
 depends=('python')
 source=(http://cheeseshop.python.org/packages/source/s/$pkgname/$pkgname-$pkgver.tar.gz)
 
-md5sums=('3864c01d9c719c8924c455714492295e')
-
 build() {
   cd $startdir/src/$pkgname-$pkgver
   mkdir -p $startdir/pkg/usr/lib/python2.6/site-packages
   python setup.py install --root=$startdir/pkg
   echo "/usr/lib/python2.6/site-packages/$pkgname-$pkgver-py2.6.egg" > $startdir/pkg/usr/lib/python2.6/site-packages/setuptools.pth
 }
+
+md5sums=('7df2a529a074f613b509fb44feefe74e')
diff --git a/abs/core/sudo/PKGBUILD b/abs/core/sudo/PKGBUILD
index 64d8acd..7226f0c 100644
--- a/abs/core/sudo/PKGBUILD
+++ b/abs/core/sudo/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=sudo
-pkgver=1.7.0
-pkgrel=3
+pkgver=1.7.3
+pkgrel=1
 pkgdesc="Give certain users the ability to run some commands as root"
 arch=(i686 x86_64)
 url="http://www.sudo.ws/sudo/"
@@ -25,3 +25,5 @@ build() {
   install -D -m644 LICENSE $startdir/pkg/usr/share/licenses/sudo/LICENSE \
   	|| return 1
 }
+md5sums=('c22115b47cb2591bceedb914b673f031'
+         '4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
diff --git a/abs/core/syslog-ng/PKGBUILD b/abs/core/syslog-ng/PKGBUILD
index 3e5b473..2602964 100644
--- a/abs/core/syslog-ng/PKGBUILD
+++ b/abs/core/syslog-ng/PKGBUILD
@@ -1,8 +1,9 @@
 # $Id: PKGBUILD 2319 2008-05-31 21:01:41Z eric $
 # Maintainer: Judd Vinet <jvinet@zeroflux.org>
 pkgname=syslog-ng
-pkgver=2.0.9
-pkgrel=10
+_pkgver=2.0.10
+pkgver=2.0.9.10
+pkgrel=11
 pkgdesc="Next-generation syslogd with advanced networking and filtering capabilities"
 arch=(i686 x86_64)
 license=('GPL')
@@ -12,13 +13,15 @@ depends=('logrotate' 'glibc')
 makedepends=('flex' 'glib2' 'eventlog' 'pkgconfig' 'tcp_wrappers')
 provides=('logger')
 backup=('etc/syslog-ng.conf' 'etc/logrotate.d/syslog-ng')
-source=(http://www.balabit.com/downloads/files/syslog-ng/sources/stable/src/$pkgname-$pkgver.tar.gz \
+source=(http://www.balabit.com/downloads/files/syslog-ng/sources/${_pkgver}/source/${pkgname}_${_pkgver}.tar.gz \
 	syslog-ng.conf syslog-ng.logrotate syslog-ng)
-md5sums=('2d4232f7167c2b4f48794e4f8f80e863' 'ee95af3a4f969f3759e477289305c8c6'\
-         '9714c7479119922b55a7992677ebecb5' '9bd98250cfa49e13fa3fa731b6040549')
+md5sums=('e5ca55796c11899739affa417ff8a71e'
+         'ee95af3a4f969f3759e477289305c8c6'
+         '65d52180f1762e3985168fffa1faf0a8'
+         '9bd98250cfa49e13fa3fa731b6040549')
 
 build() {
-  cd $startdir/src/$pkgname-$pkgver
+  cd $startdir/src/$pkgname-${_pkgver}
   ./configure --prefix=/usr --sysconfdir=/etc \
     --localstatedir=/var/lib/syslog-ng --enable-tcp-wrapper \
     --disable-spoof-source
diff --git a/abs/core/syslog-ng/syslog-ng.logrotate b/abs/core/syslog-ng/syslog-ng.logrotate
index 75da1b0..b26dfb4 100644
--- a/abs/core/syslog-ng/syslog-ng.logrotate
+++ b/abs/core/syslog-ng/syslog-ng.logrotate
@@ -2,6 +2,6 @@
 	missingok
 	sharedscripts
 	postrotate
-		/bin/kill -HUP `cat /var/run/syslog-ng.pid 2>/dev/null`  2> /dev/null || true
+		/usr/bin/killall -HUP -q syslog-ng
 	endscript
 }
diff --git a/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf
new file mode 100644
index 0000000..c0849ef
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircd-haupgrey-alt.conf
@@ -0,0 +1,199 @@
+#
+# this config file was automatically generated
+# using lirc-0.5.5pre8 on Sun Apr 18 11:43:45 1999
+#
+# contributed by Jens Leuschner <leuschner@gmx.net>
+#
+# brand:             Hauppauge
+# model:             
+# supported devices: WinTV primo; WinTV pci; WinTV radio
+#
+# This config file will work with both homebrew receivers and 
+# original Hauppauge TV cards !!!
+#
+
+begin remote
+
+  name  Hauppauge
+  bits           13
+  flags SHIFT_ENC
+  eps            30
+  aeps          100
+
+  one           950   830
+  zero          950   830
+  plead         960
+  gap          89584
+  repeat_bit      2
+
+      begin codes
+          TV                       0x000000000000100F
+          RADIO                    0x000000000000100C
+          FULL_SCREEN              0x000000000000102E
+          CH+                      0x0000000000001020
+          CH-                      0x0000000000001021
+          VOL-                     0x0000000000001011
+          VOL+                     0x0000000000001010
+          MUTE                     0x000000000000100D
+          SOURCE                   0x0000000000001022
+          1                        0x0000000000001001
+          2                        0x0000000000001002
+          3                        0x0000000000001003
+          4                        0x0000000000001004
+          5                        0x0000000000001005
+          6                        0x0000000000001006
+          7                        0x0000000000001007
+          8                        0x0000000000001008
+          9                        0x0000000000001009
+          0                        0x0000000000001000
+          RESERVED                 0x000000000000101E
+          MINIMIZE                 0x0000000000001026
+      end codes
+
+end remote
+
+
+#
+# this config file was automatically generated
+# using lirc-0.6.6(animax) on Tue Apr 15 19:50:27 2003
+#
+# contributed by 
+#
+# brand: 				Hauppauge
+# model no. of remote control: 
+# devices being controlled by this remote: PVR 2/350
+#
+
+begin remote
+
+  name  hauppauge_pvr
+  bits           13
+  flags RC5|CONST_LENGTH
+  eps            30
+  aeps          100
+
+  one           969   811
+  zero          969   811
+  plead        1097
+  gap          114605
+  toggle_bit      2
+
+
+      begin codes
+          Power                    0x00000000000017FD
+          Go                       0x00000000000017FB
+          1                        0x00000000000017C1
+          2                        0x00000000000017C2
+          3                        0x00000000000017C3
+          4                        0x00000000000017C4
+          5                        0x00000000000017C5
+          6                        0x00000000000017C6
+          7                        0x00000000000017C7
+          8                        0x00000000000017C8
+          9                        0x00000000000017C9
+          Back/Exit                0x00000000000017DF
+          0                        0x00000000000017C0
+          Menu                     0x00000000000017CD
+          Red                      0x00000000000017CB
+          Green                    0x00000000000017EE
+          Yellow                   0x00000000000017F8
+          Blue                     0x00000000000017E9
+          Ch+                      0x00000000000017E0
+          Ch-                      0x00000000000017E1
+          Vol-                     0x00000000000017D1
+          Vol+                     0x00000000000017D0
+          Ok                       0x00000000000017E5
+          Mute                     0x00000000000017CF
+          Blank                    0x00000000000017CC
+          Full                     0x00000000000017FC
+          Rewind                   0x00000000000017F2
+          Play                     0x00000000000017F5
+          Forward                  0x00000000000017F4
+          Record                   0x00000000000017F7
+          Stop                     0x00000000000017F6
+          Pause                    0x00000000000017F0
+          Replay                   0x00000000000017E4
+          Skip                     0x00000000000017DE
+      end codes
+
+end remote
+
+
+#
+# this config file was automatically generated
+# using lirc-0.7.0(any) on Sun Nov 28 20:25:09 2004
+#
+# contributed by 
+#
+# brand:   Hauppauge 350
+# Created: G.J. Werler (The Netherlands)
+# Project: Mythtv Fedora Pundit-R www.mythtvportal.com
+# Date:    2004/11/28
+# model no. of remote control: Hauppauge A415-HPG
+# devices being controlled by this remote: PVR-350
+#
+
+begin remote
+
+  name  Hauppauge_350
+  bits           13
+  flags RC5|CONST_LENGTH
+  eps            30
+  aeps          100
+
+  one           969   811
+  zero          969   811
+  plead        1097
+  gap          114605
+  toggle_bit      2
+
+
+      begin codes
+          Go                       0x00000000000017BB
+          Power                    0x00000000000017BD
+          TV                       0x000000000000179C
+          Videos                   0x0000000000001798
+          Music                    0x0000000000001799
+          Pictures                 0x000000000000179A
+          Guide                    0x000000000000179B
+          Radio                    0x000000000000178C
+          Up                       0x0000000000001794
+          Left                     0x0000000000001796
+          Right                    0x0000000000001797
+          Down                     0x0000000000001795
+          OK                       0x00000000000017A5
+          Back/Exit                0x000000000000179F
+          Menu/i                   0x000000000000178D
+          Vol+                     0x0000000000001790
+          Vol-                     0x0000000000001791
+          Prev.Ch                  0x0000000000001792
+          Mute                     0x000000000000178F
+          Ch+                      0x00000000000017A0
+          Ch-                      0x00000000000017A1
+          Record                   0x00000000000017B7
+          Stop                     0x00000000000017B6
+          Rewind                   0x00000000000017B2
+          Play                     0x00000000000017B5
+          Forward                  0x00000000000017B4
+          Replay/SkipBackward      0x00000000000017A4
+          Pause                    0x00000000000017B0
+          SkipForward              0x000000000000179E
+          1                        0x0000000000001781
+          2                        0x0000000000001782
+          3                        0x0000000000001783
+          4                        0x0000000000001784
+          5                        0x0000000000001785
+          6                        0x0000000000001786
+          7                        0x0000000000001787
+          8                        0x0000000000001788
+          9                        0x0000000000001789
+          Asterix                  0x000000000000178A
+          0                        0x0000000000001780
+          #                        0x000000000000178E
+          Red                      0x000000000000178B
+          Green                    0x00000000000017AE
+          Yellow                   0x00000000000017B8
+          Blue                     0x00000000000017A9
+      end codes
+
+end remote
diff --git a/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt
new file mode 100644
index 0000000..f86246a
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/lircrc-haupgrey-alt
@@ -0,0 +1,533 @@
+# put this in /usr/MythVantage/templates/remotes/hauppauge-grey/
+# then change /etc/lircrc to include it
+#
+# lircrc.example.HauppaugeGrey-nativelirc
+# 2003-09-17, Robert Kulagowski
+# mailto:rkulagow@rocketmail.com
+# Save this file in ~/.mythtv/lircrc
+
+begin
+    prog = mythtv
+    button = Power
+    config = Esc
+end
+
+begin
+    prog = mythtv
+    button = Go
+# Swap the PiP windows
+    config = N
+end
+
+begin
+    prog = mythtv
+    button = 1
+    config = 1
+end
+
+begin
+    prog = mythtv
+    button = 2
+    config = 2
+end
+
+begin
+    prog = mythtv
+    button = 3
+    config = 3
+end
+
+begin
+    prog = mythtv
+    button = 4
+    config = 4
+end
+
+begin
+    prog = mythtv
+    button = 5
+    config = 5
+end
+
+begin
+    prog = mythtv
+    button = 6
+    config = 6
+end
+
+begin
+    prog = mythtv
+    button = 7
+    config = 7
+end
+
+begin
+    prog = mythtv
+    button = 8
+    config = 8
+end
+
+begin
+    prog = mythtv
+    button = 9
+    config = 9
+end
+
+begin
+    prog = mythtv
+    button = Back/Exit
+    config = Esc
+end
+
+begin
+    prog = mythtv
+    button = 0
+    config = 0
+end
+
+begin
+    prog = mythtv
+    button = Menu
+    config = M
+end
+
+# Below are keys used with the Hauppauge Grey remote
+
+begin
+   prog = mythtv
+# This is the Red key
+# We'll use it for "Delete"
+   button = Red
+   config = Space
+end
+
+begin
+   prog = mythtv
+# This is the Green key
+# We'll use it for "Information"
+   button = Green
+   config = I
+end
+
+# Note the "repeat = " strings in the volume and channel.
+# This means that if you hold down the key, every nth instance will be
+# passed.  This depends on your system, so you may want to increase or
+# decrease this and see what happens.  repeat = 1 is probably too
+# fast.
+
+begin
+  prog = mythtv
+# This is the Yellow key
+# Use it as a volume key
+  button = Yellow
+  repeat = 3
+  config = F10
+end
+
+begin
+  prog = mythtv
+# This is the Blue key
+# Use it as a volume key
+  button = Blue
+  repeat = 3
+  config = F11
+end
+
+begin
+    prog = mythtv
+    button = Ch+
+# This is the "up" on the central diamond
+    repeat = 3
+    config = Up
+end
+
+begin
+    prog = mythtv
+    button = Ch-
+# This is the "down" on the central diamond
+    repeat = 3
+    config = Down
+end
+
+begin
+    prog = mythtv
+    button = Vol-
+# This is the "left" on the central diamond
+    repeat = 3
+    config = Left
+end
+
+begin
+    prog = mythtv
+    button = Vol+
+# This is the "right" on the central diamond
+    repeat = 3
+    config = Right
+end
+
+begin
+    prog = mythtv
+# Middle button on the diamond
+    button = Ok
+    config = Return
+end
+
+begin
+    prog = mythtv
+    button = Mute
+    config = F9
+end
+
+begin
+   prog = mythtv
+# Change focus for PiP (to change channel in the other window)
+   button = Blank
+   config = B
+end
+
+begin
+   prog = mythtv
+# Toggle PiP on/off
+   button = Full
+   config = V
+end
+
+begin
+    prog = mythtv
+    button = Rewind
+    config = Left
+end
+
+begin
+    prog = mythtv
+    button = Play
+    config = P
+end
+
+begin
+    prog = mythtv
+    button = Forward
+    config = Right
+end
+
+begin
+  prog = mythtv
+  button = Record
+  config = R
+end
+
+begin
+   prog = mythtv
+# Teletext
+   button = Stop
+   config = T
+end
+
+begin
+    prog = mythtv
+    button = Pause
+    config = P
+end
+
+begin
+   prog = mythtv
+   button = Replay
+# Use for backwards commercial skip
+    config = Q
+end
+
+begin
+   prog = mythtv
+   button = Skip
+# Use for forward commercial skip
+    config = Z
+end
+
+#MPlayer
+begin
+   prog = mplayer
+   button = Power
+   config = quit
+end
+
+begin
+   prog = mplayer
+   button = Menu
+   config = osd
+end
+
+begin
+   prog = mplayer
+   button = Rewind
+   config = seek -10
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Forward
+   config = seek +10
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Vol-
+   config = seek -15
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Vol+
+   config = seek +15
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Replay
+   config = seek -60
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Skip
+   config = seek +60
+   repeat = 1
+end
+
+begin
+    prog = mplayer
+    button = Pause
+    config = pause
+end
+
+begin
+    prog = mplayer
+    button = OK
+    config = pause
+end
+
+begin
+    prog = mplayer
+    button = Play
+    config = pause
+end
+
+begin
+   prog = mplayer
+   button = Back/Exit
+   config = quit
+end
+
+begin
+    prog = mplayer
+    button = Play
+    config = pause
+end
+
+begin
+   prog = mplayer
+   button = Ch+
+   config = volume +1
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Ch-
+   config = volume -1
+   repeat = 1
+end
+
+begin
+   prog = mplayer
+   button = Mute
+   config = mute
+end
+##XINE
+
+ begin
+ prog = xine
+ button = Play
+ repeat = 3
+ config = Play
+ end
+
+ begin
+ prog = xine
+ button = Stop
+ repeat = 3
+ config = Stop
+ end
+
+ begin
+ prog = xine
+ button = Back/Exit
+ config = Quit
+ end
+
+ begin
+ prog = xine
+ button = Pause
+ repeat = 3
+ config = Pause
+ end
+
+ begin
+ prog = xine
+ button = Ch+
+ repeat = 4
+ config = EventUp
+ end
+
+ begin
+ prog = xine
+ button = Ch-
+ repeat = 4
+ config = EventDown
+ end
+
+ begin
+ prog = xine
+ button = Vol-
+ repeat = 4
+ config = EventLeft
+ end
+
+ begin
+ prog = xine
+ button = Vol+
+ repeat = 4
+ config = EventRight
+ end
+
+ begin
+ prog = xine
+ button = Ok
+ repeat = 0
+ config = EventSelect
+ end
+
+ begin
+ prog = xine
+ button = Menu
+ repeat = 0
+ config = Menu
+ end
+
+ #vol down
+ begin
+ prog = xine
+ button = Yellow
+ repeat = 1
+ config = Volume-
+ end
+
+ #vol up
+ begin
+ prog = xine
+ button = Red
+ repeat = 1
+ config = Volume+
+ end
+
+ begin
+ prog = xine
+ button = Forward
+ repeat = 2
+ config = SeekRelative+30
+ end
+
+ begin
+ prog = xine
+ button = Rewind
+ repeat = 2
+ config = SeekRelative-30
+ end
+
+ #ch up
+ begin
+ prog = xine
+ button = Green
+ repeat = 1
+ config = SeekRelative+60
+ end
+
+ #ch down
+ begin
+ prog = xine
+ button = Blue
+ repeat = 1
+ config = SeekRelative-60
+ end
+
+ #sleep
+ begin
+ prog = xine
+ button = Go
+ repeat = 1
+ config = ZoomIn
+ end
+
+ #display
+ begin
+ prog = xine
+ button = Skip
+ repeat = 1
+ config = ZoomOut
+ end
+
+ #skip chapter forward
+ begin
+ prog = xine
+ button = Skip
+ repeat = 1
+ config = EventNext
+ end
+
+ #skip chapter backward
+ begin
+ prog = xine
+ button = Replay
+ repeat = 1
+ config = EventPrior
+ end
+
+ begin
+ prog = lircnav
+ button = Vol-
+ config = page_down
+ end
+
+ begin
+ prog = lircnav
+ button = Vol+
+ config = page_up
+ end
+
+ begin
+ prog = lircnav
+ button = Ch+
+ config = up
+ end
+
+ begin
+ prog = lircnav
+ button = Ch-
+ config = down
+ end
+
+ begin
+ prog = lircnav
+ button = Ok
+ config = select
+ end
+
+ begin
+ prog = lircnav
+ button = Power
+ config = quit
+ end
diff --git a/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg
new file mode 100644
index 0000000..19acba3
Binary files /dev/null and b/abs/core/system-templates/templates/remotes/hauppauge-grey-alt/preview.jpg differ
diff --git a/abs/core/system-templates/templates/remotes/imon/lircrc b/abs/core/system-templates/templates/remotes/imon/lircrc
new file mode 100644
index 0000000..3ad34d8
--- /dev/null
+++ b/abs/core/system-templates/templates/remotes/imon/lircrc
@@ -0,0 +1,240 @@
+###################################
+# lircrc config as used by Stev391 June 2007
+# Not all of the buttons are configured yet, only the commonly used buttons
+###################################
+
+# Escape
+begin
+    prog = mythtv
+    button = AppExit
+    config = Esc
+    repeat = 3
+end
+
+# Escape Key 2
+begin
+    prog = mythtv
+    button = Esc
+    config = Esc
+end
+
+# Channel Up
+begin
+    prog   = mythtv
+    button = Ch+
+    config = Up
+    repeat = 3
+end
+
+# Channel Down
+begin
+    prog   = mythtv
+    button = Ch-
+    config = Down
+    repeat = 3
+end
+
+# Volume Up
+begin
+    prog = mythtv
+    button = Vol+
+    repeat = 3
+    config = Right
+end
+
+# Volume Down
+begin
+    prog = mythtv
+    button = Vol-
+    repeat = 3
+    config = Left
+end
+
+# Enter/Return
+begin
+    prog   = mythtv
+    button = Enter
+    config = Return
+end
+
+# Menu Button
+begin
+    prog = mythtv
+    button = Menu
+    config = M
+end
+
+# Mute
+begin
+    prog = mythtv
+    button = Mute
+    config = F9  
+end
+
+# Rewind
+begin
+    prog = mythtv
+    button = Rewind
+    config = PgUp  
+end
+
+# Fast Forward
+begin
+    prog = mythtv
+    button = FastForward
+    config = PgDown  
+end
+
+# Play
+begin
+    prog = mythtv
+    button = Play
+    config = P  
+end
+
+# Pause
+begin
+    prog = mythtv
+    button = Pause
+    config = P  
+end
+
+# Record
+begin
+  prog = mythtv
+  button = Record
+  config = R  
+end
+
+# Stop
+begin
+   prog = mythtv
+   button = Stop
+   config = O  
+end
+
+# Previous Track/Chapter
+begin
+   prog = mythtv
+   button = PrevChapter
+   config = Home  
+end
+
+# Next Track/Chapter
+begin
+   prog = mythtv
+   button = NextChapter
+   config = End
+end
+
+# Jump Point to MythVideo
+begin
+   prog = mythtv
+   button = MyMovie
+   config = F12
+end
+
+# Jump Point to MythMusic
+begin
+   prog = mythtv
+   button = MyMusic
+   config = F11
+end
+
+# Jump Point to LiveTV
+begin
+   prog = mythtv
+   button = MyTV
+   config = F10
+end
+
+# Jump Point to Main Menu
+begin
+   prog = mythtv
+   button = Multimon
+   config = F2
+end
+
+# Jump Point to Myth Gallery
+begin
+   prog = mythtv
+   button = MyPhoto
+   config = F3
+end
+
+# Jump Point to Play DVD
+begin
+   prog = mythtv
+   button = MyDVD
+   config = F4
+end
+
+# Display Information
+begin
+   prog = mythtv
+   button = Caption
+   config = I
+end
+
+##############################
+# Numbers
+##############################
+begin
+    prog = mythtv
+    button = 0
+    config = 0  
+end
+
+begin
+    prog = mythtv
+    button = 1
+    config = 1  
+end
+
+begin
+    prog = mythtv
+    button = 2
+    config = 2  
+end
+
+begin
+    prog = mythtv
+    button = 3
+    config = 3  
+end
+
+begin
+    prog = mythtv
+    button = 4
+    config = 4  
+end
+
+begin
+    prog = mythtv
+    button = 5
+    config = 5  
+end
+
+begin
+    prog = mythtv
+    button = 6
+    config = 6  
+end
+
+begin
+    prog = mythtv
+    button = 7
+    config = 7  
+end
+
+begin
+    prog = mythtv
+    button = 8
+    config = 8  
+end
+
+begin
+    prog = mythtv
+    button = 9
+    config = 9  
+end
diff --git a/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap b/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap
index 8e453b9..36b52fa 100644
--- a/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap
+++ b/abs/core/system-templates/templates/remotes/streamzap/lircd.conf.streamzap
@@ -62,6 +62,9 @@ begin remote
           GREEN                    0x21
           YELLOW                   0x22
           BLUE                     0x23
+          DISP                     0x24
+          PTZ                      0x25
+          HELP                     0x26
       end codes
 
 end remote
diff --git a/abs/core/system-templates/templates/samba/smb.conf.template b/abs/core/system-templates/templates/samba/smb.conf.template
index da1e89e..478ea6b 100644
--- a/abs/core/system-templates/templates/samba/smb.conf.template
+++ b/abs/core/system-templates/templates/samba/smb.conf.template
@@ -18,7 +18,8 @@
 ;   hosts allow = 192.168.1. 192.168.2. 127.
 
    load printers = no
-
+   printing = bsd
+   printcap name = /dev/null
 # you may wish to override the location of the printcap file
 ;   printcap name = /etc/printcap
 
diff --git a/abs/core/system-templates/templates/settings/default_1/jumppoints.txt b/abs/core/system-templates/templates/settings/default_1/jumppoints.txt
new file mode 100644
index 0000000..1cbf116
--- /dev/null
+++ b/abs/core/system-templates/templates/settings/default_1/jumppoints.txt
@@ -0,0 +1,44 @@
+destination	description	keylist	hostname
+Reload Theme			REPLACEME
+Main Menu			REPLACEME
+Program Guide			REPLACEME
+Program Finder			REPLACEME
+Manage Recordings / Fix Conflicts			REPLACEME
+Program Recording Priorities			REPLACEME
+Manage Recording Rules			REPLACEME
+Channel Recording Priorities			REPLACEME
+TV Recording Playback			REPLACEME
+TV Recording Deletion			REPLACEME
+Live TV			REPLACEME
+Live TV In Guide			REPLACEME
+Status Screen			REPLACEME
+Previously Recorded			REPLACEME
+ScreenShot			REPLACEME
+Create DVD			REPLACEME
+Create Archive			REPLACEME
+Import Archive			REPLACEME
+View Archive Log			REPLACEME
+Play Created DVD			REPLACEME
+Burn DVD			REPLACEME
+Netflix Browser	Browse Netflix titles		REPLACEME
+Netflix Queue	Administer Netflix Queue		REPLACEME
+Netflix History	View Netflix History		REPLACEME
+MythGallery	Image viewer / slideshow		REPLACEME
+MythGame	Game frontend		REPLACEME
+Play music			REPLACEME
+Select music playlists			REPLACEME
+Rip CD			REPLACEME
+Scan music			REPLACEME
+Show Music Miniplayer			REPLACEME
+MythNews	RSS News feed reader		REPLACEME
+MythSmolt	Sample plugin	Ctrl+Alt+P	REPLACEME
+MythStream	AV stream plugin		REPLACEME
+MythVideo	The MythVideo default view		REPLACEME
+Video Manager	The MythVideo video manager		REPLACEME
+Video Browser	The MythVideo video browser		REPLACEME
+Video Listings	The MythVideo video listings		REPLACEME
+Video Gallery	The MythVideo video gallery		REPLACEME
+Play DVD	Play a DVD		REPLACEME
+Play VCD	Play a VCD		REPLACEME
+Rip DVD	Import a DVD into your MythVideo database		REPLACEME
+MythWeather	Weather forecasts		REPLACEME
diff --git a/abs/core/system-templates/templates/settings/default_2/jumppoints.txt b/abs/core/system-templates/templates/settings/default_2/jumppoints.txt
new file mode 100644
index 0000000..1cbf116
--- /dev/null
+++ b/abs/core/system-templates/templates/settings/default_2/jumppoints.txt
@@ -0,0 +1,44 @@
+destination	description	keylist	hostname
+Reload Theme			REPLACEME
+Main Menu			REPLACEME
+Program Guide			REPLACEME
+Program Finder			REPLACEME
+Manage Recordings / Fix Conflicts			REPLACEME
+Program Recording Priorities			REPLACEME
+Manage Recording Rules			REPLACEME
+Channel Recording Priorities			REPLACEME
+TV Recording Playback			REPLACEME
+TV Recording Deletion			REPLACEME
+Live TV			REPLACEME
+Live TV In Guide			REPLACEME
+Status Screen			REPLACEME
+Previously Recorded			REPLACEME
+ScreenShot			REPLACEME
+Create DVD			REPLACEME
+Create Archive			REPLACEME
+Import Archive			REPLACEME
+View Archive Log			REPLACEME
+Play Created DVD			REPLACEME
+Burn DVD			REPLACEME
+Netflix Browser	Browse Netflix titles		REPLACEME
+Netflix Queue	Administer Netflix Queue		REPLACEME
+Netflix History	View Netflix History		REPLACEME
+MythGallery	Image viewer / slideshow		REPLACEME
+MythGame	Game frontend		REPLACEME
+Play music			REPLACEME
+Select music playlists			REPLACEME
+Rip CD			REPLACEME
+Scan music			REPLACEME
+Show Music Miniplayer			REPLACEME
+MythNews	RSS News feed reader		REPLACEME
+MythSmolt	Sample plugin	Ctrl+Alt+P	REPLACEME
+MythStream	AV stream plugin		REPLACEME
+MythVideo	The MythVideo default view		REPLACEME
+Video Manager	The MythVideo video manager		REPLACEME
+Video Browser	The MythVideo video browser		REPLACEME
+Video Listings	The MythVideo video listings		REPLACEME
+Video Gallery	The MythVideo video gallery		REPLACEME
+Play DVD	Play a DVD		REPLACEME
+Play VCD	Play a VCD		REPLACEME
+Rip DVD	Import a DVD into your MythVideo database		REPLACEME
+MythWeather	Weather forecasts		REPLACEME
diff --git a/abs/core/system-templates/templates/settings/default_2/settings.txt b/abs/core/system-templates/templates/settings/default_2/settings.txt
index 106be04..8c3a391 100644
--- a/abs/core/system-templates/templates/settings/default_2/settings.txt
+++ b/abs/core/system-templates/templates/settings/default_2/settings.txt
@@ -74,7 +74,6 @@ GuiOffsetY	0	REPLACEME
 GuiSizeForTV	0	REPLACEME
 GuiVidModeResolution	640x480	REPLACEME
 GuiWidth	0	REPLACEME
-HaltCommand	halt	REPLACEME
 HideMouseCursor	1	REPLACEME
 HorizScanPercentage	0	REPLACEME
 Ignore_ID3	0	REPLACEME
@@ -126,7 +125,7 @@ LogPrintLevel	8	REPLACEME
 LogPrintLevel	8	REPLACEME
 LongChannelFormat	<num> <name>	REPLACEME
 MasterMixerVolume	70	REPLACEME
-MenuTheme	STB-menu	REPLACEME
+MenuTheme	MythVantage-menu	REPLACEME
 MixerControl	PCM	REPLACEME
 MixerDevice	/dev/mixer	REPLACEME
 MonitorDrives	0	REPLACEME
@@ -248,7 +247,7 @@ SlideshowTransition	none	REPLACEME
 SmartChannelChange	0	REPLACEME
 SmartForward	0	REPLACEME
 StickyKeys	1	REPLACEME
-Style		REPLACEME
+Style	Windows	REPLACEME
 SubTitleCommand	-sid %s	REPLACEME
 TagSeparator	 - 	REPLACEME
 Theme	basic-blue	REPLACEME
@@ -276,7 +275,6 @@ UnknownCategory	Unknown	REPLACEME
 UnknownTitle	Unknown	REPLACEME
 upnp:UDN:urn:schemas-upnp-org:device:MediaServer:1	dee5b0fe-7087-4960-8794-428d3e01a61f	REPLACEME
 UseArrowAccels	1	REPLACEME
-UseDHCP	1	REPLACEME
 UseOutputPictureControls	1	REPLACEME
 UseVideoModes	0	REPLACEME
 UseVideoTimebase	0	REPLACEME
@@ -293,9 +291,9 @@ VideoGalleryColsPerPage	4	REPLACEME
 VideoGalleryNoDB	0	REPLACEME
 VideoGalleryRowsPerPage	3	REPLACEME
 VideoGallerySubtitle	1	REPLACEME
-VideoDefaultPlayer	/usr/bin/playmedia.sh VIDEO %s	REPLACEME
 VideoListUnknownFiletypes	1	REPLACEME
 VideoNewBrowsable	1	REPLACEME
+VideoDefaultPlayer	Internal	REPLACEME
 VideoStartupDir	/data/media/video/movies	REPLACEME
 VideoTreeLoadMetaData	1	REPLACEME
 VideoTreeNoDB	0	REPLACEME
@@ -318,3 +316,5 @@ WebBrowserScrollSpeed	4	REPLACEME
 WebBrowserZoomLevel	20	REPLACEME
 XScanDisplacement	0	REPLACEME
 YScanDisplacement	0	REPLACEME
+HaltCommand	sudo /sbin/poweroff	REPLACEME
+RebootCommand	sudo /sbin/reboot	REPLACEME
diff --git a/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf b/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
old mode 100755
new mode 100644
index 31df8aa..93a2183
--- a/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
+++ b/abs/core/system-templates/templates/transmit/motorola_dct700/lircd.conf
@@ -1,83 +1,359 @@
+#########
 #
-# this config file was originally generated
-# using lirc-0.6.6(serial) on Fri Mar 28 22:46:44 2003
-# modified by hand on Sunday Jul 17 00:12:00 2005
+# Modified DCT2000 entry for DCT700 (sends zeros)
+# For use with the USB MCE ir receiver
 #
-# contributed by rob scullion
-# based on the DCT2000 file contrib'd by shane bradley
-#
-# brand:                       Motorola
-# model no. of remote control: ? - Comcast badged
-# devices being controlled by this remote: DCT2524/1612
-#
-# Note: The "ON DEMAND" button on the Comcast
-# badged remote just sends a "1" followed by
-# an "ok/select" and is thus not included in
-# this config file.
-                                                                                    
+
 begin remote
- name  DCT2524
-  bits             16
-  flags SPACE_ENC|CONST_LENGTH
-  eps              30
-  aeps            100
-
-  header         9036  4424
-  one             556  2185
-  zero            556  4424
-  ptrail          556
-  gap          100025
-  toggle_bit        0
- 
-
-      begin codes
-          power                    0x000000000000AFF9
-          rew                      0x00000000000087F7
-          play                     0x00000000000027FD
-          ffwd                     0x00000000000047FB
-          stop                     0x000000000000C7F3
-          pause                    0x00000000000007FF
-          rec                      0x00000000000073FC
-          skipback                 0x000000000000C3F7
-          mydvr                    0x00000000000043FF
-          live                     0x00000000000083F0
-          pageup                   0x000000000000A3F3
-          pagedown                 0x00000000000023FB
-          a_lock                   0x00000000000097F6
-          b_day-                   0x00000000000063FD
-          c_day+                   0x000000000000E3F5
-          up                       0x000000000000D3F6
-          down                     0x00000000000053FE
-          left                     0x00000000000093F1
-          right                    0x00000000000013F9
-          ok/select                0x00000000000077F8
-          guide                    0x000000000000F3F4
-          info                     0x00000000000033FA
-          menu                     0x00000000000067F9
-          exit                     0x000000000000B7F4
-          help                     0x000000000000B3F2
-          last                     0x00000000000037FC
-          vol+                     0x0000000000004FF3
-          vol-                     0x0000000000008FFB
-          mute                     0x0000000000000FF7
-          fav                      0x00000000000057FA
-          ch+                      0x0000000000002FF5
-          ch-                      0x000000000000CFFD
-          1                        0x0000000000007FF0
-          2                        0x000000000000BFF8
-          3                        0x0000000000003FF4
-          4                        0x000000000000DFFC
-          5                        0x0000000000005FF2
-          6                        0x0000000000009FFA
-          7                        0x0000000000001FF6
-          8                        0x000000000000EFFE
-          9                        0x0000000000006FF1
-          0                        0x000000000000FFFF
-          tv/vcr_input             0x000000000000D7F2
-          hdzoom_enter             0x000000000000FDFC
-          pnp-swap                 0x0000000000003BF2
-      end codes
- 
-end remote
 
+  name   DCT700
+  flags RAW_CODES
+  eps            30
+  aeps          100
+
+  ptrail        520
+  repeat     0     0
+  gap    100000
+
+      begin raw_codes
+
+          name bypass
+             9000    4400     550    2200     550    2150
+              550    4450     550    2150     550    4450
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    4450     550    4400
+              550    2200     550    4400     550
+
+         name power
+             9050    4400     550    2200     550    4400
+              550    2200     550    4400     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    4400
+              550    4450     550    2150     550
+
+          name help
+             9000    4400     600    2150     550    4450
+              550    2150     550    2200     550    4400
+              550    4450     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550    4450
+              500    2200     550    4450     550
+
+          name day-
+             9000    4400     550    4400     550    2200
+              550    2200     550    4400     550    4400
+              600    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     500    2200
+              550    4450     550    2150     550
+
+          name day+
+             9000    4400     550    2200     550    2200
+              550    2150     550    4450     550    4400
+              550    4400     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    4450     550    2150
+              550    4450     550    2200     500
+
+          name rec
+             9050    4400     550    4400     550    2200
+              550    2200     550    2150     550    4450
+              550    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    4450     550    4400     550
+
+          name stop
+             9000    4400     550    4400     550    2200
+              550    2200     550    4400     550    4400
+              550    4450     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    4450     500    2200     550
+
+          name pause
+             9000    4400     550    4400     550    4450
+              550    4400     550    4450     550    4400
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550
+
+          name rew
+             9000    4400     550    2200     550    4400
+              550    4450     550    4400     550    4450
+              550    2150     550    2200     550    2200
+              500    2200     550    2200     550    2200
+              500    2200     550    4450     550    2150
+              550    2200     550    2200     500
+
+          name ffwd
+             9050    4400     550    4400     550    2200
+              550    4400     550    4450     550    4400
+              550    2200     550    2150     600    2150
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    4450
+              550    2200     500    2200     550
+
+          name play
+             9050    4400     550    2150     550    2200
+              550    2200     550    4400     550    4400
+              550    4450     550    2200     550    2150
+              550    2200     550    2200     500    2200
+              550    2200     550    4400     550    2200
+              550    4400     550    2200     550
+
+          name pageup
+             9000    4400     550    2200     550    4400
+              550    2200     550    4400     550    4450
+              550    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4400     550    4450
+              550    2150     550    2200     550
+
+          name pagedown
+             9000    4400     550    4450     550    4400
+              550    2200     550    4400     550    4450
+              550    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    4400
+              550    2200     550    2150     550
+
+          name info
+             9050    4400     550    4400     550    4400
+              600    2150     550    2200     550    4400
+              550    4450     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    4450
+              550    2150     550    4450     550
+
+          name menu
+             9050    4400     550    4400     550    2200
+              550    2200     550    4400     550    4400
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    4400
+              550    4400     550    2200     550
+
+          name guide
+             9050    4400     550    2150     600    2150
+              550    2200     550    2150     550    4450
+              550    4400     550    2200     550    2150
+              600    2150     550    2200     550    2200
+              500    2200     550    4450     550    2150
+              550    4450     550    4400     550
+
+          name lock
+             9000    4400     600    2150     550    4400
+              600    4400     550    2200     550    4400
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550    2200
+              550    2150     550    4450     550
+
+          name exit
+             9000    4400     550    2200     550    4400
+              550    2200     550    2200     550    4400
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550    2200
+              550    4400     550    4450     550
+
+          name up
+             9000    4450     550    2150     550    2200
+              550    4400     550    2200     550    4400
+              550    4450     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550    2200
+              550    2200     500    4450     550
 
+          name down
+             9000    4400     600    4400     550    2200
+              550    4400     550    2200     550    4400
+              550    4400     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    4450     550
+
+          name left
+             9000    4400     550    2200     550    4400
+              550    4400     600    2150     550    4450
+              550    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4400     550    4450
+              550    4400     550    2200     550
+
+          name right
+             9050    4400     550    4400     550    4450
+              550    4400     550    2200     550    4400
+              550    4400     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    4450
+              500    4450     550    2200     550
+
+          name ok
+             9050    4400     550    4400     550    2200
+              550    2200     550    2150     550    4450
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    4400
+              550    4450     550    4400     550
+
+          name ch+
+             9000    4400     550    4400     550    4450
+              550    2150     600    4400     550    2150
+              600    2150     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4450     500    2200
+              550    4450     550    2150     550
+
+          name ch-
+             9050    4400     550    2150     600    2150
+              550    4450     550    4400     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    4400     550    2200     550
+
+          name last
+             9000    4400     550    4450     550    4400
+              550    2200     550    2150     550    4450
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    4400     550    4450     500
+
+          name fav
+             9000    4400     550    4450     550    2150
+              550    4450     550    2150     550    4450
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    4450
+              500    2200     550    4450     500
+
+          name enter
+             9000    4400     600    2150     550    2200
+              550    2150     550    2200     550    4400
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4450     500    4450
+              550    4400     550    4450     550
+
+          name music
+             9000    4400     550    2200     550    2200
+              550    2150     550    2200     550    4400
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4400     550    4450
+              550    4400     550    4450     500
+
+          name p
+             9000    4400     600    4400     550    4400
+              550    4450     550    2150     550    4450
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    4450     550
+
+          name x1
+             9050    4400     550    4400     550    4450
+              550    4400     550    2200     550    2150
+              550    4450     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550    4450
+              500    4450     550    2200     550
+
+          name x2
+             9050    4400     550    2150     550    2200
+              550    2200     550    4400     550    2200
+              550    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    4400
+              550    4450     550    2150     550
+
+          name 1
+             9000    4400     550    4450     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4400     550    4450
+              550    4400     550    4450     550
+
+          name 2
+             9000    4400     550    2200     550    4400
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    4450
+              550    4400     550    4450     500
+
+          name 3
+             9000    4400     550    4450     550    4400
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550    2200
+              550    4400     550    4450     500
+
+          name 4
+             9000    4400     550    2200     550    2150
+              550    4450     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    4400     550    4450     550
+
+          name 5
+             9000    4450     550    4400     550    2200
+              550    4400     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    2200     550    2150
+              550    2200     550    4400     550    4450
+              550    2200     500    4450     550
+
+          name 6
+             9000    4400     550    2200     550    4400
+              550    4400     600    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     500    2200     550    2200
+              550    2200     500    2200     550    4450
+              550    2150     550    4450     550
+
+          name 7
+             9000    4400     550    4400     600    4400
+              550    4400     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    4450     550    2150
+              550    2200     550    4400     550
+
+          name 8
+             9000    4400     550    2200     550    2150
+              550    2200     550    4400     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    2150     550    2200
+              550    2200     550    4400     550
+
+          name 9
+             9050    4400     550    4400     550    2200
+              550    2150     600    4400     550    2150
+              600    2150     550    2200     550    2200
+              500    2200     550    2200     550    2200
+              500    2200     550    4450     550    4400
+              550    4400     550    2200     550
+
+          name 0
+             9000    4400     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550    2200
+              550    2150     550    2200     550   42050
+             9000    2250     500
+
+      end raw_codes
+
+end remote
diff --git a/abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf b/abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf
new file mode 100644
index 0000000..4bd3cd4
--- /dev/null
+++ b/abs/core/system-templates/templates/transmit/motorola_qip7100/lircd.conf
@@ -0,0 +1,81 @@
+#
+# this config file was automatically generated
+# using lirc-0.8.3-CVS-pvr150-2(default) on Sun Nov 16 20:41:54 2008
+#
+# contributed by Michael Hanson
+#
+# brand: Verizon (?)
+# model no. of remote control: Verizon FiOS Universal
+# 			       Inside battery compartment has the following
+#			       information:
+#				RC1445302/00B
+#				3139 238 16051 REV 2
+#				MADE IN CHINA
+#				CP02 50829 G 009840	 
+# devices being controlled by this remote: Motorola QIP6200-2
+#
+
+begin remote
+
+  name  Motorola_QIP6200-2
+  bits           16
+  flags SPACE_ENC|CONST_LENGTH
+  eps            30
+  aeps          100
+
+  header       9028  4450
+  one           555  4433
+  zero          555  2181
+  ptrail        556
+  gap          99876
+  toggle_bit_mask 0x0
+
+      begin codes
+          power                    0x5006
+          menu                     0x9806
+          guide                    0x0C0B
+          info                     0xCC05
+          up                       0x2C09
+          down                     0xAC01
+          left                     0x6C0E
+          right                    0xEC06
+          ok                       0x8807
+          exit                     0x480B
+          options                  0x4205
+          widgets                  0xC209
+          ondemand                 0x580A
+          favorites                0xA805
+          last                     0xC803
+          fiostv                   0x7C0F
+          ch+                      0xD00A
+          ch-                      0x3002
+          previous                 0x3C08
+          dvr                      0xBC00
+          next                     0xFC07
+          rewind                   0x7808
+          play-pause               0xF800
+          fastforward              0xB804
+          stop                     0x380C
+          record                   0x8C03
+          1                        0x800F
+          2                        0x4007
+          3                        0xC00B
+          4                        0x2003
+          5                        0xA00D
+          6                        0x6005
+          7                        0xE009
+          8                        0x1001
+          9                        0x900E
+          0                        0x0000
+          *                        0x2201
+          #                        0x0203
+          yellow                   0xE801
+          blue                     0xE40E
+          red                      0x1406
+          green                    0x940A
+          av                       0x280D
+          pip                      0x4403
+          pip-change               0xC40D
+      end codes
+
+end remote
diff --git a/abs/core/system-templates/templates/xorg/modeline.ATSC b/abs/core/system-templates/templates/xorg/modeline.ATSC
index b2cd709..a4e1a6b 100644
--- a/abs/core/system-templates/templates/xorg/modeline.ATSC
+++ b/abs/core/system-templates/templates/xorg/modeline.ATSC
@@ -4,9 +4,9 @@ ModeLine "My480p" 28.6 720 744 768 900 480 484 492 525
 
 ModeLine "My540p" 37.26 960 976 1008 1104 540 542 548 563 +hsync +vsync
 
-ModeLine "My720p"  73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync  74.086 MHz 44.955 kHz 5$
+ModeLine "My720p"  73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync 
 
-ModeLine "My720p2" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync  74.086 MHz 44.955 kHz 5$
+ModeLine "My720p2" 73.825 1280 1320 1368 1640 720 722 724 751 +hsync +vsync 
 
 ModeLine "My1080i" 79.84 1920 2040 2200 2368 1080 1090 1106 1125 +vsync -hsync interlace
 
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.ati b/abs/core/system-templates/templates/xorg/xorg.conf.ati
index 8c75552..529e186 100644
--- a/abs/core/system-templates/templates/xorg/xorg.conf.ati
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.ati
@@ -25,7 +25,7 @@ Section "Module"
 	Load  "record"
 	Load  "extmod"
 	Load  "dri"
-	Load  "type1"
+#	Load  "type1"
 	Load  "freetype"
 EndSection
 
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.intel b/abs/core/system-templates/templates/xorg/xorg.conf.intel
index c4a67c9..5bc73f8 100644
--- a/abs/core/system-templates/templates/xorg/xorg.conf.intel
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.intel
@@ -49,7 +49,7 @@ Section "Module"
 	Load  "extmod"
 	Load  "glx"
         Load  "bitmap" # bitmap-fonts
-	Load  "type1"
+#	Load  "type1"
 	Load  "freetype"
 	Load  "record"
 EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.nvidia b/abs/core/system-templates/templates/xorg/xorg.conf.nvidia
index 3a53183..2c3b7f1 100755
--- a/abs/core/system-templates/templates/xorg/xorg.conf.nvidia
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.nvidia
@@ -18,7 +18,7 @@ EndSection
 Section "Module"
     Load           "dbe"
     Load           "extmod"
-    Load           "type1"
+#    Load           "type1"
     Load           "freetype"
     Load           "glx"
 EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.vesa b/abs/core/system-templates/templates/xorg/xorg.conf.vesa
index fa96ea5..dbc607d 100755
--- a/abs/core/system-templates/templates/xorg/xorg.conf.vesa
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.vesa
@@ -18,7 +18,7 @@ EndSection
 Section "Module"
     Load           "dbe"
     Load           "extmod"
-    Load           "type1"
+#    Load           "type1"
     Load           "freetype"
   
 EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.via b/abs/core/system-templates/templates/xorg/xorg.conf.via
index 91c517f..c18eb6f 100644
--- a/abs/core/system-templates/templates/xorg/xorg.conf.via
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.via
@@ -19,7 +19,7 @@ Section "Module"
     Load           "dbe"
     Load           "glx"
     Load           "extmod"
-    Load           "type1"
+#    Load           "type1"
     Load           "freetype"
     Load           "dri"
 EndSection
diff --git a/abs/core/system-templates/templates/xorg/xorg.conf.vmware b/abs/core/system-templates/templates/xorg/xorg.conf.vmware
index 4e9fd4a..1c038ef 100755
--- a/abs/core/system-templates/templates/xorg/xorg.conf.vmware
+++ b/abs/core/system-templates/templates/xorg/xorg.conf.vmware
@@ -18,7 +18,7 @@ EndSection
 Section "Module"
     Load           "dbe"
     Load           "extmod"
-    Load           "type1"
+#    Load           "type1"
     Load           "freetype"
     Load           "glx"
 EndSection
diff --git a/abs/core/talloc/PKGBUILD b/abs/core/talloc/PKGBUILD
new file mode 100644
index 0000000..903de2d
--- /dev/null
+++ b/abs/core/talloc/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 63108 2010-01-14 18:54:03Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+
+pkgname=talloc
+pkgver=2.0.1
+pkgrel=1
+pkgdesc="talloc is a hierarchical pool based memory allocator with destructors"
+arch=(i686 x86_64)
+license=('GPL3')
+url="http://tdb.samba.org/"
+source=(http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+depends=('glibc')
+
+build() {
+   cd ${srcdir}/${pkgname}-${pkgver}
+   ./configure --prefix=/usr \
+   --sysconfdir=/etc/samba \
+   --localstatedir=/var \
+   --enable-talloc-compat1 \
+   --enable-largefile
+   make || return 1
+   make DESTDIR=$pkgdir/ install
+   # fix permission
+   chmod 644 $pkgdir/usr/lib/libtalloc.a
+}
+md5sums=('c6e736540145ca58cb3dcb42f91cf57b')
diff --git a/abs/core/tar/PKGBUILD b/abs/core/tar/PKGBUILD
index 2a0c87c..9c16ddf 100644
--- a/abs/core/tar/PKGBUILD
+++ b/abs/core/tar/PKGBUILD
@@ -1,8 +1,8 @@
 # $Id: PKGBUILD 1082 2008-04-29 16:11:13Z andyrtr $
 # Maintainer: judd <jvinet@zeroflux.org>
 pkgname=tar
-pkgver=1.20
-pkgrel=13
+pkgver=1.23
+pkgrel=1
 pkgdesc="Utility used to store, backup, and transport files"
 arch=('i686' 'x86_64')
 license=('GPL3')
@@ -10,8 +10,6 @@ groups=('base')
 url="http://www.gnu.org/software/tar/tar.html"
 depends=('glibc' 'bash')
 source=(ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.bz2 tar.1)
-md5sums=('1a7e17f27abf583b3b0bc059a827e68b'
-         'a5f8c5da7a9465ea1978145f3ef0610c')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -20,3 +18,5 @@ build() {
   make DESTDIR=$startdir/pkg install
   install -D -m644 ../tar.1 $startdir/pkg/usr/share/man/man1/tar.1
 }
+md5sums=('41e2ca4b924ec7860e51b43ad06cdb7e'
+         'a5f8c5da7a9465ea1978145f3ef0610c')
diff --git a/abs/core/tdb/PKGBUILD b/abs/core/tdb/PKGBUILD
index e908119..4bf2af6 100644
--- a/abs/core/tdb/PKGBUILD
+++ b/abs/core/tdb/PKGBUILD
@@ -1,28 +1,26 @@
-# $Id: PKGBUILD 37511 2009-05-02 16:17:09Z tpowa $
-# Maintainer: eric <eric@archlinux.org>
+# $Id: PKGBUILD 63109 2010-01-14 18:55:16Z tpowa $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributorr: eric <eric@archlinux.org>
 # Contributor: Tom Newsom <Jeepster@gmx.co.uk>
 
 pkgname=tdb
-pkgver=3.3.4
+pkgver=1.2.0
 pkgrel=1
-# We use the 'A' to fake out pacman's version comparators.  Samba chooses
-# to append 'a','b',etc to their subsequent releases, which pamcan
-# misconstrues as alpha, beta, etc.  Bad samba!
-_realver=3.3.4
-pkgdesc="A Trivial Database similar to GDBM but allows simultaneous commits"
+pkgdesc="A Trivia Database similar to GDBM but allows simultaneous commits"
 arch=(i686 x86_64)
 license=('GPL3')
-url="www.samba.org"
-source=(http://us1.samba.org/samba/ftp/samba-${_realver}.tar.gz)
-options=(!makeflags)
+url="http://tdb.samba.org/"
+source=(http://samba.org/ftp/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+makedepends=('python')
+optdepends=('python: for python bindings')
+options=(force)
 
 build() {
-   cd ${srcdir}/samba-${_realver}/source/lib/tdb
-   ./autogen.sh
-   ./configure --prefix=/usr
+   cd ${srcdir}/${pkgname}-${pkgver}
+   ./configure --prefix=/usr \
+               --localstatedir=/var \
+               --sysconfdir=/etc/samba
    make || return 1
-   make DESTDIR=$startdir/pkg install
-   ln -sf /usr/lib/libtdb.so.1.1.2 ${pkgdir}/usr/lib/libtdb.so.1
-   ln -sf /usr/lib/libtdb.so.1.1.2 ${pkgdir}/usr/lib/libtdb.so
+   make DESTDIR=$pkgdir/ install
 }
-md5sums=('1443165edb7cb3f56f1e77aec1ee3266')
+md5sums=('4115849d2ef431a10bc1f1933eafb9b6')
diff --git a/abs/core/test-pattern/PKGBUILD b/abs/core/test-pattern/PKGBUILD
new file mode 100644
index 0000000..7ac825b
--- /dev/null
+++ b/abs/core/test-pattern/PKGBUILD
@@ -0,0 +1,16 @@
+pkgname=test-pattern
+pkgver=1.0
+pkgrel=6
+arch=('i686')
+pkgdesc="script to create test pattern videos"
+depends=(imagemagick)
+license=('GPL')
+source=(test_pattern.bash)
+
+build() {
+  cd $startdir/src
+#  mkdir $startdir/pkg/usr/bin/
+  install -m755 -D test_pattern.bash $startdir/pkg/usr/bin/test_pattern.bash
+}
+
+md5sums=('3a427a5dee0763c6b0a5938fedbde883')
diff --git a/abs/core/test-pattern/test_pattern.bash b/abs/core/test-pattern/test_pattern.bash
new file mode 100755
index 0000000..d220fb0
--- /dev/null
+++ b/abs/core/test-pattern/test_pattern.bash
@@ -0,0 +1,326 @@
+#!/bin/bash
+
+# Set default options to be overriden by command line arguments.
+
+w=400
+h=325
+rate=50
+TEMPDIR=
+unset remove_tempdir
+interlaced=
+aspect_ratio=
+bitrate=
+
+while getopts ":w:h:t:r:ia:b:" opt; do
+  case $opt in
+    w)
+      w=$OPTARG
+      ;;
+    h)
+      h=$OPTARG
+      ;;
+    t)
+      TEMPDIR=$OPTARG
+      ;;
+    r)
+      rate=$OPTARG
+      ;;
+    i)
+      interlaced=TRUE
+      ;;
+    a)
+      aspect_ratio=$OPTARG
+      ;;
+    b)
+      bitrate=$OPTARG
+      ;;
+    \?)
+      echo -n "\
+Error: Invalid option -$OPTARG
+
+Usage:
+  test_pattern.bash [options]
+    -w width
+	The width in pixels.
+    -h height
+        The height in pixels.
+    -t tempdir
+	Temporary directory for intermediate files. If no directory is specified, one is created and deleted at the end of processing.
+    -r fieldrate
+    -i
+	Generate an interlaced test pattern
+    -a n:m
+	Aspect ratio of generated video.
+    -b bitrate
+	Bitrate used for encoding.
+
+Example:
+test_pattern.bash -w 1440 -h 1080 -t temp -r 50 -i -a 16:9 -b 12000k
+"
+      exit 1
+  esac
+done
+
+if [ -z "$aspect_ratio" ] ; then
+  aspect_ratio="${w}:${h}"
+fi
+
+aspectx=$(echo $aspect_ratio | cut -d: -f1)
+aspecty=$(echo $aspect_ratio | cut -d: -f2)
+
+# Calculate some dimensions based on the requested size.
+
+barw=$((w/32))
+barstep=$((w/90))
+barstart=$((-barw/barstep-1))
+
+frames=$((w/2))
+
+unity=$((h*2/27))
+unitx=$((unity*aspecty*w/(aspectx*h)))
+gridlw=$((unity*3/43))
+
+echo unity=$unity
+echo unitx=$unitx
+
+nvgrid=$(((h-gridlw)/unity))
+nhgrid=$(((((w-gridlw)/unitx)-1)/2*2+1))
+
+gridstartx=$((w/2-(nhgrid*unitx+gridlw)/2-1))
+gridstarty=$((h/2-(nvgrid*unity+gridlw)/2-1))
+
+echo nvgrid=$nvgrid
+echo nhgrid=$nhgrid
+echo gridstartx=$gridstartx
+echo gridstarty=$gridstarty
+
+echo parsed tempdir $TEMPDIR
+
+if [ -z "$TEMPDIR" ] ; then
+  TEMPDIR=$(mktemp -d --tmpdir=/tmp)
+  remove_tempdir=1
+else
+  if [ ! -d "$TEMPDIR" ] ; then
+    mkdir $TEMPDIR
+  fi
+fi
+
+echo parsed tempdir $TEMPDIR $remove_tempdir
+
+unset checker
+checker=( -fill "rgb(192,192,192)" ) 
+for ((g=-9;g<=7;g=g+2)) ; do
+  checker=( "${checker[@]}" 
+    -draw 
+    "rectangle $((w/2+g*unitx*7/10)),$((gridstarty+unity*3+gridlw)) $((w/2+(g+1)*unitx*7/10)),$((gridstarty+unity*4+gridlw))" )
+done
+
+checker=( "${checker[@]}" -fill black )
+for ((g=-8;g<=8;g=g+2)) ; do
+  checker=( "${checker[@]}" 
+    -draw 
+    "rectangle $((w/2+g*unitx*7/10)),$((gridstarty+unity*3+gridlw)) $((w/2+(g+1)*unitx*7/10)),$((gridstarty+unity*4+gridlw))" )
+done
+
+unset stripe
+stripe=( -fill white )
+ 
+for ((g=0;g<5;g++)) ; do
+  startx=$((w/2+(3-g*2)*unitx))
+  endx=$((startx+2*unitx))
+
+  for ((x=startx;x<endx;x=x+2*(g+1))) ; do 
+    stripe=( "${stripe[@]}" 
+      -draw 
+      "rectangle $x,$((gridstarty+unity*7+gridlw)) $((x+g)),$((gridstarty+unity*9+gridlw))" )
+  done
+done
+
+for ((g=0;g<13;g++)) ; do
+  stripe=( "${stripe[@]}" 
+    -draw 
+    "rectangle $((gridstartx+(nhgrid/2-6+g)*unitx)),$((gridstarty+unity*6+gridlw)) $((gridstartx+(nhgrid/2-6+g)*unitx+gridlw)),$((gridstarty+unity*7+gridlw-1))" )  
+done
+
+convert -size ${w}x${h} xc:white \
+        -fill "rgb(204,204,0)" \
+        -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2-4*unitx)),$((gridstarty+unity*6+gridlw))" \
+        -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*11+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*13+gridlw))" \
+        -fill "rgb(0,204,204)" \
+        -draw "rectangle $((w/2-4*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2-2*unitx)),$((gridstarty+unity*6+gridlw))" \
+        -fill "rgb(0,204,0)" \
+        -draw "rectangle $((w/2-2*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2-0*unitx)),$((gridstarty+unity*6+gridlw))" \
+        -fill "rgb(204,0,204)" \
+        -draw "rectangle $((w/2-0*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2+2*unitx)),$((gridstarty+unity*6+gridlw))" \
+        -fill "rgb(204,0,0)" \
+        -draw "rectangle $((w/2+2*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2+4*unitx)),$((gridstarty+unity*6+gridlw))" \
+        -draw "rectangle $((w/2-unitx/2)),$((gridstarty+unity*11+gridlw)) $((w/2+unitx/2)),$((gridstarty+unity*13+gridlw))" \
+        -fill "rgb(0,0,204)" \
+        -draw "rectangle $((w/2+4*unitx)),$((gridstarty+unity*4+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*6+gridlw))" \
+\
+	-fill black \
+        -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*6+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*9+gridlw))" \
+	"${stripe[@]}" \
+	-fill black \
+        -draw "rectangle $((w/2-(unitx-gridlw)/2)),$((gridstarty+unity*5+gridlw)) $((w/2+(unitx-gridlw)/2-1)),$((gridstarty+unity*8+gridlw))" \
+	-fill white \
+        -draw "rectangle $((w/2-6*unitx)),$((h/2-gridlw/2)) $((w/2+6*unitx)),$((h/2-gridlw/2+gridlw))" \
+        -draw "rectangle $((w/2-gridlw/2)),$((gridstarty+unity*5+gridlw)) $((w/2-gridlw/2+gridlw)),$((gridstarty+unity*8+gridlw))" \
+\
+        -fill "rgb(0,0,0)" \
+        -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2-4*unitx)),$((gridstarty+unity*10+gridlw))" \
+        -fill "rgb(51,51,51)" \
+        -draw "rectangle $((w/2-4*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2-2*unitx)),$((gridstarty+unity*10+gridlw))" \
+        -fill "rgb(102,102,102)" \
+        -draw "rectangle $((w/2-2*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2-0*unitx)),$((gridstarty+unity*10+gridlw))" \
+        -fill "rgb(153,153,153)" \
+        -draw "rectangle $((w/2-0*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2+2*unitx)),$((gridstarty+unity*10+gridlw))" \
+        -fill "rgb(204,204,204)" \
+        -draw "rectangle $((w/2+2*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2+4*unitx)),$((gridstarty+unity*10+gridlw))" \
+        -fill "rgb(255,255,255)" \
+        -draw "rectangle $((w/2+4*unitx)),$((gridstarty+unity*9+gridlw)) $((w/2+6*unitx)),$((gridstarty+unity*10+gridlw))" \
+\
+        -fill black \
+        -draw "rectangle $((w/2-2*unitx)),$((gridstarty+unity*1+gridlw)) $((w/2+2*unitx)),$((gridstarty+unity*2+gridlw))" \
+        -draw "rectangle $((w/2-6*unitx)),$((gridstarty+unity*2+gridlw)) $((w/2-3*unitx)),$((gridstarty+unity*3+gridlw))" \
+        -draw "rectangle $((w/2+6*unitx)),$((gridstarty+unity*2+gridlw)) $((w/2+3*unitx)),$((gridstarty+unity*3+gridlw))" \
+        -draw "rectangle $((gridstartx+(nhgrid/2-2)*unitx)),$((gridstarty+unity*2+gridlw)) $((gridstartx+(nhgrid/2-2)*unitx+gridlw)),$((gridstarty+unity*3+gridlw))" \
+        -draw "rectangle $((w/2-3*unitx+1)),$((gridstarty+unity*10+gridlw)) $((w/2+3*unitx)),$((gridstarty+unity*11+gridlw))" \
+        -fill white \
+        -draw "rectangle $((gridstartx+(nhgrid/2-2)*unitx)),$((gridstarty+unity*10+gridlw)) $((gridstartx+(nhgrid/2-2)*unitx+gridlw)),$((gridstarty+unity*11+gridlw))" \
+	"${checker[@]}" \
+        ${TEMPDIR}/centre.png
+
+convert -size ${w}x${h} xc:black \
+	-fill white \
+	-draw "ellipse $((w/2)),$((h/2)) $((6*unitx)),$((6*unity)) 0,360" \
+	${TEMPDIR}/circle.png 
+
+unset drawgrid
+drawgrid=( -fill white )
+for ((g=0;g<=$nhgrid;g++)) ; do
+  drawgrid=( "${drawgrid[@]}" 
+    -draw 
+    "rectangle $((gridstartx+g*unitx)),0 $((gridstartx+g*unitx+gridlw)),$h" )
+done
+
+for ((g=0;g<=$nvgrid;g++)) ; do
+  drawgrid=( "${drawgrid[@]}" 
+    -draw 
+    "rectangle 0,$((gridstarty+g*unity)) $w,$((gridstarty+g*unity+gridlw))" )
+done
+
+drawgrid=( "${drawgrid[@]}" 
+  -draw "rectangle 0,0 $gridstartx,$h" 
+  -draw "rectangle 0,0 $w,$gridstarty" 
+  -draw "rectangle $w,$h $((gridstartx+nhgrid*unitx)),0" 
+  -draw "rectangle $w,$h 0,$((gridstarty+nvgrid*unity))" 
+  -fill black
+)
+
+for ((g=0;g<=$nhgrid;g=g+2)) ; do
+  drawgrid=( "${drawgrid[@]}" 
+    -draw 
+    "rectangle $((gridstartx+g*unitx+gridlw+1)),0 $((gridstartx+(g+1)*unitx)),$((gridstarty-1))"
+    -draw
+    "rectangle $((gridstartx+g*unitx+gridlw+1)),$((gridstarty+nvgrid*unity+gridlw+1)) $((gridstartx+(g+1)*unitx)),$h" 
+  )
+done
+
+for ((g=0;g<=$nvgrid;g=g+2)) ; do
+  drawgrid=( "${drawgrid[@]}" 
+    -draw 
+    "rectangle 0,$((gridstarty+g*unity+gridlw+1)) $((gridstartx-1)),$((gridstarty+(g+1)*unity-1))"
+    -draw
+    "rectangle $((gridstartx+nhgrid*unitx+gridlw+1)),$((gridstarty+g*unity+gridlw+1)) $w,$((gridstarty+(g+1)*unity-1))" 
+  )
+done
+
+diagonals=(
+	-fill white
+	-linewidth 10
+	-fill white
+	-draw "line 0,0 $((w/2)),$((h-1))"
+	-draw "line 0,0 $((w-1)),$((h/2))"
+	-draw "line 0,$((h-1)) $((w/2)),0"
+	-draw "line 0,$((h-1)) $((w-1)),$((h/2))"
+	-draw "line $((w-1)),0 $((w/2)),$((h-1))"
+	-draw "line $((w-1)),0 0,$((h/2))"
+	-draw "line $((w-1)),$((h-1)) $((w/2)),0"
+	-draw "line $((w-1)),$((h-1)) 0,$((h/2))" )
+
+convert -size ${w}x${h} xc:grey50 \
+	"${diagonals[@]}" \
+	"${drawgrid[@]}" \
+        -fill "rgb(51,153,102)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2-7)*unitx+gridlw+1)),$((gridstarty+unity+gridlw+1))    $((gridstartx+(nhgrid/2-6)*unitx-1)),$((h/2))" \
+        -fill "rgb(204,102,102)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2-7)*unitx+gridlw+1)),$((h/2))                         $((gridstartx+(nhgrid/2-6)*unitx-1)),$((gridstarty+unity*12-1))" \
+        -fill "rgb(102,102,255)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2-6)*unitx)),$((gridstarty+unity+gridlw+1))             $((gridstartx+(nhgrid/2-5)*unitx-1)),$((gridstarty+unity*3-1))" \
+        -fill "rgb(153,102,0)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2-6)*unitx)),$((gridstarty+10*unity+gridlw+1))          $((gridstartx+(nhgrid/2-5)*unitx-1)),$((gridstarty+unity*12-1))" \
+        -fill "rgb(128,128,0)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2+7)*unitx+gridlw+1)),$((gridstarty+unity+gridlw+1))    $((gridstartx+(nhgrid/2+8)*unitx-1)),$((h/2))" \
+        -fill "rgb(102,102,255)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2+7)*unitx+gridlw+1)),$((h/2))                         $((gridstartx+(nhgrid/2+8)*unitx-1)),$((gridstarty+unity*12-1))" \
+        -fill "rgb(102,102,255)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2+6)*unitx+gridlw+1)),$((gridstarty+unity+gridlw+1))    $((gridstartx+(nhgrid/2+7)*unitx+gridlw)),$((gridstarty+unity*3-1))" \
+        -fill "rgb(153,102,0)" \
+        -draw "rectangle $((gridstartx+(nhgrid/2+6)*unitx+gridlw+1)),$((gridstarty+10*unity+gridlw+1)) $((gridstartx+(nhgrid/2+7)*unitx+gridlw)),$((gridstarty+unity*12-1))" \
+	${TEMPDIR}/grid.png
+
+convert -size ${w}x${h} ${TEMPDIR}/grid.png ${TEMPDIR}/centre.png ${TEMPDIR}/circle.png -composite ${TEMPDIR}/background.png
+
+if [ -n "$interlaced" ] ; then
+  interlaced_frame=0
+  convert -size 1x${h} -tile-offset +0+1 pattern:gray50 \
+    -scale ${w}x${h}\! ${TEMPDIR}/interlace.png
+fi
+
+for ((i=0; i < $frames; i++)) ; do
+
+  prev_image_name=$image_name
+  image_name=${TEMPDIR}/test$(printf "%03d" $i).png
+  echo creating image $image_name
+
+  convert -size ${w}x${h} ${TEMPDIR}/background.png \
+	  -fill black \
+	  -draw "rectangle $(((barstart+i)*barstep)),0 $(((barstart+i)*barstep+barw)),${h}" \
+	  -font Arial-Black-Regular \
+	  -pointsize $unity \
+	  -fill white \
+          -stroke black -strokewidth 5 -annotate +$((w-2*i))+$((gridstartx+11*unity)) 'Judder Test' \
+          -stroke none                 -annotate +$((w-2*i))+$((gridstartx+11*unity)) 'Judder Test' \
+	  -depth 8 \
+	  ${image_name}
+
+  if [ -n "$interlaced" ] ; then
+    interlaced_frame=$((interlaced_frame + 1))
+
+    if [ $interlaced_frame = 2 ] ; then
+      echo interlacing $((i-1)) and $i
+      interlaced_frame=0
+      convert -size ${w}x${h} -depth 8 $prev_image_name $image_name ${TEMPDIR}/interlace.png -composite ${TEMPDIR}/interlaced$(printf "%03d" $((i/2))).png
+    fi
+  fi
+done
+
+bitrate_flags=
+if [ -n "$bitrate" ] ; then
+  bitrate_flags="-b $bitrate"
+fi
+
+if [ -n "$interlaced" ] ; then
+  ffmpeg -r ${rate} -i ${TEMPDIR}/interlaced%03d.png -r ${rate} \
+    -vcodec mpeg2video -flags +ilme+ildct -aspect $aspect_ratio \
+    ${bitrate_flags} -y test.mpg
+else
+  ffmpeg -r ${rate} -i ${TEMPDIR}/test%03d.png -r ${rate} \
+    -vcodec mpeg2video -aspect $aspect_ratio \
+    ${bitrate_flags} -y test.mpg
+fi
+
+if [ -n "$remove_tempdir" ] ; then
+  rm -Rf $TEMPDIR
+fi
diff --git a/abs/core/tweaker/PKGBUILD b/abs/core/tweaker/PKGBUILD
index 79fc20d..85df000 100644
--- a/abs/core/tweaker/PKGBUILD
+++ b/abs/core/tweaker/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=tweaker
 pkgver=1
-pkgrel=55
+pkgrel=56
 pkgdesc="applies tweaks to the baseline configuration and attempts to optimize settings for the hardware it finds"
 arch=('i686' 'x86_64')
 
@@ -41,3 +41,5 @@ build() {
    # Copy our tweaker Perl modules for general use
    install -m0555  lib/Tweaker/* $startdir/pkg/usr/lib/perl5/vendor_perl/Tweaker/
 }
+md5sums=('77fab526e866b273091e6816135ef25f'
+         'e897b87dd308f9562d0867de9fab2de0')
diff --git a/abs/core/tweaker/bin/twk_general.pl b/abs/core/tweaker/bin/twk_general.pl
index 23572bc..f89912c 100755
--- a/abs/core/tweaker/bin/twk_general.pl
+++ b/abs/core/tweaker/bin/twk_general.pl
@@ -410,7 +410,7 @@ sub implement_option {
 	    change_or_make_setting('UserJob1', 'myth2ipod \"%DIR%\" \"%FILE%\"');
 	    change_or_make_setting('UserJob2', 'myt2xvid3 \"%DIR%\" \"%FILE%\"');
 	    change_or_make_setting('UserJob3', 'myth2x264 \"%DIR%/%FILE%\" \"%TITLE% - %SUBTITLE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
-	    change_or_make_setting('UserJob4', 'removecommercials \"%DIR%\" \"%FILE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
+	    change_or_make_setting('UserJob4', 'removecommercials.sh \"%DIR%\" \"%FILE%\" \"%CHANID%\" \"%STARTTIME%\" \"%JOBID%\"');
 	    change_or_make_setting('UserJobDesc1', 'Transcode for iPod');
 	    change_or_make_setting('UserJobDesc2', 'Transcode to xvid');
 	    change_or_make_setting('UserJobDesc3', 'Transcode to h264');
diff --git a/abs/core/unclutter/PKGBUILD b/abs/core/unclutter/PKGBUILD
index 5622394..64e808d 100755
--- a/abs/core/unclutter/PKGBUILD
+++ b/abs/core/unclutter/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=unclutter
 pkgver=8
-pkgrel=1
+pkgrel=5
 pkgdesc="Hides mouse cursor when not in use"
 url="http://www.x.org/contrib/utilities/unclutter-8.README"
 license="GPL"
@@ -8,10 +8,10 @@ depends=(x-server)
 makedepends=()
 conflicts=()
 replaces=()
-backup=()
+backup=(etc/unclutter.cfg)
 install=
 arch='i686'
-source=(ftp://ftp.x.org/contrib/utilities/$pkgname-$pkgver.tar.Z)
+source=(ftp://ftp.x.org/contrib/utilities/$pkgname-$pkgver.tar.Z unclutter.cfg)
 
 
 build() {
@@ -19,4 +19,10 @@ build() {
   make LDLIBS=-L/usr/X11R6/lib || return 1
   mkdir -p $startdir/pkg/usr/X11R6/bin
   make DESTDIR=$startdir/pkg BINDIR=$startdir/pkg/usr/X11R6/bin install
+  mkdir -p $startdir/pkg/etc
+  cp -f  $startdir/src/unclutter.cfg $startdir/pkg/etc/unclutter.cfg
 }
+md5sums=('83d7a6498b69078f869378f801b6a84b'
+         '7277205ebd875a0175a5fdb184c6373c')
+md5sums=('83d7a6498b69078f869378f801b6a84b'
+         '07815312d084a31595cd90ab45c68727')
diff --git a/abs/core/unclutter/unclutter.cfg b/abs/core/unclutter/unclutter.cfg
new file mode 100644
index 0000000..e097b95
--- /dev/null
+++ b/abs/core/unclutter/unclutter.cfg
@@ -0,0 +1,2 @@
+idle=1
+jitter=200
diff --git a/abs/core/unzip/PKGBUILD b/abs/core/unzip/PKGBUILD
index 4bcecf5..730beb9 100644
--- a/abs/core/unzip/PKGBUILD
+++ b/abs/core/unzip/PKGBUILD
@@ -2,33 +2,19 @@
 # Maintainer: Dan McGee <dan@archlinux.org>
 
 pkgname=unzip
-pkgver=5.52
-pkgrel=4
+pkgver=6.00
+_pkgver=60
+pkgrel=1
 pkgdesc="Unpacks .zip archives such as those made by PKZIP"
 arch=('i686' 'x86_64')
 url="http://www.info-zip.org/"
 license=('custom')
 depends=('glibc')
-source=(http://downloads.sourceforge.net/infozip/unzip552.tar.gz
-        unzip-5.5.2-CVE-2008-0888.patch
-        unzip-5.50-alt-iconv-v1.2-utf8.patch
-        unzip542-size-64bit.patch)
-md5sums=('9d23919999d6eac9217d1f41472034a9'
-         '2de357c2ba84576f38b17aed87915c87'
-         'a4797a1f6e45385f5e021f9f6f2ec0fa'
-         '83c7e79de9618bf7d081dd639dd3dde1')
+source=(http://downloads.sourceforge.net/infozip/${pkgname}${_pkgver}.tar.gz)
 
 build() {
-  cd $startdir/src/$pkgname-$pkgver
-
-  # http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0888
-  patch -Np0 -i ../unzip-5.5.2-CVE-2008-0888.patch || return 1
+  cd $startdir/src/${pkgname}${_pkgver}
 
-  # FS#8383
-  patch -Np1 -i ../unzip-5.50-alt-iconv-v1.2-utf8.patch || return 1
-
-  [ "$CARCH" == "x86_64" ] && (patch -Np0 -i ../unzip542-size-64bit.patch || return 1)
-  
   export CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64"
   if [ "${CARCH}" = "i686" ]; then
     make -f unix/Makefile LOCAL_UNZIP="$CFLAGS" prefix=/usr linux || return 1
@@ -39,3 +25,8 @@ build() {
 
   install -Dm644 LICENSE $startdir/pkg/usr/share/licenses/unzip/LICENSE
 }
+md5sums=('62b490407489521db863b523a7f86375'
+         '2de357c2ba84576f38b17aed87915c87'
+         'a4797a1f6e45385f5e021f9f6f2ec0fa'
+         '83c7e79de9618bf7d081dd639dd3dde1')
+md5sums=('62b490407489521db863b523a7f86375')
diff --git a/abs/core/v4l-dvb/PKGBUILD b/abs/core/v4l-dvb/PKGBUILD
index 90f6034..610472b 100644
--- a/abs/core/v4l-dvb/PKGBUILD
+++ b/abs/core/v4l-dvb/PKGBUILD
@@ -4,7 +4,7 @@
 pkgname=v4l-dvb
 _kernver=2.6.28-LinHES
 pkgver=1
-pkgrel=13
+pkgrel=17
 pkgdesc="V4L-DVB drivers from mercurial"
 arch=('i686' 'x86_64')
 license=('GPL2')
@@ -12,13 +12,17 @@ url="http://linuxtv.org/"
 depends=('kernel26')
 makedepends=(kernel-headers)
 install=v4l-dvb.install
-source=(http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz)
+source=('http://linuxtv.org/hg/v4l-dvb/archive/tip.tar.gz' 'hdpvr.diff')
 
 build() {
   cd $startdir/src/v4l-dvb*/
+#  patch -p1 < ../hdpvr.diff
   make KERNDIR=/lib/modules/$_kernver/build \
   DESTDIR=$startdir/pkg KERNELRELEASE=$_kernver all || return 1
   make KERNDIR=/lib/modules/$_kernver/build \
   DESTDIR=$startdir/pkg KERNELRELEASE=$_kernver install || return 1
   rm -fr $startdir/pkg/lib/modules/$_kernver/modules*
 }
+
+md5sums=('e0c4eb1f436d44118e0bf0757516310c'
+         'd50c96211d23fba48ebc4c5e2d1e6102')
diff --git a/abs/core/v4l-dvb/hdpvr.diff b/abs/core/v4l-dvb/hdpvr.diff
new file mode 100644
index 0000000..bf465e5
--- /dev/null
+++ b/abs/core/v4l-dvb/hdpvr.diff
@@ -0,0 +1,22 @@
+diff -ruaN v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr-core.c v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr-core.c
+--- v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr-core.c	2010-01-25 09:04:15.000000000 -0800
++++ v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr-core.c	2010-01-25 12:11:04.000000000 -0800
+@@ -59,6 +59,7 @@
+ 	{ USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID) },
+ 	{ USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID1) },
+ 	{ USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID2) },
++	{ USB_DEVICE(HD_PVR_VENDOR_ID, HD_PVR_PRODUCT_ID3) },
+ 	{ }					/* Terminating entry */
+ };
+ MODULE_DEVICE_TABLE(usb, hdpvr_table);
+diff -ruaN v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr.h v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr.h
+--- v4l-dvb-31eaa9423f98.orig/linux/drivers/media/video/hdpvr/hdpvr.h	2010-01-25 09:04:15.000000000 -0800
++++ v4l-dvb-31eaa9423f98/linux/drivers/media/video/hdpvr/hdpvr.h	2010-01-25 12:11:17.000000000 -0800
+@@ -30,6 +30,7 @@
+ #define HD_PVR_PRODUCT_ID	0x4900
+ #define HD_PVR_PRODUCT_ID1	0x4901
+ #define HD_PVR_PRODUCT_ID2	0x4902
++#define HD_PVR_PRODUCT_ID3	0x4982
+ 
+ #define UNSET    (-1U)
+ 
diff --git a/abs/core/vdpauinfo-legacy/PKGBUILD b/abs/core/vdpauinfo-legacy/PKGBUILD
new file mode 100644
index 0000000..d58c672
--- /dev/null
+++ b/abs/core/vdpauinfo-legacy/PKGBUILD
@@ -0,0 +1,26 @@
+# It is not expected that vdpau will work with the 71xx nVidia drivers, but we still want
+# 'vdpinfo' to return something when users run it, even if the real 'vdpinfo' won't build
+# for their nVidia driver version.
+
+pkgname=vdpauinfo-legacy
+pkgver=1
+pkgrel=5
+pkgdesc="tells the user they can't handle vdpau"
+license=('GPLv2')
+arch=('i686' 'x86_64')
+#depends=('')
+# Just let the dependency on the right nvidia and nvidia-utils versions
+# handle conflicts via those packages conflicts.
+conflicts=(vdpauinfo)
+provides=('vpinfo' 'vdpauinfo')
+source=(vdpauinfo)
+md5sums=()
+
+build() {
+    LH_ROOT=/usr/LH
+    mkdir -p $startdir/pkg/$LH_ROOT/bin/
+
+    cd $startdir
+    install -m0755 -D vdpauinfo $startdir/pkg/$LH_ROOT/bin/
+}
+md5sums=('502f0a21bd1232e5a6bccb17cd63116d')
diff --git a/abs/core/vdpauinfo-legacy/vdpauinfo b/abs/core/vdpauinfo-legacy/vdpauinfo
new file mode 100755
index 0000000..9b237dc
--- /dev/null
+++ b/abs/core/vdpauinfo-legacy/vdpauinfo
@@ -0,0 +1,2 @@
+#!/bin/bash
+echo "vdpau is unsupported"
diff --git a/abs/core/vdpauinfo/PKGBUILD b/abs/core/vdpauinfo/PKGBUILD
new file mode 100644
index 0000000..35e8419
--- /dev/null
+++ b/abs/core/vdpauinfo/PKGBUILD
@@ -0,0 +1,24 @@
+# Contributor: Nathan Harris
+pkgname=vdpauinfo
+pkgver=0.0.6
+pkgrel=5
+pkgdesc="NVIDIA VDPAU capability query utility"
+arch=('i686' 'x86_64')
+url="url=http://cgit.freedesktop.org/~aplattner/vdpauinfo"
+license=('custom')
+depends=('libvdpau' 'xorg-server')
+makedepends=('gcc' 'autoconf' 'make')
+optdepends=(nvidia-utils)
+install=()
+source=(http://cgit.freedesktop.org/~aplattner/${pkgname}/snapshot/${pkgname}-${pkgver}.tar.gz)
+#md5sums=('d5aff9786b44ac5c70b5dd6faea37a67')
+
+build() {
+  cd "${srcdir}/${pkgname}-${pkgver}"
+  autoreconf -i || return 1
+  ./configure --prefix=/usr || return 1
+  make || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+  install -D -m644 $srcdir/$pkgname-$pkgver/LICENSE $pkgdir/usr/share/licenses/$pkgname/license || return 1
+}
+md5sums=('9f9d387ab981b7a7e4460c70e7bab402')
diff --git a/abs/core/vdpauinfo/__changelog b/abs/core/vdpauinfo/__changelog
new file mode 100644
index 0000000..3acad6e
--- /dev/null
+++ b/abs/core/vdpauinfo/__changelog
@@ -0,0 +1,2 @@
+made nvidia-utils an optional dep.  Otherwise this program could drag in the nividia drivers when we don't want them.
+
diff --git a/abs/core/xdotool/PKGBUILD b/abs/core/xdotool/PKGBUILD
index 0fd5db1..bec09f9 100644
--- a/abs/core/xdotool/PKGBUILD
+++ b/abs/core/xdotool/PKGBUILD
@@ -1,5 +1,9 @@
+# $Id: PKGBUILD 7103 2010-01-01 04:09:10Z foutrelis $
+# Maintainer: Evangelos Foutras <foutrelis@gmail.com>
+# Contributor: Rttommy <rttommy@gmail.com>
+
 pkgname=xdotool
-pkgver=20090126
+pkgver=20091231.03
 pkgrel=1
 pkgdesc="Command-line X11 automation tool"
 arch=('i686' 'x86_64')
@@ -7,14 +11,15 @@ url="http://www.semicomplete.com/projects/xdotool/"
 license=('BSD')
 depends=('libxtst')
 source=(http://semicomplete.googlecode.com/files/$pkgname-$pkgver.tar.gz)
-md5sums=('a520d6a3175c3b55582998cbeef81688')
+md5sums=('6228520608c831f64d13f4129cb4f381')
 
 build() {
   cd "$srcdir/$pkgname-$pkgver"
 
   make || return 1
-  install -dm755 "$pkgdir"/usr/{bin,share/man}
-  make PREFIX="$pkgdir/usr" INSTALLMAN="$pkgdir/usr/share/man" install
+  install -d "$pkgdir"/usr/{bin,lib,include,share/man}
+  make PREFIX="$pkgdir/usr" INSTALLMAN="$pkgdir/usr/share/man" \
+       install || return 1
 
   # License
   install -D -m644 COPYRIGHT "$pkgdir/usr/share/licenses/xdotool/COPYRIGHT"
diff --git a/abs/core/xosd/PKGBUILD b/abs/core/xosd/PKGBUILD
index e4a87ba..45130c8 100644
--- a/abs/core/xosd/PKGBUILD
+++ b/abs/core/xosd/PKGBUILD
@@ -4,7 +4,7 @@
 
 pkgname=xosd
 pkgver=2.2.14
-pkgrel=1
+pkgrel=2
 pkgdesc="XOSD displays text on your screen. On-Screen-Display-libs for some tools."
 arch=("i686" "x86_64")
 license=('GPL2')
@@ -12,15 +12,18 @@ url="http://www.ignavus.net/software.html"
 depends=('libxt' 'libxinerama' 'gdk-pixbuf')
 makedepends=('xmms' 'bmp')
 options=(!libtool)
+backup=(etc/osd_cat.cfg)
 #source=("http://www.ignavus.net/xosd-$pkgver.tar.bz2")
-source=("http://ftp.de.debian.org/debian/pool/main/x/xosd/xosd_$pkgver.orig.tar.gz")
+source=("http://ftp.de.debian.org/debian/pool/main/x/xosd/xosd_$pkgver.orig.tar.gz" "osd_cat.cfg")
 
 build() {
   cd $startdir/src/xosd-$pkgver
   ./configure --prefix=/usr
   make || return 1
   make DESTDIR=$startdir/pkg/ install
+  mkdir -p $startdir/pkg/etc
+  cp -f  $startdir/src/osd_cat.cfg $startdir/pkg/etc/osd_cat.cfg
 }
 
-
-md5sums=('4b349fe930e4eee2f504d6c02673e24d')
+md5sums=('4b349fe930e4eee2f504d6c02673e24d'
+         '6ddbc7a78354f002ec0859a999d8fb86')
diff --git a/abs/core/xosd/__changelog b/abs/core/xosd/__changelog
new file mode 100644
index 0000000..33e7879
--- /dev/null
+++ b/abs/core/xosd/__changelog
@@ -0,0 +1,7 @@
+Added:
+backup=(etc/osd_cat.cfg)
+osd_cat.cfg to source
+build() {
+  mkdir -p $startdir/pkg/etc
+  cp -f  $startdir/src/osd_cat.cfg $startdir/pkg/etc/osd_cat.cfg
+}
diff --git a/abs/core/xosd/osd_cat.cfg b/abs/core/xosd/osd_cat.cfg
new file mode 100644
index 0000000..4852508
--- /dev/null
+++ b/abs/core/xosd/osd_cat.cfg
@@ -0,0 +1,6 @@
+color=white  #color of text
+outline=2  #Offset of outline, 0 is no outline
+outlinecolour=black
+shadow=0  #Offset of shadow, 0 is no shadow
+shadowcolour=black
+font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
diff --git a/abs/core/xz-utils/PKGBUILD b/abs/core/xz-utils/PKGBUILD
new file mode 100644
index 0000000..540187e
--- /dev/null
+++ b/abs/core/xz-utils/PKGBUILD
@@ -0,0 +1,30 @@
+# Maintainer: Pierre Schmitz <pierre@archlinux.de>
+# Contributor: François Charette <firmicus@gmx.net>
+
+pkgname=xz-utils
+pkgver=4.999.9beta
+pkgrel=2
+pkgdesc='utils for managing LZMA and XZ compressed files'
+arch=('i686' 'x86_64')
+url='http://tukaani.org/xz/'
+license=('GPL' 'LGPL')
+depends=('bash')
+provides=('lzma' 'lzma-utils')
+replaces=('lzma' 'lzma-utils')
+conflicts=('lzma' 'lzma-utils')
+options=('!libtool')
+source=("http://tukaani.org/xz/xz-${pkgver}.tar.gz")
+md5sums=('f2073579b6da2fe35d453adee1aaf1b2')
+
+build() {
+	cd $srcdir/xz-$pkgver
+
+	./configure --prefix=/usr \
+		--enable-static \
+		--enable-dynamic \
+		--disable-rpath
+	sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+	sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+	make
+	make DESTDIR=$pkgdir install
+}
-- 
cgit v0.12


From 1f175a7b07b9553ce98d0546ac04dbb925ec0bc9 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Mon, 30 Aug 2010 22:26:00 +0000
Subject: RESYNC EXTRA: synced extra-testing -> extra repo

Signed-off-by: James Meyer <james.meyer@operamail.com>
---
 abs/extra/alpine/2.00-lpam.patch                   |   13 +
 abs/extra/alpine/CVE-2008-5514.patch               |   20 +
 abs/extra/alpine/ChangeLog                         |   43 +
 abs/extra/alpine/PKGBUILD                          |   37 +
 abs/extra/apcupsd/PKGBUILD                         |   12 +-
 abs/extra/apcupsd/run                              |    3 +-
 abs/extra/asciidoc/ChangeLog                       |   10 +
 abs/extra/asciidoc/PKGBUILD                        |   30 +
 abs/extra/autofs/Changelog                         |    4 +
 abs/extra/autofs/PKGBUILD                          |   55 +-
 abs/extra/autofs/autofs.install                    |    6 +-
 abs/extra/autofs/finish                            |    8 +-
 abs/extra/autofs/heimdal.patch                     |   24 +-
 abs/extra/autofs/log.run                           |    2 +
 abs/extra/autofs/run                               |   16 +-
 abs/extra/bash-completion/PKGBUILD                 |   34 +
 abs/extra/bash-completion/cowsay.bashcomp          |   34 +
 abs/extra/bluez/PKGBUILD                           |   24 +-
 abs/extra/bluez/__Changelog                        |   11 +
 abs/extra/bluez/bluez.install                      |   15 +
 abs/extra/bluez/run.bluetoothd                     |   12 +
 abs/extra/bluez/run.dund                           |   14 +
 abs/extra/bluez/run.hidd                           |   14 +
 abs/extra/bluez/run.pand                           |   14 +
 abs/extra/bluez/run.rfcomm                         |   17 +
 abs/extra/ccache/PKGBUILD                          |   35 +
 abs/extra/community/amule/PKGBUILD                 |   37 +
 abs/extra/community/blockcontrol/PKGBUILD          |   37 +
 .../community/blockcontrol/blockcontrol.lib.patch  |   15 +
 abs/extra/community/cwiid-git/PKGBUILD             |   62 +
 abs/extra/community/cwiid-git/cwiid.install        |   16 +
 abs/extra/community/deluge/PKGBUILD                |    6 +-
 abs/extra/community/firefox/PKGBUILD               |    5 +-
 .../community/flashplugin-prerelease/PKGBUILD      |   28 +
 abs/extra/community/flashplugin/PKGBUILD           |   41 +-
 abs/extra/community/foldingathome/PKGBUILD         |    8 +-
 abs/extra/community/foldingathome/run              |    2 +-
 abs/extra/community/fuzemux/PKGBUILD               |   42 +
 abs/extra/community/fuzemux/fuzemux-svn.install    |    5 +
 abs/extra/community/mediatomb/PKGBUILD             |   57 +
 .../mediatomb/mediatomb-0.11.0+glibc-2.10.patch    |   23 +
 .../community/mediatomb/mediatomb-gcc-4.3.patch    |   24 +
 abs/extra/community/mediatomb/mediatomb.conf       |    5 +
 abs/extra/community/mediatomb/mediatomb.rc         |   58 +
 abs/extra/community/mobloquer/PKGBUILD             |   24 +-
 abs/extra/community/mre/PKGBUILD                   |   41 +
 abs/extra/community/mre/livescores.tgz             |  Bin 0 -> 39586 bytes
 abs/extra/community/mre/mre-1.1.2.tar.gz           |  Bin 0 -> 19685 bytes
 abs/extra/community/mre/mre.install                |   20 +
 abs/extra/community/mre/mre.lr                     |    9 +
 abs/extra/community/mre/patch.diff                 |  273 ++++
 abs/extra/community/mre/run                        |   10 +
 abs/extra/community/mythpywii/CONTROLS             |   25 +
 abs/extra/community/mythpywii/PKGBUILD             |   22 +-
 abs/extra/community/mythpywii/mythpywii.install    |   59 +
 abs/extra/community/mythpywii/wiimote.rules        |    6 +
 abs/extra/community/network-ups-tools/PKGBUILD     |   53 +
 abs/extra/community/network-ups-tools/finish.upsd  |   16 +
 abs/extra/community/network-ups-tools/nut.install  |   21 +
 abs/extra/community/network-ups-tools/run.upsd     |   21 +
 abs/extra/community/peardb/PKGBUILD                |   22 +
 abs/extra/community/pearlog/PKGBUILD               |   25 +
 abs/extra/community/powernowd/PKGBUILD             |   28 +
 abs/extra/community/powernowd/finish               |   25 +
 abs/extra/community/powernowd/powernowd.conf.d     |    6 +
 abs/extra/community/powernowd/powernowd.install    |   19 +
 abs/extra/community/powernowd/run                  |   25 +
 abs/extra/community/squeezeboxserver/PKGBUILD      |   34 +
 .../squeezeboxserver/squeezeboxserver.conf.d       |    7 +
 .../squeezeboxserver/squeezeboxserver.install      |   56 +
 .../community/squeezeboxserver/squeezeboxserver.rc |   47 +
 abs/extra/community/transmission-cli/PKGBUILD      |   24 +-
 .../community/transmission-cli/run.transmissiond   |   29 +
 .../transmission-cli/transmission-cli.install      |   25 +-
 .../transmission-cli/transmission.include          |   15 +
 .../community/transmission-cli/transmissiond.conf  |    3 +-
 abs/extra/conky/PKGBUILD                           |    6 +-
 abs/extra/cpufreqd/PKGBUILD                        |   30 +
 abs/extra/cpufreqd/cpufreqd                        |   35 +
 abs/extra/cpufreqd/cpufreqd.install                |   26 +
 abs/extra/cpufrequtils/PKGBUILD                    |   32 +
 abs/extra/cpufrequtils/cpufreq.confd               |   14 +
 abs/extra/cpufrequtils/cpufreq.rcd                 |   60 +
 abs/extra/crypto++/PKGBUILD                        |   27 +
 abs/extra/ddclient/PKGBUILD                        |   30 +-
 abs/extra/ddclient/ddclient-foreground.patch       |   47 +
 .../ddclient/ddclient.conf.dynamic.dyndns.sample   |  162 ++
 abs/extra/deb2targz/PKGBUILD                       |   20 +
 abs/extra/dnsmasq/PKGBUILD                         |   41 +
 abs/extra/dnsmasq/rc.dnsmasq                       |   36 +
 abs/extra/doxygen/PKGBUILD                         |   14 +-
 abs/extra/doxygen/PKGBUILD.orig                    |   24 +
 abs/extra/dpgconv/PKGBUILD                         |   22 +
 abs/extra/dpgconv/dpgconv-panscan.patch            |   83 +
 abs/extra/enchant/PKGBUILD                         |    4 +-
 abs/extra/evrouter/PKGBUILD                        |   13 +-
 abs/extra/evtest/PKGBUILD                          |   24 +
 abs/extra/evtest/evtest.diff                       |   32 +
 abs/extra/fakeroot/PKGBUILD                        |    8 +-
 abs/extra/fftw/PKGBUILD                            |    3 +-
 abs/extra/fuppes-svn/PKGBUILD                      |   14 +-
 abs/extra/gdl/PKGBUILD                             |    6 +-
 abs/extra/geoip/PKGBUILD                           |   25 +
 abs/extra/glew/PKGBUILD                            |    8 +-
 abs/extra/gnu-netcat/PKGBUILD                      |   23 +
 abs/extra/gnu-netcat/gnu-netcat.install            |   13 +
 abs/extra/gnupg/PKGBUILD                           |   25 +
 abs/extra/gnupg/gnupg.install                      |   21 +
 abs/extra/gnuplot/PKGBUILD                         |    4 +-
 abs/extra/gpgme/PKGBUILD                           |   25 +
 abs/extra/gpgme/__changelog                        |    1 +
 abs/extra/gpgme/gpgme.install                      |   18 +
 abs/extra/gtk-doc/PKGBUILD                         |    4 +-
 abs/extra/help2man/PKGBUILD                        |   28 +
 .../help2man/help2man-1.37.1-respect-LDFLAGS.patch |   11 +
 abs/extra/hicolor-icon-theme/PKGBUILD              |    4 +-
 abs/extra/htop/PKGBUILD                            |   14 +-
 abs/extra/huludesktop/PKGBUILD                     |   21 +
 abs/extra/huludesktop/huludesktop                  |   25 +
 abs/extra/huludesktop/huludesktop.install          |   26 +
 abs/extra/hunspell/PKGBUILD                        |    4 +-
 abs/extra/hunspell/__changelog                     |    1 +
 abs/extra/icon-naming-utils/PKGBUILD               |    4 +-
 abs/extra/imdbpy/PKGBUILD                          |   28 +
 abs/extra/irqbalance/PKGBUILD                      |   25 +-
 abs/extra/irqbalance/finish                        |   15 +
 abs/extra/irqbalance/irqbalance.install            |   10 +
 abs/extra/irqbalance/run                           |   25 +
 abs/extra/iso-codes/PKGBUILD                       |    4 +-
 abs/extra/iw/PKGBUILD                              |    4 +-
 abs/extra/lcdproc/PKGBUILD                         |   17 +-
 abs/extra/lcdproc/__changelog                      |    5 +-
 abs/extra/lcdproc/lcdproc.install                  |    7 +
 abs/extra/libbonobo/PKGBUILD                       |    6 +-
 abs/extra/libbonoboui/PKGBUILD                     |    4 +-
 abs/extra/libcdio/PKGBUILD                         |    6 +-
 abs/extra/libebml/PKGBUILD                         |    6 +-
 abs/extra/libftdi/PKGBUILD                         |    6 +-
 abs/extra/libmatroska/PKGBUILD                     |   20 +
 abs/extra/libmms/PKGBUILD                          |    4 +-
 abs/extra/lm_sensors/ChangeLog                     |   50 +
 abs/extra/lm_sensors/PKGBUILD                      |   65 +-
 abs/extra/lm_sensors/fancontrol.rc                 |    5 +-
 abs/extra/lm_sensors/healthd                       |   46 +
 abs/extra/lm_sensors/healthd.conf                  |   16 +
 abs/extra/lm_sensors/healthd.rc                    |   52 +
 abs/extra/lm_sensors/sensord.conf                  |    4 +
 abs/extra/lm_sensors/sensord.rc                    |   37 +
 abs/extra/lm_sensors/sensors-detect.patch          |  114 +-
 abs/extra/lm_sensors/sensors.rc                    |  106 +-
 abs/extra/mediaserv/PKGBUILD                       |    7 +-
 abs/extra/mediaserv/linhes-mediaserv.tar.bz2       |  Bin 17186 -> 17322 bytes
 abs/extra/mediaserv/mediaserv.install              |   18 +-
 abs/extra/mediaserv/run                            |    2 +-
 abs/extra/mime-types/PKGBUILD                      |   17 +
 abs/extra/mime-types/mime.types                    |  758 +++++++++
 abs/extra/mkvtoolnix/PKGBUILD                      |    6 +-
 abs/extra/monitorix-linhes.tar.gz                  |  Bin 0 -> 1970 bytes
 abs/extra/monitorix/PKGBUILD                       |   58 +
 abs/extra/monitorix/monitorix.install              |   30 +
 abs/extra/monitorix/monitorix.rc.d                 |   54 +
 abs/extra/most/PKGBUILD                            |   20 +
 abs/extra/most/most-debian.patch                   | 1655 ++++++++++++++++++++
 abs/extra/mpeg_stat/PKGBUILD                       |   19 +
 abs/extra/mpgtx/PKGBUILD                           |   16 +
 abs/extra/mupen64plus-svn/PKGBUILD                 |   71 +
 .../mupen64plus-svn/fix-gcc4.4-const-char.patch    |   22 +
 abs/extra/mupen64plus-svn/install.patch            |   13 +
 abs/extra/mutt/PKGBUILD                            |   39 +
 abs/extra/mutt/mutt-unmailbox.patch                |   10 +
 abs/extra/mutt/mutt.install                        |   15 +
 abs/extra/myt2xvid3/PKGBUILD                       |    2 +-
 abs/extra/myth2ipod/PKGBUILD                       |    2 +-
 abs/extra/myth2ipod/myth2ipod                      |    2 +-
 abs/extra/mythappletrailers/PKGBUILD               |    7 +-
 abs/extra/mythappletrailers/appletrailer.xml       |  516 +++---
 abs/extra/mythappletrailers/loading.sh             |   12 +-
 .../mythappletrailers/mythappletrailers.install    |   16 +-
 abs/extra/mythnuv2mkv/PKGBUILD                     |    6 +-
 abs/extra/mythnuv2mkv/mythnuv2mkv.patch            |   36 +
 abs/extra/mythtv-contrib/6200ch.tar.gz             |  Bin 0 -> 5040 bytes
 abs/extra/mythtv-contrib/PKGBUILD                  |  150 ++
 abs/extra/mythtv-contrib/dct-channel_make.patch    |   16 +
 abs/extra/mythtv-contrib/mythchanger.10f.beta.tar  |  Bin 0 -> 30720 bytes
 abs/extra/mythtv-contrib/mythchanger_make.patch    |    8 +
 abs/extra/mythtv-contrib/mythtv-contrib.install    |    7 +
 abs/extra/mythtv-contrib/xbmc_mythlink.tgz         |  Bin 0 -> 7766 bytes
 abs/extra/netkit-bsd-finger/LICENSE                |   36 +
 abs/extra/netkit-bsd-finger/PKGBUILD               |   26 +
 abs/extra/netkit-bsd-finger/finger.xinetd          |    8 +
 abs/extra/numlockx/PKGBUILD                        |   26 +
 abs/extra/nvram-wakup/PKGBUILD                     |   15 +
 abs/extra/p7zip/PKGBUILD                           |   45 +
 abs/extra/postfix/PKGBUILD                         |   52 +
 abs/extra/postfix/__changelog                      |    1 +
 abs/extra/postfix/postfix                          |   58 +
 abs/extra/postfix/postfix.install                  |   38 +
 abs/extra/postfix/postfix.patch.bz2                |  Bin 0 -> 373 bytes
 abs/extra/procmail/PKGBUILD                        |   21 +
 abs/extra/pth/PKGBUILD                             |   22 +
 abs/extra/pyqt/ChangeLog                           |   21 +
 abs/extra/pyqt/PKGBUILD                            |   30 +
 abs/extra/python-geoip/PKGBUILD                    |   20 +
 abs/extra/python-lxml/PKGBUILD                     |   34 +
 abs/extra/python-pybluez/PKGBUILD                  |    5 +-
 abs/extra/python-pyserial/PKGBUILD                 |   20 +
 abs/extra/qscintilla/ChangeLog                     |   13 +
 abs/extra/qscintilla/PKGBUILD                      |   55 +
 abs/extra/recstat/PKGBUILD                         |   19 +
 abs/extra/recstat/recstat                          |   56 +
 abs/extra/recstat/recstat.install                  |   13 +
 abs/extra/recstat/recstat.py                       |   38 +
 abs/extra/recstat/run                              |    7 +
 abs/extra/rrd_stats/PKGBUILD                       |    3 +-
 abs/extra/rrd_stats/rrd_stats.tgz                  |  Bin 7454 -> 8444 bytes
 abs/extra/sdlmame/PKGBUILD                         |   88 +-
 abs/extra/sdlmame/mame-0137-wiimote.diff           |  424 +++++
 abs/extra/sdlmame/sdlmame.install                  |    3 -
 abs/extra/sip/ChangeLog                            |   17 +
 abs/extra/sip/PKGBUILD                             |   29 +
 abs/extra/tablet-encode/PKGBUILD                   |    4 +-
 abs/extra/terminus-font/PKGBUILD                   |   20 +
 abs/extra/terminus-font/install.proto              |   27 +
 abs/extra/terminus-font/terminus-font.install      |   21 +
 abs/extra/tightvnc/PKGBUILD                        |    6 +-
 abs/extra/tightvnc/tightvnc-fontpath-xcolors.patch |   21 +-
 abs/extra/unetbootin/PKGBUILD                      |   28 +
 abs/extra/windowmaker/PKGBUILD                     |    2 +-
 abs/extra/wxgtk/ChangeLog                          |   22 +
 abs/extra/wxgtk/PKGBUILD                           |   35 +-
 abs/extra/wxgtk/gsocket.patch                      |   18 +
 abs/extra/wxgtk/overflow.patch                     |   66 +
 abs/extra/x11vnc/PKGBUILD                          |    9 +-
 abs/extra/xbmc-svn/CHANGELOG                       |  110 ++
 abs/extra/xbmc-svn/Lircmap.xml                     |  233 +++
 abs/extra/xbmc-svn/PKGBUILD                        |   97 ++
 abs/extra/xbmc-svn/__changelog                     |    1 +
 abs/extra/xbmc-svn/xbmc-svn.install                |   13 +
 abs/extra/xbmc/FEH.sh                              |   47 +
 abs/extra/xbmc/Lircmap.xml                         |  233 +++
 abs/extra/xbmc/PKGBUILD                            |  116 ++
 abs/extra/xbmc/__changelog                         |    1 +
 .../use_cdio_system_headers_on_non_win32.patch     |  130 ++
 abs/extra/xbmc/xbmc.install                        |    7 +
 abs/extra/xinetd/PKGBUILD                          |   32 +
 abs/extra/xinetd/servers                           |   10 +
 abs/extra/xinetd/services                          |   10 +
 abs/extra/xinetd/xinetd                            |   38 +
 abs/extra/xinetd/xinetd-2.3.14.tar.gz              |  Bin 0 -> 301703 bytes
 abs/extra/xinetd/xinetd.conf                       |   14 +
 abs/extra/xmlto/PKGBUILD                           |    8 +-
 251 files changed, 9204 insertions(+), 801 deletions(-)
 create mode 100644 abs/extra/alpine/2.00-lpam.patch
 create mode 100644 abs/extra/alpine/CVE-2008-5514.patch
 create mode 100644 abs/extra/alpine/ChangeLog
 create mode 100644 abs/extra/alpine/PKGBUILD
 create mode 100644 abs/extra/asciidoc/ChangeLog
 create mode 100644 abs/extra/asciidoc/PKGBUILD
 mode change 100644 => 100755 abs/extra/autofs/Changelog
 mode change 100644 => 100755 abs/extra/autofs/PKGBUILD
 create mode 100755 abs/extra/autofs/log.run
 create mode 100644 abs/extra/bash-completion/PKGBUILD
 create mode 100644 abs/extra/bash-completion/cowsay.bashcomp
 create mode 100644 abs/extra/bluez/__Changelog
 create mode 100644 abs/extra/bluez/bluez.install
 create mode 100644 abs/extra/bluez/run.bluetoothd
 create mode 100644 abs/extra/bluez/run.dund
 create mode 100644 abs/extra/bluez/run.hidd
 create mode 100644 abs/extra/bluez/run.pand
 create mode 100644 abs/extra/bluez/run.rfcomm
 create mode 100644 abs/extra/ccache/PKGBUILD
 create mode 100644 abs/extra/community/amule/PKGBUILD
 create mode 100644 abs/extra/community/blockcontrol/PKGBUILD
 create mode 100644 abs/extra/community/blockcontrol/blockcontrol.lib.patch
 create mode 100644 abs/extra/community/cwiid-git/PKGBUILD
 create mode 100644 abs/extra/community/cwiid-git/cwiid.install
 create mode 100644 abs/extra/community/flashplugin-prerelease/PKGBUILD
 create mode 100644 abs/extra/community/fuzemux/PKGBUILD
 create mode 100644 abs/extra/community/fuzemux/fuzemux-svn.install
 create mode 100644 abs/extra/community/mediatomb/PKGBUILD
 create mode 100644 abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch
 create mode 100644 abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch
 create mode 100644 abs/extra/community/mediatomb/mediatomb.conf
 create mode 100755 abs/extra/community/mediatomb/mediatomb.rc
 create mode 100644 abs/extra/community/mre/PKGBUILD
 create mode 100644 abs/extra/community/mre/livescores.tgz
 create mode 100644 abs/extra/community/mre/mre-1.1.2.tar.gz
 create mode 100755 abs/extra/community/mre/mre.install
 create mode 100644 abs/extra/community/mre/mre.lr
 create mode 100644 abs/extra/community/mre/patch.diff
 create mode 100755 abs/extra/community/mre/run
 create mode 100644 abs/extra/community/mythpywii/CONTROLS
 create mode 100644 abs/extra/community/mythpywii/mythpywii.install
 create mode 100644 abs/extra/community/mythpywii/wiimote.rules
 create mode 100644 abs/extra/community/network-ups-tools/PKGBUILD
 create mode 100644 abs/extra/community/network-ups-tools/finish.upsd
 create mode 100644 abs/extra/community/network-ups-tools/nut.install
 create mode 100644 abs/extra/community/network-ups-tools/run.upsd
 create mode 100755 abs/extra/community/peardb/PKGBUILD
 create mode 100755 abs/extra/community/pearlog/PKGBUILD
 create mode 100644 abs/extra/community/powernowd/PKGBUILD
 create mode 100644 abs/extra/community/powernowd/finish
 create mode 100644 abs/extra/community/powernowd/powernowd.conf.d
 create mode 100644 abs/extra/community/powernowd/powernowd.install
 create mode 100644 abs/extra/community/powernowd/run
 create mode 100644 abs/extra/community/squeezeboxserver/PKGBUILD
 create mode 100644 abs/extra/community/squeezeboxserver/squeezeboxserver.conf.d
 create mode 100644 abs/extra/community/squeezeboxserver/squeezeboxserver.install
 create mode 100644 abs/extra/community/squeezeboxserver/squeezeboxserver.rc
 create mode 100755 abs/extra/community/transmission-cli/run.transmissiond
 create mode 100644 abs/extra/community/transmission-cli/transmission.include
 create mode 100644 abs/extra/cpufreqd/PKGBUILD
 create mode 100644 abs/extra/cpufreqd/cpufreqd
 create mode 100644 abs/extra/cpufreqd/cpufreqd.install
 create mode 100644 abs/extra/cpufrequtils/PKGBUILD
 create mode 100644 abs/extra/cpufrequtils/cpufreq.confd
 create mode 100644 abs/extra/cpufrequtils/cpufreq.rcd
 create mode 100644 abs/extra/crypto++/PKGBUILD
 create mode 100644 abs/extra/ddclient/ddclient-foreground.patch
 create mode 100644 abs/extra/ddclient/ddclient.conf.dynamic.dyndns.sample
 create mode 100644 abs/extra/deb2targz/PKGBUILD
 create mode 100644 abs/extra/dnsmasq/PKGBUILD
 create mode 100755 abs/extra/dnsmasq/rc.dnsmasq
 create mode 100644 abs/extra/doxygen/PKGBUILD.orig
 create mode 100644 abs/extra/dpgconv/PKGBUILD
 create mode 100644 abs/extra/dpgconv/dpgconv-panscan.patch
 create mode 100644 abs/extra/evtest/PKGBUILD
 create mode 100644 abs/extra/evtest/evtest.diff
 create mode 100644 abs/extra/geoip/PKGBUILD
 create mode 100644 abs/extra/gnu-netcat/PKGBUILD
 create mode 100644 abs/extra/gnu-netcat/gnu-netcat.install
 create mode 100644 abs/extra/gnupg/PKGBUILD
 create mode 100644 abs/extra/gnupg/gnupg.install
 create mode 100644 abs/extra/gpgme/PKGBUILD
 create mode 100644 abs/extra/gpgme/__changelog
 create mode 100644 abs/extra/gpgme/gpgme.install
 create mode 100644 abs/extra/help2man/PKGBUILD
 create mode 100644 abs/extra/help2man/help2man-1.37.1-respect-LDFLAGS.patch
 create mode 100644 abs/extra/huludesktop/PKGBUILD
 create mode 100644 abs/extra/huludesktop/huludesktop
 create mode 100644 abs/extra/huludesktop/huludesktop.install
 create mode 100644 abs/extra/hunspell/__changelog
 create mode 100644 abs/extra/imdbpy/PKGBUILD
 create mode 100644 abs/extra/irqbalance/finish
 create mode 100644 abs/extra/irqbalance/irqbalance.install
 create mode 100644 abs/extra/irqbalance/run
 create mode 100644 abs/extra/lcdproc/lcdproc.install
 create mode 100644 abs/extra/libmatroska/PKGBUILD
 create mode 100644 abs/extra/lm_sensors/ChangeLog
 create mode 100644 abs/extra/lm_sensors/healthd
 create mode 100644 abs/extra/lm_sensors/healthd.conf
 create mode 100644 abs/extra/lm_sensors/healthd.rc
 create mode 100644 abs/extra/lm_sensors/sensord.conf
 create mode 100644 abs/extra/lm_sensors/sensord.rc
 create mode 100644 abs/extra/mime-types/PKGBUILD
 create mode 100644 abs/extra/mime-types/mime.types
 create mode 100644 abs/extra/monitorix-linhes.tar.gz
 create mode 100644 abs/extra/monitorix/PKGBUILD
 create mode 100644 abs/extra/monitorix/monitorix.install
 create mode 100644 abs/extra/monitorix/monitorix.rc.d
 create mode 100644 abs/extra/most/PKGBUILD
 create mode 100644 abs/extra/most/most-debian.patch
 create mode 100644 abs/extra/mpeg_stat/PKGBUILD
 create mode 100644 abs/extra/mpgtx/PKGBUILD
 create mode 100644 abs/extra/mupen64plus-svn/PKGBUILD
 create mode 100644 abs/extra/mupen64plus-svn/fix-gcc4.4-const-char.patch
 create mode 100644 abs/extra/mupen64plus-svn/install.patch
 create mode 100644 abs/extra/mutt/PKGBUILD
 create mode 100644 abs/extra/mutt/mutt-unmailbox.patch
 create mode 100644 abs/extra/mutt/mutt.install
 create mode 100644 abs/extra/mythnuv2mkv/mythnuv2mkv.patch
 create mode 100644 abs/extra/mythtv-contrib/6200ch.tar.gz
 create mode 100644 abs/extra/mythtv-contrib/PKGBUILD
 create mode 100644 abs/extra/mythtv-contrib/dct-channel_make.patch
 create mode 100644 abs/extra/mythtv-contrib/mythchanger.10f.beta.tar
 create mode 100644 abs/extra/mythtv-contrib/mythchanger_make.patch
 create mode 100644 abs/extra/mythtv-contrib/mythtv-contrib.install
 create mode 100644 abs/extra/mythtv-contrib/xbmc_mythlink.tgz
 create mode 100644 abs/extra/netkit-bsd-finger/LICENSE
 create mode 100644 abs/extra/netkit-bsd-finger/PKGBUILD
 create mode 100644 abs/extra/netkit-bsd-finger/finger.xinetd
 create mode 100644 abs/extra/numlockx/PKGBUILD
 create mode 100755 abs/extra/nvram-wakup/PKGBUILD
 create mode 100644 abs/extra/p7zip/PKGBUILD
 create mode 100644 abs/extra/postfix/PKGBUILD
 create mode 100644 abs/extra/postfix/__changelog
 create mode 100755 abs/extra/postfix/postfix
 create mode 100644 abs/extra/postfix/postfix.install
 create mode 100644 abs/extra/postfix/postfix.patch.bz2
 create mode 100644 abs/extra/procmail/PKGBUILD
 create mode 100644 abs/extra/pth/PKGBUILD
 create mode 100644 abs/extra/pyqt/ChangeLog
 create mode 100644 abs/extra/pyqt/PKGBUILD
 create mode 100644 abs/extra/python-geoip/PKGBUILD
 create mode 100644 abs/extra/python-lxml/PKGBUILD
 create mode 100644 abs/extra/python-pyserial/PKGBUILD
 create mode 100644 abs/extra/qscintilla/ChangeLog
 create mode 100644 abs/extra/qscintilla/PKGBUILD
 create mode 100644 abs/extra/recstat/PKGBUILD
 create mode 100644 abs/extra/recstat/recstat
 create mode 100644 abs/extra/recstat/recstat.install
 create mode 100644 abs/extra/recstat/recstat.py
 create mode 100755 abs/extra/recstat/run
 create mode 100644 abs/extra/sdlmame/mame-0137-wiimote.diff
 create mode 100644 abs/extra/sip/ChangeLog
 create mode 100644 abs/extra/sip/PKGBUILD
 create mode 100644 abs/extra/terminus-font/PKGBUILD
 create mode 100644 abs/extra/terminus-font/install.proto
 create mode 100644 abs/extra/terminus-font/terminus-font.install
 create mode 100644 abs/extra/unetbootin/PKGBUILD
 create mode 100644 abs/extra/wxgtk/gsocket.patch
 create mode 100644 abs/extra/wxgtk/overflow.patch
 create mode 100644 abs/extra/xbmc-svn/CHANGELOG
 create mode 100644 abs/extra/xbmc-svn/Lircmap.xml
 create mode 100644 abs/extra/xbmc-svn/PKGBUILD
 create mode 100644 abs/extra/xbmc-svn/__changelog
 create mode 100644 abs/extra/xbmc-svn/xbmc-svn.install
 create mode 100644 abs/extra/xbmc/FEH.sh
 create mode 100644 abs/extra/xbmc/Lircmap.xml
 create mode 100644 abs/extra/xbmc/PKGBUILD
 create mode 100644 abs/extra/xbmc/__changelog
 create mode 100644 abs/extra/xbmc/use_cdio_system_headers_on_non_win32.patch
 create mode 100644 abs/extra/xbmc/xbmc.install
 create mode 100644 abs/extra/xinetd/PKGBUILD
 create mode 100644 abs/extra/xinetd/servers
 create mode 100644 abs/extra/xinetd/services
 create mode 100755 abs/extra/xinetd/xinetd
 create mode 100644 abs/extra/xinetd/xinetd-2.3.14.tar.gz
 create mode 100644 abs/extra/xinetd/xinetd.conf

diff --git a/abs/extra/alpine/2.00-lpam.patch b/abs/extra/alpine/2.00-lpam.patch
new file mode 100644
index 0000000..69e66d7
--- /dev/null
+++ b/abs/extra/alpine/2.00-lpam.patch
@@ -0,0 +1,13 @@
+--- alpine-2.00.orig/alpine/Makefile.in
++++ alpine-2.00/alpine/Makefile.in
+@@ -169,7 +169,7 @@
+ LIBICONV = @LIBICONV@
+ LIBINTL = @LIBINTL@
+ LIBOBJS = @LIBOBJS@
+-LIBS = @LIBS@
++LIBS = @LIBS@ -lpam
+ LIBTOOL = @LIBTOOL@
+ LN = @LN@
+ LN_S = @LN_S@
+ LTLIBICONV = @LTLIBICONV@
+ LTLIBINTL = @LTLIBINTL@
diff --git a/abs/extra/alpine/CVE-2008-5514.patch b/abs/extra/alpine/CVE-2008-5514.patch
new file mode 100644
index 0000000..594bea0
--- /dev/null
+++ b/abs/extra/alpine/CVE-2008-5514.patch
@@ -0,0 +1,20 @@
+--- alpine-2.00/imap/src/c-client/rfc822.c
++++ alpine-2.00/imap/src/c-client/rfc822.c
+@@ -1351,6 +1351,7 @@
+ 
+ static long rfc822_output_char (RFC822BUFFER *buf,int c)
+ {
++  if ((buf->cur == buf->end) && !rfc822_output_flush (buf)) return NIL;
+   *buf->cur++ = c;		/* add character, soutr buffer if full */
+   return (buf->cur == buf->end) ? rfc822_output_flush (buf) : LONGT;
+ }
+@@ -1374,7 +1375,8 @@
+       len -= i;
+     }
+ 				/* soutr buffer now if full */
+-    if (len && !rfc822_output_flush (buf)) return NIL;
++    if ((len || (buf->cur == buf->end)) && !rfc822_output_flush (buf))
++      return NIL;
+   }
+   return LONGT;
+ }
diff --git a/abs/extra/alpine/ChangeLog b/abs/extra/alpine/ChangeLog
new file mode 100644
index 0000000..4c3bf81
--- /dev/null
+++ b/abs/extra/alpine/ChangeLog
@@ -0,0 +1,43 @@
+2010-01-23  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 2.00-7
+	* Updated patchset to level 53
+
+2009-09-18  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 2.00-6
+	* libldap-2.4 rebuild
+
+2009-09-18  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 2.00-5
+	* Updated patchset to level 52
+	* Security fix
+
+2009-09-17  Allan McRae  <allan@archlinux.org>
+
+	* alpine 2.00-4
+	* libldap-2.4 rebuild
+
+2009-02-07  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 2.00-3
+	* Updated patchset to level 20
+
+2008-12-05  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 2.00-2
+	* Rebuilt against heimdal 1.2.1
+	* Placed copy of all.patch.gz patch on local ftp (close FS#11964)
+
+2008-09-04  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 2.00-1
+	* Upstream update
+	* Replaced install scriptlet with optdepends
+
+2008-03-26  Eric Belanger  <eric@archlinux.org>
+
+	* alpine 1.10-1
+	* Upstream update
+	* Added ChangeLog
diff --git a/abs/extra/alpine/PKGBUILD b/abs/extra/alpine/PKGBUILD
new file mode 100644
index 0000000..1d75c85
--- /dev/null
+++ b/abs/extra/alpine/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 64978 2010-01-23 22:24:15Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
+# Contributor: Fabio Scotoni <fabio@esse.ch>
+
+pkgname=alpine
+pkgver=2.00
+pkgrel=7
+_patchlevel=53
+pkgdesc="The Apache-licensed PINE (a tool for reading, sending, and managing electronic messages)"
+arch=('i686' 'x86_64')
+url="http://www.washington.edu/alpine/"
+license=('APACHE')
+depends=('libldap>=2.4.11' 'heimdal>=1.2.1' 'gettext')
+optdepends=('aspell: for spell-checking support')
+provides=('pine')
+conflicts=('pine')
+replaces=('pine')
+options=('!makeflags')
+source=(ftp://ftp.cac.washington.edu/${pkgname}/${pkgname}.tar.bz2 \
+        http://staff.washington.edu/chappa/alpine/patches/alpine-${pkgver}/all_${_patchlevel}.patch.gz \
+        2.00-lpam.patch CVE-2008-5514.patch)
+md5sums=('84e44cbf71ed674800a5d57eed9c1c52' 'c4a85b865f59c095f838617d08b1b123'\
+         'cd3911c16fc6a072e853c0ccfc35857c' '1b52a54a656979116c09fb1d948a4325')
+sha1sums=('dcbd3c5419954f484ccf706feaba31ce48cdebc4' '7396ed92062924c126087dc32b98ccebf98e17cc'\
+         '1b39525f91ebd5a9de5a1e04f5554f6fa5f58ae3' 'bc61d76a237ff42b00b3f60f2e6fc5c45e261dbb')
+
+build() {
+  cd "${srcdir}/${pkgname}-${pkgver}"
+  patch -p1 < ../all_${_patchlevel}.patch || return 1
+  patch -p1 < ../2.00-lpam.patch || return 1
+  patch -p1 < ../CVE-2008-5514.patch || return 1
+  ./configure --prefix=/usr --without-passfile --without-tcl \
+    --disable-shared --with-system-pinerc=/etc/alpine.d/pine.conf \
+    --with-system-fixed-pinerc=/etc/alpine.d/pine.conf.fixed || return 1
+  make || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+}
diff --git a/abs/extra/apcupsd/PKGBUILD b/abs/extra/apcupsd/PKGBUILD
index 9f66f5d..ad57d1a 100644
--- a/abs/extra/apcupsd/PKGBUILD
+++ b/abs/extra/apcupsd/PKGBUILD
@@ -3,8 +3,8 @@
 # Maintainer: Todd Musall <tmusall@comcast.net>
 
 pkgname=apcupsd
-pkgver=3.14.5
-pkgrel=2
+pkgver=3.14.8
+pkgrel=1
 pkgdesc="Apcupsd can be used for power mangement and controlling most of APC's UPS models on Unix and Windows machines."
 arch=(i686 x86_64)
 url="http://www.apcupsd.org"
@@ -17,10 +17,6 @@ source=(http://switch.dl.sf.net/sourceforge/apcupsd/$pkgname-$pkgver.tar.gz \
 	apcupsd
 	apcupsd.conf
 	run)
-md5sums=('4ac73ec91d8ab56f3fac894e172567c4'
-         '5eae3c4d921eeb81798a0250fe3dd111'
-	 '2f533aec32c9445510bb2127b453b175'
-	 'd4b8c755ecd30f57810f71a6d6435dd3')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -36,3 +32,7 @@ build() {
   mkdir -p  $startdir/pkg/etc/sv/apcupsd/supervise
   install -D -m755 ../run $startdir/pkg/etc/sv/apcupsd
 }
+md5sums=('cd17f0a903dc2220e55ed54e242359d2'
+         '5eae3c4d921eeb81798a0250fe3dd111'
+         '2f533aec32c9445510bb2127b453b175'
+         '32ae73bc096c1d0982c12d8ec46abee2')
diff --git a/abs/extra/apcupsd/run b/abs/extra/apcupsd/run
index a9dfa3d..bc5c22b 100644
--- a/abs/extra/apcupsd/run
+++ b/abs/extra/apcupsd/run
@@ -1,3 +1,4 @@
 #!/bin/sh
 exec 2>&1
-exec /sbin/apcupsd -b -f /etc/apcupsd/apcupsd.conf >/dev/null 2>/dev/null
+   stat_runit "Starting APC UPS Daemon"
+      exec /sbin/apcupsd -b -f /etc/apcupsd/apcupsd.conf
diff --git a/abs/extra/asciidoc/ChangeLog b/abs/extra/asciidoc/ChangeLog
new file mode 100644
index 0000000..e9e5156
--- /dev/null
+++ b/abs/extra/asciidoc/ChangeLog
@@ -0,0 +1,10 @@
+
+2009-11-07  Chris Brannon <cmbrannon79@gmail.com>
+
+	* Fixed optdepends, converted to arch=('any').
+
+
+2008-07-06  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for x86_64 - 8.2.7
+
diff --git a/abs/extra/asciidoc/PKGBUILD b/abs/extra/asciidoc/PKGBUILD
new file mode 100644
index 0000000..2a73a22
--- /dev/null
+++ b/abs/extra/asciidoc/PKGBUILD
@@ -0,0 +1,30 @@
+# Maintainer: Daniel J Griffiths <ghost1227@archlinux.us>
+# Contributor: Chris Brannon <cmbrannon79@gmail.com>
+# Contributor: Geoffroy Carrier <geoffroy@archlinux.org>
+# Contributor: Dan McGee <dan@archlinux.org>
+# Contributor: Jaroslaw Rosiek <philosoph@interia.pl>
+# Contributor: Darwin Bautista <djclue917@gmail.com>
+
+pkgname=asciidoc
+pkgver=8.5.3
+pkgrel=2
+pkgdesc="Text document format for short documents, articles, books and UNIX man pages"
+arch=('any')
+url="http://www.methods.co.nz/asciidoc/"
+license=('GPL')
+depends=('python' 'libxslt' 'docbook-xsl')
+optdepends=('lilypond: music-filter'
+	    'imagemagick: music-filter (used in conjunction with lilypond)'
+	    'source-highlight: source-highlight-filter'
+	    'fop: pdf generation'
+	    'lynx: text generation'
+	    'w3m: text generation (alternative to lynx)')
+source=(http://downloads.sourceforge.net/asciidoc/asciidoc-${pkgver}.tar.gz)
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+  ./configure --prefix=/usr --sysconfdir=/etc || return 1
+  make install DESTDIR="${pkgdir}" || return 1
+  install -Dm644 asciidocapi.py ${pkgdir}/usr/lib/python2.6/site-packages/asciidocapi.py
+}
+md5sums=('7377872275c2a575151655b19ac6dd3e')
diff --git a/abs/extra/autofs/Changelog b/abs/extra/autofs/Changelog
old mode 100644
new mode 100755
index f25555e..d8df4dc
--- a/abs/extra/autofs/Changelog
+++ b/abs/extra/autofs/Changelog
@@ -1,2 +1,6 @@
 5.0.4-5 4/29/09
 Cecil - Added run and finish files for runit.
+6/28/10
+Britney - Updated run to manage automount; removed finish and /etc/rc.d/autofs; added logger
+5.0.5-1 6/12/10
+Britney - Updated to 5.0.5 based on arch autofs 5.0.5 PKGBUILD and heimdal.patch with runit support added.
diff --git a/abs/extra/autofs/PKGBUILD b/abs/extra/autofs/PKGBUILD
old mode 100644
new mode 100755
index 7524ae4..ac317d2
--- a/abs/extra/autofs/PKGBUILD
+++ b/abs/extra/autofs/PKGBUILD
@@ -1,29 +1,21 @@
-# $Id: PKGBUILD 36638 2009-04-26 19:00:46Z andrea $
+# $Id: PKGBUILD 75323 2010-04-01 10:16:24Z allan $
 # Maintainer: Andrea Scarpino <andrea@archlinux.org>
 # Contributor: Dale Blount <dale@archlinux.org>
 # Contributor: Manolis Tzanidakis
 
 pkgname=autofs
-pkgver=5.0.4
-pkgrel=5
-pkgdesc="A kernel-based automounter for Linux."
+pkgver=5.0.5
+pkgrel=1
+pkgdesc="A kernel-based automounter for Linux"
 arch=('i686' 'x86_64')
 url="http://wiki.autofs.net/FrontPage"
 license=('GPL2')
 depends=('libldap' 'libxml2' 'heimdal')
 backup=(etc/autofs/auto.master etc/autofs/auto.misc etc/conf.d/autofs)
-install=autofs.install
+install=${pkgname}.install
 source=("http://www.kernel.org/pub/linux/daemons/${pkgname}/v5/${pkgname}-${pkgver}.tar.bz2"
-  'autofs' 'autofs.conf.d' 'auto.master' 'auto.misc'
-  'heimdal.patch' 'run' 'finish')
-md5sums=('2646dde61edd08dd952255558c733c08'
-         'b4984b3161f50cba3d189b0ec594d014'
-         '47f597c870410055e0fdb66103daf928'
-         'a6cefb591e77b31b79dbb7243646c96b'
-         'd8a15ec9186c5c0b36e5cea1e2739e8a'
-         '1ee4825e26ad72bfe86acec3d3da5d2a'
-	 '74d3b5b6c4421275448084472cfa691a'
-	 '43410e98ecb224cde73ce32be5a6aa14')
+  'autofs.conf.d' 'auto.master' 'auto.misc'
+  'heimdal.patch' 'run' 'log.run' 'finish')
 
 build() {
   export MAKEFLAGS="-j1"
@@ -37,18 +29,29 @@ build() {
     --with-mapdir=/etc/autofs \
     --without-hesiod
   make || return 1
+
+  sed -i "s:/etc:/etc/autofs:g" man/auto.master.5
+}
+
+package(){
+  cd ${srcdir}/${pkgname}-${pkgver}
   make INSTALLROOT=${pkgdir} install
   
-  local conf_file
-  for conf_file in auto.{master,misc}; do
-    install -D -m 644 ${srcdir}/$conf_file ${pkgdir}/etc/autofs/$conf_file
-  done
-
-  sed -i "s:/etc:/etc/autofs:g" ${pkgdir}/usr/share/man/man5/auto.master.5
-  install -D -m 755 ${srcdir}/autofs ${pkgdir}/etc/rc.d/autofs
-  install -D -m 644 ${srcdir}/autofs.conf.d ${pkgdir}/etc/conf.d/autofs
+  install -Dm644 ${srcdir}/auto.master ${pkgdir}/etc/autofs/auto.master || return 1
+  install -Dm644 ${srcdir}/auto.misc ${pkgdir}/etc/autofs/auto.misc || return 1
+  install -Dm644 ${srcdir}/autofs.conf.d ${pkgdir}/etc/conf.d/autofs || return 1
   mkdir -p ${pkgdir}/etc/sv/autofs/supervise
-  install -D -m 744 ${srcdir}/run ${pkgdir}/etc/sv/autofs
-  install -D -m 744 ${srcdir}/finish ${pkgdir}/etc/sv/autofs
+  mkdir -p ${pkgdir}/etc/sv/autofs/log/supervise
+  install -Dm744 ${srcdir}/run ${pkgdir}/etc/sv/autofs || return 1
+  install -Dm744 ${srcdir}/finish ${pkgdir}/etc/sv/autofs || return 1
+  install -Dm744 ${srcdir}/log.run ${pkgdir}/etc/sv/autofs/log/run || return 1
 }
-# vim: ts=2 sw=2 et ft=sh
+
+md5sums=('a1d262cb6ebef0c2dd0fe22232fb3d5a'
+         '47f597c870410055e0fdb66103daf928'
+         'a6cefb591e77b31b79dbb7243646c96b'
+         'd8a15ec9186c5c0b36e5cea1e2739e8a'
+         'efd46b6406b940cb48f7c6197790fb8e'
+         'f2048c24da7fa1421c2e8b0b90fb17f9'
+         '518e277f960a1af837ba6c5cca13c615'
+         '5b30948886b6d71287652d784fccf1fb')
diff --git a/abs/extra/autofs/autofs.install b/abs/extra/autofs/autofs.install
index 61120bb..7806efa 100644
--- a/abs/extra/autofs/autofs.install
+++ b/abs/extra/autofs/autofs.install
@@ -1,5 +1,5 @@
 post_install(){
-	echo "########################################################"
-	echo "In autofs5 --ghost option isn't valid. In order to start"
-	echo "autofs you must remove it from your /etc/conf.d/autofs. "
+	echo "#########################################################"
+	echo "In autofs5 --ghost option isn't valid. In order to start autofs"
+	echo "you must remove that option from your /etc/conf.d/autofs. "
 }
diff --git a/abs/extra/autofs/finish b/abs/extra/autofs/finish
index 26f9d19..40d2fdc 100755
--- a/abs/extra/autofs/finish
+++ b/abs/extra/autofs/finish
@@ -1,3 +1,9 @@
 #!/bin/sh
 exec 2>&1
-sv down autofs
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+stat_runit "Stopping autofs4 kernel module" && echo ""
+set -e  # barf if modprobe fails
+/sbin/modprobe -r autofs4
diff --git a/abs/extra/autofs/heimdal.patch b/abs/extra/autofs/heimdal.patch
index c49b1fd..4aa3218 100644
--- a/abs/extra/autofs/heimdal.patch
+++ b/abs/extra/autofs/heimdal.patch
@@ -1,5 +1,5 @@
---- autofs-5.0.4/modules/cyrus-sasl.c~	2009-01-11 17:18:55.000000000 +0100
-+++ autofs-5.0.4/modules/cyrus-sasl.c	2009-01-11 17:18:55.000000000 +0100
+--- autofs-5.0.5/modules/cyrus-sasl.c~	2010-03-03 01:38:41.582901786 +0100
++++ autofs-5.0.5/modules/cyrus-sasl.c	2010-03-03 01:41:32.313704755 +0100
 @@ -66,6 +66,15 @@
  #endif
  #endif
@@ -16,19 +16,29 @@
  /*
   *  Once a krb5 credentials cache is setup, we need to set the KRB5CCNAME
   *  environment variable so that the library knows where to find it.
-@@ -451,11 +460,11 @@
+@@ -452,11 +452,11 @@
  
  	/* setup a principal for the ticket granting service */
  	ret = krb5_build_principal_ext(ctxt->krb5ctxt, &tgs_princ,
 -		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->length,
 -		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->data,
-+		krb5_realm_length(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
-+		krb5_realm_data(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
++		krb5_realm_length(*krb5_principal_get_realm(ctxt->krb5ctxt, krb5_client_princ)),
++		krb5_realm_data(*krb5_principal_get_realm(ctxt->krb5ctxt, krb5_client_princ)),
  		strlen(KRB5_TGS_NAME), KRB5_TGS_NAME,
 -		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->length,
 -		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->data,
-+		krb5_realm_length(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
-+		krb5_realm_data(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
++		krb5_realm_length(*krb5_principal_get_realm(ctxt->krb5ctxt, krb5_client_princ)),
++		krb5_realm_data(*krb5_principal_get_realm(ctxt->krb5ctxt, krb5_client_princ)),
  		0);
  	if (ret) {
  		error(logopt,
+--- autofs-5.0.5/modules/Makefile~	2010-03-03 01:42:18.532868539 +0100
++++ autofs-5.0.5/modules/Makefile	2010-03-03 01:42:35.360367371 +0100
+@@ -43,7 +43,7 @@
+   ifeq ($(SASL), 1)
+     SASL_OBJ = cyrus-sasl.o
+     LDAP_FLAGS += $(SASL_FLAGS) $(XML_FLAGS) -DLDAP_THREAD_SAFE
+-    LIBLDAP += $(LIBSASL) $(XML_LIBS)
++    LIBLDAP += $(LIBSASL) $(XML_LIBS) -lkrb5
+   endif
+ endif
\ No newline at end of file
diff --git a/abs/extra/autofs/log.run b/abs/extra/autofs/log.run
new file mode 100755
index 0000000..d184328
--- /dev/null
+++ b/abs/extra/autofs/log.run
@@ -0,0 +1,2 @@
+#!/bin/sh
+/usr/bin/logger -p info -i -t autofs
diff --git a/abs/extra/autofs/run b/abs/extra/autofs/run
index b35a4ea..342ade6 100755
--- a/abs/extra/autofs/run
+++ b/abs/extra/autofs/run
@@ -1,5 +1,19 @@
 #!/bin/sh
 exec 2>&1
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+stat_runit "Starting autofs4 kernel module" && echo ""
 set -e  # barf if modprobe fails
 /sbin/modprobe autofs4
-exec /etc/rc.d/autofs start
+
+stat_runit "Starting autofs automount" && echo ""
+# source application-specific settings
+[ -f /etc/conf.d/autofs ] && . /etc/conf.d/autofs
+
+if [ ! -z "$TIMEOUT" ]; then
+  daemonoptions="--timeout=$TIMEOUT $daemonoptions"
+fi
+
+exec /usr/sbin/automount -f $daemonoptions
diff --git a/abs/extra/bash-completion/PKGBUILD b/abs/extra/bash-completion/PKGBUILD
new file mode 100644
index 0000000..5aa6b22
--- /dev/null
+++ b/abs/extra/bash-completion/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: PKGBUILD 67318 2010-02-06 09:38:55Z eric $
+# Maintainer: Aaron Griffin <aaron@archlinux.org>
+# Contributor: Aurelien Foret <orelien@chez.com>
+# Contributor: Evangelos Foutras <foutrelis@gmail.com>
+
+pkgname=bash-completion
+pkgver=1.2
+pkgrel=1
+pkgdesc="Programmable completion for the bash shell"
+arch=(any)
+url="http://bash-completion.alioth.debian.org/"
+license=('GPL')
+depends=('bash')
+source=(http://bash-completion.alioth.debian.org/files/$pkgname-$pkgver.tar.gz cowsay.bashcomp)
+
+build() {
+  cd "$srcdir/$pkgname-$pkgver"
+
+  # fixes for archlinux
+  sed -i 's#/sbin/lsmod#/bin/lsmod#' bash_completion || return 1
+
+  ./configure --prefix=/usr --sysconfdir=/etc
+  make || return 1
+  make DESTDIR="$pkgdir" install
+  install -D -m644 "$srcdir/cowsay.bashcomp" "$pkgdir/etc/bash_completion.d/cowsay"
+
+  # apache2ctl doesn't work, even when renamed to apachectl (and sed'd)
+  rm "$pkgdir/etc/bash_completion.d/apache2ctl"
+  # munin-node doesn't work, even i've updated munin to 1.4.0
+  rm "$pkgdir/etc/bash_completion.d/munin-node"
+}
+# vim:set ts=2 sw=2 et:
+md5sums=('457c8808ed54f2b2cdd737b1f37ffa24'
+         'e9766bdc391caf825cb24e704422987e')
diff --git a/abs/extra/bash-completion/cowsay.bashcomp b/abs/extra/bash-completion/cowsay.bashcomp
new file mode 100644
index 0000000..77d8be9
--- /dev/null
+++ b/abs/extra/bash-completion/cowsay.bashcomp
@@ -0,0 +1,34 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/www/viewcvs.gentoo.org/raw_cvs/gentoo-x86/games-misc/cowsay/files/cowsay.bashcomp,v 1.1 2005/02/06 14:37:54 ka0ttic Exp $
+
+# bash command-line completion for cowsay
+# Author: Aaron Walker <ka0ttic@gentoo.org>
+# Modified by: Michal Bentkowski <mr.ecik at gmail.com>
+
+_cowsay() {
+    local cur prev opts x
+    COMPREPLY=()
+    cur="${COMP_WORDS[COMP_CWORD]}"
+    prev="${COMP_WORDS[COMP_CWORD-1]}"
+    opts="-e -f -h -l -n -T -W -b -d -g -p -s -t -w -y"
+
+    if [[ "${cur}" == -* || ${COMP_CWORD} -eq 1 ]] ; then
+        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
+        return 0
+    fi
+
+    case "${prev}" in
+        -f)
+            COMPREPLY=( $( command ls /usr/share/cowsay| \
+                sed -ne 's/^\('$cur'.*\)\.cow$/\1/p') )
+            return 0
+            ;;
+        -[eTW])
+            COMPREPLY=()
+            ;;
+    esac
+}
+complete -o filenames -F _cowsay cowsay cowthink
+
+# vim: set ft=sh tw=80 sw=4 et :
diff --git a/abs/extra/bluez/PKGBUILD b/abs/extra/bluez/PKGBUILD
index 9e8f13b..f8dfbe5 100644
--- a/abs/extra/bluez/PKGBUILD
+++ b/abs/extra/bluez/PKGBUILD
@@ -1,6 +1,6 @@
 # Maintainer: Geoffroy Carrier <geoffroy@archlinux.org>
 pkgname=bluez
-pkgver=4.30
+pkgver=4.69
 pkgrel=1
 pkgdesc="Libraries and tools for the Bluetooth protocol stack"
 url="http://www.bluez.org/"
@@ -12,11 +12,13 @@ optdepends=('gstreamer0.10-base' 'alsa-lib' 'libusb')
 conflicts=('bluez-libs' 'bluez-utils')
 provides=('bluez-libs' 'bluez-utils')
 replaces=('bluez-libs' 'bluez-utils')
+install='bluez.install'
 backup=(etc/bluetooth/{main,rfcomm,audio,network,input}.conf
         etc/conf.d/bluetooth)
 source=("http://www.kernel.org/pub/linux/bluetooth/$pkgname-$pkgver.tar.bz2"
-        'bluetooth.conf.d'
-        'rc.bluetooth')
+        bluetooth.conf.d run.bluetoothd run.hidd run.dund run.pand
+        run.rfcomm)
+
 build() {
   cd "$srcdir/$pkgname-$pkgver"
   ./configure --prefix=/usr \
@@ -45,9 +47,17 @@ build() {
   install -D -m644 "$srcdir/$pkgname-$pkgver/network/network.conf" "$pkgdir/etc/bluetooth/" || return 1
   install -D -m644 "$srcdir/$pkgname-$pkgver/input/input.conf"     "$pkgdir/etc/bluetooth/" || return 1
   install -D -m644 "$srcdir/$pkgname-$pkgver/audio/audio.conf"     "$pkgdir/etc/bluetooth/" || return 1
-  install -D -m755 "$srcdir/rc.bluetooth"                          "$pkgdir/etc/rc.d/bluetooth" || return 1
-  install -D -m644 "$srcdir/bluetooth.conf.d"                      "$pkgdir/etc/conf.d/bluetooth" || return 1
+  install -D -m644 "$srcdir/bluetooth.conf.d"                     "$pkgdir/etc/conf.d/bluetooth" || return 1
+  install -D -m755 "$srcdir/run.bluetoothd"                       "$pkgdir/etc/sv/bluetoothd/run" || return 1
+  install -D -m755 "$srcdir/run.hidd"                             "$pkgdir/etc/sv/hidd/run" || return 1
+  install -D -m755 "$srcdir/run.dund"                             "$pkgdir/etc/sv/dund/run" || return 1
+  install -D -m755 "$srcdir/run.pand"                             "$pkgdir/etc/sv/pand/run" || return 1
+  install -D -m755 "$srcdir/run.rfcomm"                           "$pkgdir/etc/sv/rfcomm/run" || return 1
 }
-md5sums=('5c37fb99c03f40269b9245eec3e7b7f4'
+md5sums=('350568aa11a95eac6e56e9289ff1f91d'
          'd12be5b494525bb1ba6eac5c3983dd3e'
-         '03d4f2463b1b580e8d2ada3767140685')
+         '1c88fcd455920ad8ee0c7cae3fe15771'
+         'a9c1b4da8b5a3969865272bd0fb01da2'
+         '89c073f43a074844b87e28103e48623d'
+         '8ee99afea417561d01012b8047fd06d5'
+         '934a9eaa25c275d18115068101fb75e8')
diff --git a/abs/extra/bluez/__Changelog b/abs/extra/bluez/__Changelog
new file mode 100644
index 0000000..124d0eb
--- /dev/null
+++ b/abs/extra/bluez/__Changelog
@@ -0,0 +1,11 @@
+# by mihanson
+I really have no idea how this bluetooth stuff works.  If anyone wants to
+take a stab at getting this working properly with runit, feel free.  I
+only need this package to get mythpywii working.
+
+2010-04-01:
+Make this package work with runit.  All daemons were seperated into their
+own run scripts.  Of particular interest is rfcomm and hid2hci utilities.
+They are not daemons and I added "/sbin/sv <executable> down ." in their
+respective run files.  All based on this thread:
+http://article.gmane.org/gmane.comp.sysutils.supervision.general/1585/
diff --git a/abs/extra/bluez/bluez.install b/abs/extra/bluez/bluez.install
new file mode 100644
index 0000000..f9b757b
--- /dev/null
+++ b/abs/extra/bluez/bluez.install
@@ -0,0 +1,15 @@
+post_install() {
+    add_service.sh bluetoothd
+    echo ">>> Only the bluetoothd daemon is started by default."
+    echo ">>> You can optionally add the following as required:"
+    echo ">>> hidd dund pand rfcomm"
+    echo ">>> $ sudo add_service.sh <service_name>"
+}
+
+pre_remove() {
+    for d in { bluetoothd,hidd,dund,pand,rfcomm } ; do
+      if [ -d /var/service/${d} ] ; then
+        remove_servcie.sh $d
+      fi
+    done
+}
diff --git a/abs/extra/bluez/run.bluetoothd b/abs/extra/bluez/run.bluetoothd
new file mode 100644
index 0000000..7a92437
--- /dev/null
+++ b/abs/extra/bluez/run.bluetoothd
@@ -0,0 +1,12 @@
+#!/bin/sh
+#
+# Start/stop the Bluetooth daemons
+#
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -f /etc/conf.d/bluetooth ] && . /etc/conf.d/bluetooth
+
+    stat_runit "Starting bluetooth subsystem:"
+      exec /usr/sbin/bluetoothd -n
diff --git a/abs/extra/bluez/run.dund b/abs/extra/bluez/run.dund
new file mode 100644
index 0000000..c42cfa1
--- /dev/null
+++ b/abs/extra/bluez/run.dund
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# Start/stop the Bluetooth daemons
+#
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -f /etc/conf.d/bluetooth ] && . /etc/conf.d/bluetooth
+
+svwaitup -s 3 /var/service/bluetoothd || exit 1
+
+    stat_runit "Starting BlueZ Bluetooth dial-up networking daemon"
+      exec /usr/bin/dund -n -s
diff --git a/abs/extra/bluez/run.hidd b/abs/extra/bluez/run.hidd
new file mode 100644
index 0000000..e4f66d3
--- /dev/null
+++ b/abs/extra/bluez/run.hidd
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# Start/stop the Bluetooth daemons
+#
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -f /etc/conf.d/bluetooth ] && . /etc/conf.d/bluetooth
+
+svwaitup -s 3 /var/service/bluetoothd || exit 1
+
+    stat_runit "Starting Bluetooth HID daemon:"
+      exec /usr/bin/hidd -n --server
diff --git a/abs/extra/bluez/run.pand b/abs/extra/bluez/run.pand
new file mode 100644
index 0000000..ab15ef6
--- /dev/null
+++ b/abs/extra/bluez/run.pand
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# Start/stop the Bluetooth daemons
+#
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -f /etc/conf.d/bluetooth ] && . /etc/conf.d/bluetooth
+
+svwaitup -s 3 /var/service/bluetoothd || exit 1
+
+    stat_runit "Starting BlueZ Bluetooth PAN daemon"
+      exec /usr/bin/pand -n -s
diff --git a/abs/extra/bluez/run.rfcomm b/abs/extra/bluez/run.rfcomm
new file mode 100644
index 0000000..8bc619b
--- /dev/null
+++ b/abs/extra/bluez/run.rfcomm
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Start/stop the Bluetooth daemons
+#
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -f /etc/conf.d/bluetooth ] && . /etc/conf.d/bluetooth
+
+RFCOMM_CONFIG="/etc/bluetooth/rfcomm.conf"
+
+svwaitup -s 3 /var/service/bluetoothd || exit 1
+
+    stat_runit "Starting RFCOMM for the bluetooth subsystem"
+      /usr/bin/rfcomm -f $RFCOMM_CONFIG bind all
+      /sbin/sv down .
diff --git a/abs/extra/ccache/PKGBUILD b/abs/extra/ccache/PKGBUILD
new file mode 100644
index 0000000..81f188b
--- /dev/null
+++ b/abs/extra/ccache/PKGBUILD
@@ -0,0 +1,35 @@
+# $Id: PKGBUILD 33524 2009-04-04 13:56:15Z giovanni $
+# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=ccache
+pkgver=3.0.1
+pkgrel=1
+pkgdesc="ccache is a compiler cache"
+url="http://ccache.samba.org/"
+source=(http://samba.org/ftp/${pkgname}/$pkgname-$pkgver.tar.gz)
+license=('GPL')
+arch=('i686' 'x86_64')
+depends=('glibc')
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+  ./configure --prefix=/usr
+  make || return 1
+  install -Dm 755 ccache ${pkgdir}/usr/bin/ccache
+  install -Dm 644 ccache.1 ${pkgdir}/usr/share/man/man1/ccache.1
+
+  mkdir -p ${pkgdir}/usr/lib/ccache/bin
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/cc 
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/gcc
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/g++
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/cpp
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/c++
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/${CHOST}-cc
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/${CHOST}-gcc
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/${CHOST}-g++
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/${CHOST}-cpp
+  ln -sf /usr/bin/ccache ${pkgdir}/usr/lib/ccache/bin/${CHOST}-c++
+}
+
+md5sums=('15f2449899d9e8dc3aff6b86f97ab63e')
diff --git a/abs/extra/community/amule/PKGBUILD b/abs/extra/community/amule/PKGBUILD
new file mode 100644
index 0000000..3bb5c1b
--- /dev/null
+++ b/abs/extra/community/amule/PKGBUILD
@@ -0,0 +1,37 @@
+# $Id: PKGBUILD 63810 2010-01-18 20:34:42Z ibiru $
+# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
+# Contributor: Henrik Ronellenfitsch <searinox@web.de>
+
+pkgname=amule
+pkgver=2.2.6
+pkgrel=2
+pkgdesc="An eMule-like client for ed2k p2p network"
+arch=('i686' 'x86_64')
+url="http://www.amule.org"
+license=('GPL')
+depends=('wxgtk>=2.8.10.1' 'gd>=2.0.35' 'geoip')
+makedepends=('crypto++')
+source=(http://downloads.sourceforge.net/project/${pkgname}/aMule/${pkgver}/aMule-${pkgver}.tar.bz2)
+md5sums=('530d9b48187e36f78fc21bb19e94326d')
+
+build() {
+  cd ${srcdir}/aMule-${pkgver}
+
+  ./configure --prefix=/usr \
+              --mandir=/usr/share/man \
+              --enable-cas \
+              --enable-wxcas \
+              --enable-amule-daemon \
+              --enable-amulecmd \
+              --enable-amule-gui \
+              --enable-alc \
+              --enable-alcc \
+              --enable-webserver \
+              --disable-debug \
+              --enable-optimize \
+	      --enable-ccache \
+	      --enable-geoip
+
+  make || return 1
+  make DESTDIR=${pkgdir}/ install || return 1
+}
diff --git a/abs/extra/community/blockcontrol/PKGBUILD b/abs/extra/community/blockcontrol/PKGBUILD
new file mode 100644
index 0000000..2507adc
--- /dev/null
+++ b/abs/extra/community/blockcontrol/PKGBUILD
@@ -0,0 +1,37 @@
+# Contributor: Daniele Marinello <marinz at email dot it>
+
+pkgname=blockcontrol
+pkgver=1.6.9
+pkgrel=3
+pkgdesc="blockcontrol is designed to do all tasks related to IP block daemons (MoBlock or NFBlock). They check internet traffic based on large lists of IP address ranges in order to protect your privacy."
+arch=('i686' 'x86_64')
+url="http://moblock-deb.sourceforge.net/"
+license=('GPL2' 'BSD')
+depends=('moblock' 'wget')
+conflicts=('moblockcontrol')
+source=(http://downloads.sourceforge.net/moblock-deb/$pkgname-$pkgver.tar.gz \
+                 blockcontrol.lib.patch)
+backup=('etc/blockcontrol/blockcontrol.conf' 'etc/blockcontrol/blocklists.list')
+
+build() {  
+  cd "$startdir/src/$pkgname-$pkgver"
+  patch -Np1 -i ../blockcontrol.lib.patch || return 1
+  
+  install -D -m 755 $startdir/src/$pkgname-$pkgver/blockcontrol ${pkgdir}/usr/bin/blockcontrol
+  install -D -m 755 $startdir/src/$pkgname-$pkgver/blockcontrol.main ${pkgdir}/usr/lib/blockcontrol/blockcontrol.main
+  install -D -m 644 $startdir/src/$pkgname-$pkgver/blockcontrol.defaults ${pkgdir}/usr/lib/blockcontrol/blockcontrol.defaults
+  install -D -m 644 $startdir/src/$pkgname-$pkgver/blockcontrol.lib ${pkgdir}/usr/lib/blockcontrol/blockcontrol.lib
+  install -D -m 755 $startdir/src/$pkgname-$pkgver/blockcontrol.wd ${pkgdir}/usr/bin/blockcontrol.wd
+  install -D -m 644 $startdir/src/$pkgname-$pkgver/allow.p2p ${pkgdir}/etc/blockcontrol/allow.p2p
+  install -D -m 644 $startdir/src/$pkgname-$pkgver/blockcontrol.conf ${pkgdir}/etc/blockcontrol/blockcontrol.conf
+  install -D -m 644 $startdir/src/$pkgname-$pkgver/blocklists.list ${pkgdir}/etc/blockcontrol/blocklists.list
+# install -D -m 755 $startdir/src/$pkgname-$pkgver/if-up ${pkgdir}/etc/network/if-up.d/blockcontrol
+  install -D -m 755 $startdir/src/$pkgname-$pkgver/cron.daily ${pkgdir}/etc/cron.daily/blockcontrol
+  install -D -m 755 $startdir/src/$pkgname-$pkgver/init ${pkgdir}/etc/rc.d/blockcontrol
+  install -D -m 644 $startdir/src/$pkgname-$pkgver/logrotate ${pkgdir}/etc/logrotate.d/blockcontrol
+  install -d ${pkgdir}/var/lib/blockcontrol
+  install -d ${pkgdir}/var/spool/blockcontrol
+}
+
+md5sums=('d02002745aacf6100ff9057bdc80adf3'
+         'efcca84e52ea98cc10610830f9c2ba37')
diff --git a/abs/extra/community/blockcontrol/blockcontrol.lib.patch b/abs/extra/community/blockcontrol/blockcontrol.lib.patch
new file mode 100644
index 0000000..4be1c75
--- /dev/null
+++ b/abs/extra/community/blockcontrol/blockcontrol.lib.patch
@@ -0,0 +1,15 @@
+--- blockcontrol/blockcontrol_old.lib	2009-09-14 19:35:24.000000000 +0200
++++ blockcontrol/blockcontrol.lib	2009-11-05 20:29:50.000000000 +0100
+@@ -1344,10 +1344,10 @@
+ 				DAEMON_OPTS="$CUSTOM_DAEMON_OPTS"
+ 			elif [ "$NAME" = moblock ] ; then
+ 				# The options MoBlock is started with
+-				DAEMON_OPTS="-$BLOCKLIST_FORMAT $BLOCKLIST $NFQUEUE_NUMBER_OPT $LOG_SYSLOG_OPT $LOG_TIMESTAMP_OPT $REJECT_OPT $ACCEPT_OPT $DAEMON_LOG"
++				DAEMON_OPTS="-$BLOCKLIST_FORMAT $BLOCKLIST $NFQUEUE_NUMBER_OPT $LOG_SYSLOG_OPT $DAEMON_LOG"
+ 			elif [ "$NAME" = nfblockd ] ; then
+ 				# The options NFBlock is started with
+-				DAEMON_OPTS="-d -f $BLOCKLIST -p $PIDFILE $NFQUEUE_NUMBER_OPT $REJECT_OPT $ACCEPT_OPT $LOG_SYSLOG_OPT"
++				DAEMON_OPTS="-d -f $BLOCKLIST -p $PIDFILE $NFQUEUE_NUMBER_OPT $LOG_SYSLOG_OPT"
+ 			fi
+ 
+ 			# Test NICE_LEVEL setting.
diff --git a/abs/extra/community/cwiid-git/PKGBUILD b/abs/extra/community/cwiid-git/PKGBUILD
new file mode 100644
index 0000000..909f224
--- /dev/null
+++ b/abs/extra/community/cwiid-git/PKGBUILD
@@ -0,0 +1,62 @@
+#Contributor:Andrea Tarocchi <valdar@email.it> 
+pkgname=cwiid-git
+#pkgver=`date +%Y%m%d`
+pkgver=20100716
+pkgrel=1
+pkgdesc="Cwiid-git is the bleeding edge version of a wiimote's driver and utility tools"
+arch=(i686 x86_64)
+url="http://github.com/abstrakraft/cwiid"
+license=('GPL')
+
+depends=('bluez>=4' 'gtk2' 'python')
+makedepends=('git' 'make' 'automake' 'autoconf')
+replaces=('cwiid' 'cwiid-svn')
+provides=('cwiid' 'cwiid-git')
+install=('cwiid.install')
+source=()
+
+_gitroot=git://github.com/abstrakraft/cwiid.git
+_gitname=cwiid
+_builddir=$srcdir/$_gitname-build
+
+build() {
+  
+  export LDFLAGS=
+
+  cd $srcdir/
+  msg "Connecting to github.com GIT server...."
+  if [ -d $srcdir/$_gitname ] ; then
+    pushd $_gitname && git pull origin && popd
+    msg "The local files are updated."
+  else
+    git clone $_gitroot
+  fi
+  msg "GIT checkout done or server timeout"
+  msg "Starting make..."
+  rm -rf $_gitname-build
+  git clone $_gitname $_gitname-build
+
+  cd $_builddir
+  
+  aclocal
+  autoreconf
+  ./configure --prefix=/usr --sysconfdir=/etc --disable-ldconfig
+
+  make || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+
+#  aclocal
+#  autoreconf
+  
+#  ./configure --disable-ldconfig --prefix=/usr --sysconfdir=/etc --with-cwiid-plugins-dir=/lib/cwiid/plugins
+#  make LDFLAGS=-L../libcwiid || return 1
+
+#  install -d $startdir/pkg/usr/bin
+#  install -d $startdir/pkg/etc
+#  install -d $startdir/pkg/usr/lib
+#  install -d $startdir/pkg/usr/include
+
+#  make install LDFLAGS=-L../libcwiid prefix=$startdir/pkg/usr sysconfdir=$startdir/pkg/etc install
+
+#  install -D -m644 ./wminput/README $pkgdir/usr/share/doc/cwiid/wminput
+}
diff --git a/abs/extra/community/cwiid-git/cwiid.install b/abs/extra/community/cwiid-git/cwiid.install
new file mode 100644
index 0000000..5dc5faf
--- /dev/null
+++ b/abs/extra/community/cwiid-git/cwiid.install
@@ -0,0 +1,16 @@
+# arg 1:  the new package version
+post_install() {
+echo -e "Note:"
+echo -e "\033[1;31m==> In order to use wminput you have to load the uinput kernel module:\033[0m"
+echo -e "\033[1;31m==> modprobe uinput (as root)\033[0m"
+echo -e "\033[1;31m==> and you have to assign correct right acces to /dev/uinput\033[0m"
+echo -e "\033[1;31m==> PLEAS READ THE DOC FILE /usr/share/doc/cwiid/wminput\033[0m"
+}
+
+post_upgrade() {
+  post_install $1
+}
+
+op=$1
+shift
+$op $*
\ No newline at end of file
diff --git a/abs/extra/community/deluge/PKGBUILD b/abs/extra/community/deluge/PKGBUILD
index 6a1a971..8238baa 100644
--- a/abs/extra/community/deluge/PKGBUILD
+++ b/abs/extra/community/deluge/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Hugo Doria <hugo@archlinux.org>
 
 pkgname=deluge
-pkgver=1.1.2
+pkgver=1.2.2
 pkgrel=1
 pkgdesc="A bittorrent client written with python and pygtk"
 arch=('i686' 'x86_64')
@@ -11,8 +11,7 @@ license=('GPL3')
 depends=('pygtk' 'boost>=1.37.0' 'pyxdg' 'dbus-python' 'librsvg' 'setuptools')
 makedepends=('subversion' 'intltool')
 options=('!emptydirs')
-source=(http://download.deluge-torrent.org/source/${pkgver}/${pkgname}-${pkgver}.tar.gz)
-md5sums=('c9d56e266e5cb3024f2dbd72c952e182')
+source=(http://download.deluge-torrent.org/source/${pkgname}-${pkgver}.tar.gz)
 
 build() {
 
@@ -23,3 +22,4 @@ build() {
   install -D -m644 deluge/data/pixmaps/deluge.svg ${pkgdir}/usr/share/pixmaps/deluge.svg 
 }
 
+md5sums=('5165c6113efa75e2be0310976ce55e43')
diff --git a/abs/extra/community/firefox/PKGBUILD b/abs/extra/community/firefox/PKGBUILD
index 191c913..17a70b3 100644
--- a/abs/extra/community/firefox/PKGBUILD
+++ b/abs/extra/community/firefox/PKGBUILD
@@ -3,12 +3,12 @@
 
 pkgname=firefox
 pkgver=3.5.1
-pkgrel=3
+pkgrel=4
 _xulver=1.9.1.1
 pkgdesc="Standalone web browser from mozilla.org"
 arch=(i686 x86_64)
 license=('MPL' 'GPL' 'LGPL')
-depends=("xulrunner>=${_xulver}" 'desktop-file-utils' "nspr>=4.8")
+depends=("xulrunner>=${_xulver}" 'desktop-file-utils' "nspr>=4.8" gconf)
 makedepends=('zip' 'pkgconfig' 'diffutils' 'libgnomeui>=2.24.1' 'python')
 replaces=('firefox3')
 install=firefox.install
@@ -70,6 +70,7 @@ build() {
 
   mv ${pkgdir}/usr/bin/firefox ${pkgdir}/usr/bin/firefox.bin
   echo "#!/bin/bash
+/usr/lib/GConf/gconfd-2 &
 export LD_PRELOAD=/usr/lib/libGL.so.1
 /usr/bin/firefox.bin" > ${pkgdir}/usr/bin/firefox
   chmod 755 ${pkgdir}/usr/bin/firefox
diff --git a/abs/extra/community/flashplugin-prerelease/PKGBUILD b/abs/extra/community/flashplugin-prerelease/PKGBUILD
new file mode 100644
index 0000000..d6eca0b
--- /dev/null
+++ b/abs/extra/community/flashplugin-prerelease/PKGBUILD
@@ -0,0 +1,28 @@
+# Contributor : Anish Bhatt <anish[removethis][at]gatech[dot]edu>
+
+pkgname=flashplugin-prerelease
+_licensefile='Reader_Player_AIR_WWEULA-Combined-20080204_1313.pdf'
+pkgver=10.1.51.66
+pkgrel=1
+source=('http://download.macromedia.com/pub/labs/flashplayer10/flashplayer10_1_p2_linux_121709.tar.gz'
+	"http://www.adobe.com/products/eulas/pdfs/${_licensefile}")
+md5sums=('4f56f8235cb72a59d04d64ca4bd442b3'
+	'1636037610ee2aa35c5fb736a697b7e0')
+
+pkgdesc='Adobe Flash Player Prerelease'
+url='http://labs.adobe.com/technologies/flashplayer10/'
+arch=('i686')
+depends=('mozilla-common' 'libxt' 'gtk2' 'nss' 'curl')
+conflicts=('flashplugin')
+provides=('flashplayer')
+license=('custom')
+
+build() {
+  install -d -m755 ${pkgdir}/usr/lib/mozilla/plugins/ || return 1
+  if [ "${CARCH}" = 'i686' ]; then
+    install -m755 ${srcdir}/install_flash_player_10_linux/libflashplayer.so ${pkgdir}/usr/lib/mozilla/plugins/ || return 1
+  fi
+  install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+  install -m644 "${_licensefile}" ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
+
diff --git a/abs/extra/community/flashplugin/PKGBUILD b/abs/extra/community/flashplugin/PKGBUILD
index 1e68f40..7d7e65f 100644
--- a/abs/extra/community/flashplugin/PKGBUILD
+++ b/abs/extra/community/flashplugin/PKGBUILD
@@ -1,40 +1,27 @@
-# $Id: PKGBUILD 21951 2008-12-18 13:25:19Z thomas $
+# $Id: PKGBUILD 60911 2009-12-09 11:51:09Z andrea $
+# Contributor: Andrea Scarpino <andrea@archlinux.org>
 
 pkgname=flashplugin
-_licensefile='Reader_Player_WWEULA-Combined-20060724_1430.pdf'
-if [ "${CARCH}" = 'i686' ]; then
-  pkgver=10.0.15.3
-  pkgrel=1
-  source=('http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz'
-          "http://www.adobe.com/products/eulas/pdfs/${_licensefile}")
-  md5sums=('afab0b40b0ae11445e2e90a4a9224a8a'
-           '844cea6c9afc13d9e27f28ce1a6e20f3')
-elif [ "${CARCH}" = 'x86_64' ]; then
-  pkgver=10.0.d21.1
-  pkgrel=1
-  source=("http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-${pkgver}.linux-x86_64.so.tar.gz"
-          "http://www.adobe.com/products/eulas/pdfs/${_licensefile}")
-  md5sums=('c165af9d4e324bfaf6d1cfbdbe959fbb'
-           '844cea6c9afc13d9e27f28ce1a6e20f3')
-else
-  error Unknown architecture.
-  exit 1
-fi
+_licensefile='Reader_Player_AIR_WWEULA-Combined-20080204_1313.pdf'
+pkgver=10.1.53.64
+pkgrel=1
 pkgdesc='Adobe Flash Player'
-url='http://www.adobe.com/go/getflash'
+url='http://get.adobe.com/flashplayer'
 arch=('i686' 'x86_64')
 depends=('mozilla-common' 'libxt' 'gtk2' 'nss' 'curl')
 replaces=('flashplugin-beta')
 provides=('flashplayer')
 license=('custom')
+source=('http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz'
+        "http://www.adobe.com/products/eulas/pdfs/${_licensefile}")
+[ "${CARCH}" = "x86_64" ] && source[0]="http://download.macromedia.com/pub/labs/flashplayer10/libflashplayer-${pkgver}.linux-${CARCH}.so.tar.gz"
+[ "${CARCH}" = "x86_64" ] && md5sums[0]='8b427c2991c0447af56a951c653ee383'
 
 build() {
   install -d -m755 ${pkgdir}/usr/lib/mozilla/plugins/ || return 1
-  if [ "${CARCH}" = 'i686' ]; then
-    install -m755 ${srcdir}/install_flash_player_10_linux/libflashplayer.so ${pkgdir}/usr/lib/mozilla/plugins/ || return 1
-  elif [ "${CARCH}" = 'x86_64' ]; then
-    install -m755 ${srcdir}/libflashplayer.so ${pkgdir}/usr/lib/mozilla/plugins/ || return 1
-  fi
+  install -m755 ${srcdir}/libflashplayer.so ${pkgdir}/usr/lib/mozilla/plugins/ || return 1
   install -d -m755 ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
-  install -m644 "${_licensefile}" ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+  install -m644 "${_licensefile}" ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE.pdf || return 1
 }
+md5sums=('e4cb4d26124605a54c3d498cc440368f'
+         '1636037610ee2aa35c5fb736a697b7e0')
diff --git a/abs/extra/community/foldingathome/PKGBUILD b/abs/extra/community/foldingathome/PKGBUILD
index bb93407..6f00936 100644
--- a/abs/extra/community/foldingathome/PKGBUILD
+++ b/abs/extra/community/foldingathome/PKGBUILD
@@ -4,7 +4,7 @@
 
 pkgname=foldingathome
 pkgver=6.02
-pkgrel=6
+pkgrel=7
 pkgdesc="Folding@Home is a distributed computing project which studies protein folding, misfolding, aggregation, and related diseases."
 arch=('i686')
 url="http://folding.stanford.edu/"
@@ -14,13 +14,15 @@ backup=('etc/conf.d/foldingathome')
 install=foldingathome.install
 source=(http://www.stanford.edu/group/pandegroup/folding/release/FAH$pkgver-Linux.tgz
 	run)
-md5sums=('112b3d66909050f1bb990993a1464cb9'
-         '61eb4617e7363d586a05dde980ad1c14')
 
 build() {
   cd $startdir/src/
 
+  tar zxf FAH${pkgver}-Linux.tgz
+
   # At this stage, the mpiexec is not included because it requires x86_64.
   install -D -c -m755 fah6 $startdir/pkg/usr/bin/fah6 || return 1
   install -D -m755 run $startdir/pkg/etc/sv/fah/run
 }
+md5sums=('112b3d66909050f1bb990993a1464cb9'
+         'cefaf5ba2f3e2fe81533b5ee4795dc78')
diff --git a/abs/extra/community/foldingathome/run b/abs/extra/community/foldingathome/run
index ede51f2..cd4a072 100644
--- a/abs/extra/community/foldingathome/run
+++ b/abs/extra/community/foldingathome/run
@@ -22,5 +22,5 @@ if [ -d $FOLDING_DIR ] ; then
 
   # No need to direct output to a log file becase a log file
   # will automatically be placed in $FOLDING_DIR
-  exec /usr/bin/fah6 -verbosity 9 &> /dev/null < /dev/null
+  exec /usr/bin/fah6 &> /dev/null < /dev/null
 fi
diff --git a/abs/extra/community/fuzemux/PKGBUILD b/abs/extra/community/fuzemux/PKGBUILD
new file mode 100644
index 0000000..5cce2d0
--- /dev/null
+++ b/abs/extra/community/fuzemux/PKGBUILD
@@ -0,0 +1,42 @@
+# Contributor: Michael Hanson <hansonorders@verizon.net>
+# Maintainer: Michael Hanson <hansonorders@verizon.net>
+pkgname=fuzemux-svn
+pkgver=11
+pkgrel=1
+pkgdesc="A tool to remux AVI video files for the San Disk Sansa Fuze portable media player"
+arch=('i686' 'x86_64')
+url="http://code.google.com/p/fuzemux"
+license=('GPL3')
+#depends=()
+makedepends=('subversion' 'autoconf')
+provides=('fuzemux')
+install=('fuzemux-svn.install')
+
+_svntrunk=http://fuzemux.googlecode.com/svn/trunk/
+_svnmod=fuzemux
+
+build() {
+  cd "$srcdir"
+
+  if [ -d $_svnmod/.svn ]; then
+    (cd $_svnmod && svn up -r $pkgver)
+  else
+    svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod
+  fi
+
+  msg "SVN checkout done or server timeout"
+  msg "Starting make..."
+
+  rm -rf "$srcdir/$_svnmod-build"
+  cp -r "$srcdir/$_svnmod" "$srcdir/$_svnmod-build"
+  cd "$srcdir/$_svnmod-build"
+
+  #
+  # BUILD
+  #
+  /usr/bin/autoreconf --install
+  ./configure --prefix=/usr
+  make || return 1
+  make DESTDIR="$pkgdir/" install
+}
+md5sums=()
diff --git a/abs/extra/community/fuzemux/fuzemux-svn.install b/abs/extra/community/fuzemux/fuzemux-svn.install
new file mode 100644
index 0000000..877ec1b
--- /dev/null
+++ b/abs/extra/community/fuzemux/fuzemux-svn.install
@@ -0,0 +1,5 @@
+post_install() {
+	echo ">>>"
+	echo ">>> A user job script is supplied at /usr/LH/bin/myth2fuze"
+	echo ">>>"
+}
diff --git a/abs/extra/community/mediatomb/PKGBUILD b/abs/extra/community/mediatomb/PKGBUILD
new file mode 100644
index 0000000..aaf4d58
--- /dev/null
+++ b/abs/extra/community/mediatomb/PKGBUILD
@@ -0,0 +1,57 @@
+# Orginal Contributor: William Rea <sillywilly@gmail.com>
+# Contributor: Nikhil Bysani <nikron@gmail.com>
+# Contributor: Mika Hynnä <igheax@gmail.com>
+
+# 20090525: 
+#	+ makedepends=('gcc' 'patch' 'make')
+#	+ mediatomb-0.11.0+glibc-2.10.patch
+
+pkgname=mediatomb
+pkgver=0.11.0
+pkgrel=10
+pkgdesc="A UPnP mediaserver"
+arch=('i686' 'x86_64')
+url="http://mediatomb.sourceforge.net"
+license=('GPL')
+depends=('libexif' 'taglib' 'sqlite3' 'expat' 'spidermonkey' 'curl' 'ffmpeg')
+makedepends=('gcc' 'patch' 'make')
+backup=(etc/conf.d/mediatomb)
+source=(
+	http://mesh.dl.sourceforge.net/sourceforge/mediatomb/mediatomb-$pkgver.tar.gz \
+	mediatomb.rc \
+	mediatomb.conf \
+	http://kapsi.fi/~ighea/arch/mediatomb-gcc-4.3.patch
+	mediatomb-0.11.0+glibc-2.10.patch
+)
+
+build()
+{
+	cd $startdir/src/mediatomb-$pkgver || return 1
+	patch -Np1 < ../mediatomb-gcc-4.3.patch || return 1
+	patch -Np0 < ../mediatomb-0.11.0+glibc-2.10.patch || return 1
+	
+	sed -e s/"ffmpeg\/avformat.h"/"libavformat\/avformat.h"/g -i configure
+	sed -e s/"ffmpeg\/avformat.h"/"libavformat\/avformat.h"/g -i configure.ac
+	sed -e s/"ffmpeg\/avformat.h"/"libavformat\/avformat.h"/g -i src/metadata/ffmpeg_handler.cc
+	
+
+	./configure --prefix=/usr --enable-mysql=no --enable-libmagic=yes \
+	 --enable-libjs=yes --enable-ffmpeg --with-ffmpeg-h=/usr/include/ || return 1
+
+	make || return 1
+	make DESTDIR=$startdir/pkg install || return 1
+
+	# rc-script
+	mkdir -p $startdir/pkg/etc/rc.d/ || return 1
+	install -m0755 ../mediatomb.rc $startdir/pkg/etc/rc.d/mediatomb || return 1
+
+	# config-file
+	mkdir -p $startdir/pkg/etc/conf.d/ || return 1
+	install -m0644 ../mediatomb.conf $startdir/pkg/etc/conf.d/mediatomb || return 1
+
+}
+md5sums=('661f08933830d920de21436fe122fb15'
+         'a7ff197d5760b20b04675ba67bfd9e86'
+         'a4cbd08c32c93f116363a29bef60e21d'
+         'eda28d01e035b3237566da5b1aad7712'
+         '3b895eabee88a0697b4fd0c30af6cab2')
diff --git a/abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch b/abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch
new file mode 100644
index 0000000..b1436c1
--- /dev/null
+++ b/abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch
@@ -0,0 +1,23 @@
+--- src/tools.cc	(revisione 2018)
++++ src/tools.cc	(copia locale)
+@@ -303,8 +303,8 @@
+     Ref<StringBuffer> buf(new StringBuffer(len / 2));
+     for (int i = 0; i < len; i += 2)
+     {
+-        char *chi = strchr(HEX_CHARS, ptr[i]);
+-        char *clo = strchr(HEX_CHARS, ptr[i + 1]);
++        const char *chi = strchr(HEX_CHARS, ptr[i]);
++        const char *clo = strchr(HEX_CHARS, ptr[i + 1]);
+         int hi, lo;
+         
+         if (chi)
+@@ -397,7 +397,7 @@
+             char clo = data[i++];
+             int hi, lo;
+ 
+-            char *pos;
++            const char *pos;
+ 
+             pos = strchr(hex, chi);
+             if (!pos)
+
diff --git a/abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch b/abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch
new file mode 100644
index 0000000..9440bec
--- /dev/null
+++ b/abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch
@@ -0,0 +1,24 @@
+# GCC-4.3 compatibility patch by Mika Hynnä (ighea) <igheaxATgmailDOTcom>
+#
+--- mediatomb-0.11.0/src/url.cc	2008-03-02 00:48:36.000000000 +0200
++++ mediatomb-0.11.0.new/src/url.cc	2008-04-14 00:53:21.000000000 +0300
+@@ -75,7 +75,7 @@
+ 
+     if (only_header)
+     {
+-        curl_easy_setopt(curl_handle, CURLOPT_NOBODY);
++        curl_easy_setopt(curl_handle, CURLOPT_NOBODY,0);
+         curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, URL::dl);
+         curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, 
+                          (void *)buffer.getPtr());
+--- mediatomb-0.11.0/src/metadata/id3_handler.cc	2008-03-02 00:48:36.000000000 +0200
++++ mediatomb-0.11.0.new/src/metadata/id3_handler.cc	2008-04-14 01:22:36.000000000 +0300
+@@ -36,6 +36,8 @@
+ 
+ #ifdef HAVE_ID3
+ 
++#include <string.h>
++
+ #ifdef HAVE_CONFIG_H
+     #undef HAVE_CONFIG_H // else utils.h from the id3 library tries to import "config.h"
+ 
diff --git a/abs/extra/community/mediatomb/mediatomb.conf b/abs/extra/community/mediatomb/mediatomb.conf
new file mode 100644
index 0000000..339bd9e
--- /dev/null
+++ b/abs/extra/community/mediatomb/mediatomb.conf
@@ -0,0 +1,5 @@
+# User to run the mediatomb as:
+USER=""
+# Extra parameters to pass to the daemon:
+PARAMS=""
+
diff --git a/abs/extra/community/mediatomb/mediatomb.rc b/abs/extra/community/mediatomb/mediatomb.rc
new file mode 100755
index 0000000..b3333cc
--- /dev/null
+++ b/abs/extra/community/mediatomb/mediatomb.rc
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+DESC="MediaTomb UPnP A/V Media Server"
+
+USER=""
+
+if [ "$(whoami)" != "root" ];then
+ echo "You must be root to start/restart/stop services."
+ exit 1
+fi
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+[ -r "/etc/conf.d/mediatomb" ] && . /etc/conf.d/mediatomb
+
+PID=`pidof -o %PPID /usr/bin/mediatomb`
+
+case "$1" in
+  start)
+    stat_busy "Starting $DESC"
+    if [ -z "$PID" ]; then
+	if [ -n "$USER" ]; then
+		echo -n "Starting as user: $USER"
+		su - $USER -c "/usr/bin/mediatomb -d $PARAMS &> /dev/null" || stat_fail
+	else
+		/usr/bin/mediatomb -d $PARAMS &> /dev/null || stat_fail
+	fi
+	PID=`pidof -o %PPID /usr/bin/mediatomb`
+	if [ -z "$PID" ]; then exit 1;fi
+	echo $PID > /var/run/mediatomb.pid
+	add_daemon mediatomb
+        stat_done
+    else    
+		echo -n "Already running!"
+		stat_fail
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping $DESC"
+    [ ! -z "$PID" ] && kill $PID &> /dev/null
+    if [ $? -gt 0 ]; then
+      echo -n "Not started!"
+      stat_fail
+    else
+      rm /var/run/mediatomb.pid
+      rm_daemon mediatomb
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/extra/community/mobloquer/PKGBUILD b/abs/extra/community/mobloquer/PKGBUILD
index eecdb4a..b6254d5 100644
--- a/abs/extra/community/mobloquer/PKGBUILD
+++ b/abs/extra/community/mobloquer/PKGBUILD
@@ -1,26 +1,26 @@
-# Contributor: marinz <marinz@email.it>
+# Contributor: Daniele Marinello <marinz att email dot it>
 
 pkgname=mobloquer
-pkgver=0.5
-pkgrel=5
+pkgver=0.6
+pkgrel=6
 pkgdesc="A graphical front end for moblock"
 arch=('i686' 'x86_64')
 url="http://mobloquer.foutrelis.com/"
 license=('GPL')
-depends=('qt' 'moblockcontrol')
-source=(http://download.sourceforge.net/mobloquer/$pkgname-$pkgver.tar.gz)
-md5sums=('2adb03d170fa0e9a7ffcc9dac8d71bf5')
+depends=('qt' 'blockcontrol')
+source=(http://downloads.sourceforge.net/mobloquer/$pkgname-$pkgver.tar.gz)
+md5sums=('6363ee4c42da1d85367fdd65d4bf42ca')
 
 build() {
  
-  cd $startdir/src/$pkgname
+  cd $startdir/src/$pkgname-$pkgver
   
   qmake
   make || return 1
-  
-  install -d ${pkgdir}/usr/share/applications ${pkgdir}/usr/bin
-  install -m 755 -p $startdir/src/mobloquer/images/mobloquer.png $startdir/pkg/usr/share/pixmaps/
-  install -m 644 -p $startdir/src/mobloquer/other/Mobloquer.desktop $startdir/pkg/usr/share/applications/
-  install -m 755 -p $startdir/src/mobloquer/mobloquer $startdir/pkg/usr/bin/mobloquer
+
+  install -d ${pkgdir}/usr/share/applications ${pkgdir}/usr/bin ${pkgdir}/usr/share/pixmaps
+  install -m 644 -p $startdir/src/$pkgname-$pkgver/images/mobloquer.png $startdir/pkg/usr/share/pixmaps/
+  install -m 644 -p $startdir/src/$pkgname-$pkgver/other/Mobloquer.desktop $startdir/pkg/usr/share/applications/
+  install -m 755 -p $startdir/src/$pkgname-$pkgver/mobloquer $startdir/pkg/usr/bin/mobloquer
 }
 
diff --git a/abs/extra/community/mre/PKGBUILD b/abs/extra/community/mre/PKGBUILD
new file mode 100644
index 0000000..72d3bc3
--- /dev/null
+++ b/abs/extra/community/mre/PKGBUILD
@@ -0,0 +1,41 @@
+arch=('i686')
+pkgname=mre
+pkgver=1.1.2
+pkgrel=2
+_kernver=2.6.28-LinHES
+pkgdesc="Myth Recording Extender"
+url="http://sourceforge.net/projects/mythtv-tools/"
+license=('GPL-2')
+depends=('PearDB' 'PearLog')
+makedepends=()
+source=('mre-1.1.2.tar.gz' 'patch.diff' 'livescores.tgz' 'run' 'mre.lr')
+install=('mre.install')
+
+build() {
+	cd $startdir/src/mre-1.1.2/
+	patch -p0 < ../patch.diff
+	./configure
+	make INST_ROOT=$startdir/pkg install
+	cp $startdir/src/mre-1.1.2/conf/mre.conf $startdir/pkg/etc/mre.conf
+	cp $startdir/src/mre-1.1.2/test/test_title_subtitle.php\
+       		$startdir/pkg/usr/local/bin/
+	chmod a+x $startdir/pkg/usr/local/bin/test_title_subtitle.php
+	rm -r $startdir/pkg/etc/init.d
+	mkdir -p  $startdir/pkg/var/log/mre
+	touch $startdir/pkg/var/log/mre/mre.log
+	chown mythtv:mythtv "$startdir/pkg/var/log/mre/mre.log"
+	mkdir -p $startdir/pkg/etc/sv/mre
+	cp $startdir/src/run $startdir/pkg/etc/sv/mre/run
+	mkdir -p $startdir/pkg/etc/logrotate.d
+	cp $startdir/src/mre.lr $startdir/pkg/etc/logrotate.d/mre.lr
+	mkdir -p $startdir/pkg/data/srv/http/htdocs/
+	cp -r $startdir/src/scores /$startdir/pkg/data/srv/http/htdocs/
+	chown -R http:users "$startdir/pkg/data/srv/http/htdocs/scores"
+}
+
+
+md5sums=('8ab312e7597ae9413a57bd5e9a068096'
+         'd2591989da512c0faa567408721b6e95'
+         'fcc02a234b22ba5c2714a6b8dbaf3bef'
+         'dea22d4e0f2c1dd8a2debd2f50756dda'
+         '6d71ab57afd974c5130c994b94e8746f')
diff --git a/abs/extra/community/mre/livescores.tgz b/abs/extra/community/mre/livescores.tgz
new file mode 100644
index 0000000..d97175b
Binary files /dev/null and b/abs/extra/community/mre/livescores.tgz differ
diff --git a/abs/extra/community/mre/mre-1.1.2.tar.gz b/abs/extra/community/mre/mre-1.1.2.tar.gz
new file mode 100644
index 0000000..3846e4b
Binary files /dev/null and b/abs/extra/community/mre/mre-1.1.2.tar.gz differ
diff --git a/abs/extra/community/mre/mre.install b/abs/extra/community/mre/mre.install
new file mode 100755
index 0000000..4e3fb0d
--- /dev/null
+++ b/abs/extra/community/mre/mre.install
@@ -0,0 +1,20 @@
+# arg 1:  the new package version
+post_install() {
+	add_service.sh mre
+	sed -i.pacsave '/^open_basedir/s|$|:/var/log/mre:/usr/local/lib/mre|' /etc/php/php.ini
+}
+
+post_upgrade() {
+
+}
+
+
+# arg 1:  the old package version
+post_remove() {
+	remove_service.sh mre
+	sed -i.pacsave '/^open_basedir/s|:/var/log/mre:/usr/local/lib/mre||' /etc/php/php.ini
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/extra/community/mre/mre.lr b/abs/extra/community/mre/mre.lr
new file mode 100644
index 0000000..3b54c23
--- /dev/null
+++ b/abs/extra/community/mre/mre.lr
@@ -0,0 +1,9 @@
+/var/log/mre/mre.log {
+	copytruncate
+	daily
+	size 10M
+	missingok
+	rotate 7
+	compress
+	notifempty
+}
diff --git a/abs/extra/community/mre/patch.diff b/abs/extra/community/mre/patch.diff
new file mode 100644
index 0000000..66390d9
--- /dev/null
+++ b/abs/extra/community/mre/patch.diff
@@ -0,0 +1,273 @@
+--- ../mre-1.1.2/class/MythClient.php.original	2006-04-05 17:39:13.000000000 -0500
++++ ../mre-1.1.2/class/MythClient.php	2010-05-14 10:16:54.000000000 -0500
+@@ -112,7 +112,7 @@
+          return '0';
+       }
+       foreach($out as $line)
+-         if(preg_match('/^Library API version: (.*)$/', $line, $matches))
++         if(preg_match('/^Library API *: (.*)$/', $line, $matches))
+             return $matches[1];
+       return '0';
+    }
+--- ../mre-1.1.2/class/NHLEvent.php.original	2006-11-05 17:06:57.000000000 -0600
++++ ../mre-1.1.2/class/NHLEvent.php	2010-05-21 00:44:49.000000000 -0500
+@@ -27,7 +27,7 @@
+    /**
+     * URL to grab game info from
+     */
+-   const url = 'http://scores.espn.go.com/nhl/scoreboard';
++   const url = 'http://localhost/scores/nhl.php';
+ 
+    /**
+     * Class constructor.
+@@ -39,32 +39,27 @@
+       parent::__construct();
+ 
+       $criteria = $this->generateSearchTerms($gameInfo);
++      
+       if(!sizeof($criteria))
+          trigger_error("Unable to generate valid search terms! [$gameInfo]", E_USER_WARNING);
+       else
+       {
+          $data = file(self::url);
+-         if($data !== FALSE)
+-            foreach($criteria as $term)
+-            {
+-               $status = '';
+-               foreach($data as $line)
+-                  if(preg_match('/' . preg_quote($term) . '/', $line))
+-                  {
+-                     $status = $line;
+-                     break;
+-                  }
+-               if(preg_match('/id.*st"\>(.*)\<\/td/U', $status, $match))
+-               {
+-                  $this->setStatus($match[1]);
+-                  if(preg_match('/^Final/', $match[1]))
+-                     $this->setEventOver(TRUE);
+-                  else
+-                     $this->setEventOver(FALSE);
+-                  $this->setValid(TRUE);
+-                  break;
+-               }
++         if($data)
++         {
++            foreach($data as $line)
++	    {
++               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++	       {
++		  if(strpos($line,'FINAL')) 
++		     $this->setEventOver(TRUE);
++		  else
++		     $this->setEventOver(FALSE);
++		  $this->setValid(TRUE);
++		  break;
++	       }
+             }
++         }
+       }
+       if(!$this->isValid())
+          trigger_error("Unable to find NHL info for '$gameInfo'!  The NHL parser may need to be updated.", E_USER_WARNING);
+--- ../mre-1.1.2/conf/mre.conf.in.original	2006-08-13 16:48:57.000000000 -0500
++++ ../mre-1.1.2/conf/mre.conf.in	2010-05-04 00:25:26.000000000 -0500
+@@ -28,9 +28,9 @@
+ ; *** Application settings
+ ; Unprivledged user to run as, if started as root
+ ; This script will not run as root
+-user = nobody
++user = mythtv
+ ; Run MRE as daemon?  Requires pcntl_* functions built into PHP
+-daemon = true
++daemon = false
+ ; Number of minutes to sleep between runs
+ sleep = 5
+ ; Logging level (0 = normal, 1 = +error, 2 = +warning, 3 = +debug)
+--- ../mre-1.1.2/class/MLBEvent.php.original	2006-11-05 17:06:57.000000000 -0600
++++ ../mre-1.1.2/class/MLBEvent.php	2010-05-21 20:08:30.000000000 -0500
+@@ -27,7 +27,7 @@
+    /**
+     * URL to grab game info from
+     */
+-   const url = 'http://scores.espn.go.com/mlb/scoreboard';
++   const url = 'http://localhost/scores/mlb.php';
+ 
+    /**
+     * Class constructor.
+@@ -43,41 +43,22 @@
+          trigger_error("Unable to generate valid search terms! [$gameInfo]", E_USER_WARNING);
+       else
+       {
+-         $data = file(self::url);
+-         $games = array();
+-         if($data !== FALSE)
+-         {
+-            // Split the huge string into individual game data
+-            foreach($data as $line)
+-               if(preg_match('/\<div id="allGames".*\>.*/', $line))
+-               {
+-                  while(($loc = strrpos($line, 'teamTop')) !== FALSE)
+-                  {
+-                     $games[] = substr($line, $loc);
+-                     $line = substr($line, 0, $loc);
+-                  }
+-                  break;
+-               }
+-            if(!sizeof($games))
+-               trigger_error("Unable to find valid game data within source!", E_USER_WARNING);
+-            foreach($criteria as $term)
+-            {
+-               foreach($games as $game)
+-               {
+-                  if(preg_match('/' . preg_quote($term) . '/', $game))
+-                     if(preg_match('/teamTop.*\>(.*)\<\/td\>/U', $game, $matches))
+-                     {
+-                        $this->setStatus($matches[1]);
+-                        if(preg_match('/^(Final|Postponed)/', $matches[1]))
+-                           $this->setEventOver(TRUE);
+-                        else
+-                           $this->setEventOver(FALSE);
+-                        $this->setValid(TRUE);
+-                        break 2;
+-                     }
+-               }
++	 $data = file(self::url);
++         if($data)
++	 {
++	    foreach($data as $line)
++      	    {
++               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++   	       {
++     		  if((strpos($line,'FINAL'))or(strpos($line,'Postponed'))) 
++ 		     $this->setEventOver(TRUE);
++  		  else
++  		     $this->setEventOver(FALSE);
++  		  $this->setValid(TRUE);
++  		  break;
++  	       }
+             }
+-         }
++	 }
+       }
+       if(!$this->isValid())
+          trigger_error("Unable to find MLB info for '$gameInfo'!  The MLB parser may need to be updated.", E_USER_WARNING);
+--- ../mre-1.1.2/class/NBAEvent.php.original	2006-11-05 17:06:57.000000000 -0600
++++ ../mre-1.1.2/class/NBAEvent.php	2010-05-21 21:15:42.000000000 -0500
+@@ -27,7 +27,7 @@
+    /**
+     * URL to grab game info from
+     */
+-   const url = 'http://scores.espn.go.com/nba/scoreboard';
++   const url = 'http://localhost/scores/nba.php';
+ 
+    /**
+     * Class constructor.
+@@ -44,35 +44,21 @@
+       else
+       {
+          $data = file(self::url);
+-         if($data !== FALSE)
+-            foreach($criteria as $term)
+-            {
+-               $status = '';
+-               $i = 0;
+-               while($i < sizeof($data))
+-               {
+-                  if(preg_match('/' . preg_quote($term) . '/', $data[$i]))
+-                  {
+-                     $status = $data[$i];
+-                     break;
+-                  }
+-                  ++$i;
+-               }
+-               if($i == sizeof($data))
+-                  --$i;
+-
+-               if(preg_match('/id.*clock"\>(.*)\<\/div/U', $data[$i], $match) ||
+-                  preg_match('/id.*clock"\>(.*)\<\/div/U', $data[$i-1], $match))
+-               {
+-                  $this->setStatus($match[1]);
+-                  if(preg_match('/^Final/', $match[1]))
+-                     $this->setEventOver(TRUE);
+-                  else
+-                     $this->setEventOver(FALSE);
+-                  $this->setValid(TRUE);
+-                  break;
+-               }
++         if($data)
++         {
++            foreach($data as $line)
++      	    {
++               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++  	       {
++       		  if(strpos($line,'FINAL')) 
++ 		     $this->setEventOver(TRUE);
++  		  else
++  		     $this->setEventOver(FALSE);
++  		  $this->setValid(TRUE);
++ 		  break;
++  	       }
+             }
++         }
+       }
+       if(!$this->isValid())
+          trigger_error("Unable to find NBA info for '$gameInfo'!  The NBA parser may need to be updated.", E_USER_WARNING);
+--- ../mre-1.1.2/class/NFLEvent.php.original	2006-11-05 17:06:57.000000000 -0600
++++ ../mre-1.1.2/class/NFLEvent.php	2010-05-21 19:09:36.000000000 -0500
+@@ -27,7 +27,7 @@
+    /**
+     * URL to grab game info from
+     */
+-   const url = 'http://scores.espn.go.com/nfl/scoreboard';
++   const url = 'http://localhost/scores/nfl.php';
+ 
+    /**
+     * Class constructor.
+@@ -44,33 +44,21 @@
+       else
+       {
+          $data = file(self::url);
+-         $games = array();
+-         if($data !== FALSE)
+-         {
+-            // Split the huge string into individual game data
+-            foreach($data as $line)
+-               if(preg_match('/\<td class="teamTop.*".*\>.*/', $line))
+-                  $games[] = $line;
+-            if(!sizeof($games))
+-               trigger_error("Unable to find valid game data within source!", E_USER_WARNING);
+-            foreach($criteria as $term)
+-            {
+-               foreach($games as $game)
+-               {
+-                  if(preg_match('/' . preg_quote($term) . '/', $game))
+-                     if(preg_match('/teamTop.*\>(.*)\<\/td\>/U', $game, $matches))
+-                     {
+-                        $this->setStatus($matches[1]);
+-                        if(preg_match('/^(Final|Postponed)/', $matches[1]))
+-                           $this->setEventOver(TRUE);
+-                        else
+-                           $this->setEventOver(FALSE);
+-                        $this->setValid(TRUE);
+-                        break 2;
+-                     }
+-               }
+-            }
+-         }
++	 if($data)
++	 {
++	    foreach($data as $line)
++	    {
++               if((strpos($line,$criteria[0]))&&(strpos($line,$criteria[1])))
++	       {
++		  if(strpos($line,'FINAL'))
++		     $this->setEventOver(TRUE);
++		  else
++		     $this->setEventOver(FALSE);
++		  $this->setValid(TRUE);
++		  break;
++	       }
++	    }
++	 }
+       }
+       if(!$this->isValid())
+          trigger_error("Unable to find NFL info for '$gameInfo'!  The NFL parser may need to be updated.", E_USER_WARNING);
diff --git a/abs/extra/community/mre/run b/abs/extra/community/mre/run
new file mode 100755
index 0000000..84d08e5
--- /dev/null
+++ b/abs/extra/community/mre/run
@@ -0,0 +1,10 @@
+#!/bin/bash
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+stat_runit "Starting mythrecordingextender"
+
+sv start mythbackend || exit 1
+sleep 5
+
+exec /usr/local/bin/mre.php
diff --git a/abs/extra/community/mythpywii/CONTROLS b/abs/extra/community/mythpywii/CONTROLS
new file mode 100644
index 0000000..d733964
--- /dev/null
+++ b/abs/extra/community/mythpywii/CONTROLS
@@ -0,0 +1,25 @@
+    * Keypad : same as keypad on keyboard
+    * A : Enter (Accept, OK, next, .)
+    * Minus (-) : d (Delete)
+    * Home : escape (Exit to previous menu/exit mythfrontend)
+    * Plus (+) : p (Play/pause)
+    * 1 : Info
+    * 2 : Menu
+    * B + left : rewind to beginning of video
+    * B + twist wiimote : rewind (if twisted to the left) or fastforward
+      (otherwise) with speed dependant on twist amount.
+    * B + A + twist wiimote: timestretching . slower (if twisted left) or
+      faster (if twisted right)
+
+A comment on twisting:
+Point the wii remote at the screen, and twist from the elbow so that it
+ continues to point at the screen.
+
+The maximum fastforward/rewind speed is 180x. The speeds are dictated by
+mythfrontend itself. When you rotate the wiimote, you will feel a slight
+vibration (0.05 seconds) to let you know you have gone up or down a speed
+segment. To stop fastforwarding/rewinding, simply let go of B.
+
+Beware: there is no power saving built in. However you should be able to
+turn the wiimote off (power button) when not in use, and turn it back on
+by holding down 1 and 2 to make it sync.
diff --git a/abs/extra/community/mythpywii/PKGBUILD b/abs/extra/community/mythpywii/PKGBUILD
index 4b57c77..38e456f 100644
--- a/abs/extra/community/mythpywii/PKGBUILD
+++ b/abs/extra/community/mythpywii/PKGBUILD
@@ -2,17 +2,27 @@
 # Maintainer: Cecil Watson<knoppmyth@gmail.com>
 
 pkgname=mythpywii
-pkgver=1
-pkgrel=1
+pkgver=17
+pkgrel=8
 pkgdesc="Control MythTV using Wiimote."
 arch=('i686' 'x86_64')
 license=('GPL2')
 url="http://www.benjiegillam.com/"
 depends=('bluez' 'python-pybluez' 'cwiid-svn')
-#install=mythpywii.install
-source=(http://www.benjiegillam.com/code/myth_py_wii.py)
+install=mythpywii.install
+source=(http://www.benjiegillam.com/code/myth_py_wii.py \
+        wiimote.rules mythpywii.install CONTROLS)
 
 build() {
-  mkdir -p $startdir/pkg/usr/bin
-  install -D -m 755 myth_py_wii.py $startdir/pkg/usr/bin
+  install -D -m755 ${srcdir}/myth_py_wii.py ${startdir}/pkg/usr/bin/myth_py_wii.py || return 1
+  install -D -m644 ${srcdir}/wiimote.rules ${startdir}/pkg/etc/udev/rules.d/z90-wiimote.rules || return 1
+  install -d -o mythtv -g mythtv ${startdir}/pkg/home/mythtv/.cwiid/wminput || return 1
+  install -D -m755 -o mythtv -g mythtv /etc/cwiid/wminput/{acc_led,buttons,gamepad,neverball,nunchuk_stick2btn,acc_ptr,ir_ptr,nunchuk_acc_ptr} ${startdir}/pkg/home/mythtv/.cwiid/wminput || return 1
+  install -D -m644 ${srcdir}/CONTROLS ${startdir}/pkg/usr/share/docs/mythpywii/CONTROLS || return 1
+  cd ${startdir}/pkg/home/mythtv/.cwiid/wminput
+  ln -s acc_led default
 }
+md5sums=('5bd5e1bb9c4cbfabbffdb28ff616e83b'
+         '0d817a971d414b9320587a4cf289386b'
+         '64fa8dbd324dac68f71753ebd828d358'
+         '0872cbdb3def3dd9aa2b97b191ad76d8')
diff --git a/abs/extra/community/mythpywii/mythpywii.install b/abs/extra/community/mythpywii/mythpywii.install
new file mode 100644
index 0000000..8d0b867
--- /dev/null
+++ b/abs/extra/community/mythpywii/mythpywii.install
@@ -0,0 +1,59 @@
+post_install() {
+    . /home/mythtv/.mythtv/mysql.txt
+    # Enable the Network Remote Control Interface for use with the wiimote.
+    # Get local machine's hostname
+      HOST=`cat /etc/hostname`
+    # Update mysql for Network Remote Control Support
+      mysql -u mythtv -pmythtv --host=${DBHostName} mythconverg -e \
+        "UPDATE settings SET data = '1' WHERE value = 'NetworkControlEnabled' AND hostname = '${HOST}'";
+      echo "------------------------------------------------------------"
+      echo "myth_py_wii.py expects the Network Control Port to be set to"
+      echo "mythtv's default port of 6546.  It will not work if you have"
+      echo "changed it to something else."
+      echo "------------------------------------------------------------"
+    # Add myth_py_wii.py to ~/mythtv/.fluxbox/apps before LinHES-run
+      sed -i '/LinHES-run/ i [startup] {/usr/bin/myth_py_wii.py >/dev/null}' /home/mythtv/.fluxbox/apps
+    # udev needs to pick up our new rule for the mythpywii.
+      udevadm trigger --subsystem-match="misc" --subsystem-match="bluetooth"
+    # Add the uinput module
+      modprobe uinput
+    # Ensure this module is loaded across reboots
+      echo "# uinput is needed by mythpywii" >> /etc/modules.mythvantage
+      echo "uinput" >> /etc/modules.mythvantage
+    # Bring up the bluetooth interface -- udev will do this after reboot
+      /usr/sbin/hciconfig hci0 up
+    # Punting on the multiple bluetooth adapter question.
+      echo "It is assumed your bluetooth adapter will be hci0."
+      echo "If you have more than one bluetooth adapter, you"
+      echo "may need to edit /etc/udev/rules.d/z90-wiimote.rules"
+    echo "--------------------------------------------------------------"
+    echo "--------------------------------------------------------------"
+    # Unfortunately there does not seem to be a way to do this without
+    # the user manually intervening.
+    echo "To use your wiimote you will need to restart the frontend service."
+    echo "$ sudo sv restart frontend"
+    echo "or simply reboot your machine."
+    echo "--------------------------------------------------------------"
+    echo "--------------------------------------------------------------"
+    echo "After frontend restart, you should now be able to pair your"
+    echo "Wiimote with your bluetooth adapter by pressing 1 & 2 at the"
+    echo "same time.  After a few seconds the wiimote should vibrate and the"
+    echo "LEDs will show [ # . . # ] where # is on and . is off."
+    echo "--------------------------------------------------------------"
+    echo "See /usr/share/docs/mythpywii/CONTROLS for more information."
+    echo "--------------------------------------------------------------"
+}
+
+post_remove() {
+    . /home/mythtv/.mythtv/mysql.txt
+    # kill myth_py_wii.py
+      WIIPID=`pidof -o %PPID /usr/bin/myth_py_wii.py`
+        [ -n "$WIIPID" ] && kill $WIIPID
+    # Remove uinput
+      sed -i '/uinput/d' /etc/modules.mythvantage
+    # Remove line in .fluxbox/apps
+      sed -i '/myth_py_wii.py/d' /home/mythtv/.fluxbox/apps
+    # Remove network remote control support
+      mysql -u mythtv -pmythtv --host=${DBHostName} mythconverg -e \
+        "UPDATE settings SET data = '0' WHERE value = 'NetworkControlEnabled' AND hostname = '${HOST}'";
+}
diff --git a/abs/extra/community/mythpywii/wiimote.rules b/abs/extra/community/mythpywii/wiimote.rules
new file mode 100644
index 0000000..4bb2d9d
--- /dev/null
+++ b/abs/extra/community/mythpywii/wiimote.rules
@@ -0,0 +1,6 @@
+# For Bluetooth/Wiimote
+  KERNEL=="uinput", MODE="0660", GROUP="mythtv"
+
+# Automaticly bring up/down the bluetooth interface
+  ACTION=="add", KERNEL=="hci%n", SUBSYSTEM=="bluetooth", RUN+="/usr/sbin/hciconfig hci%n up"
+  ACTION=="remove", KERNEL=="hci%n", SUBSYSTEM=="bluetooth", RUN+="/usr/sbin/hciconfig hci%n down"
diff --git a/abs/extra/community/network-ups-tools/PKGBUILD b/abs/extra/community/network-ups-tools/PKGBUILD
new file mode 100644
index 0000000..1644c2e
--- /dev/null
+++ b/abs/extra/community/network-ups-tools/PKGBUILD
@@ -0,0 +1,53 @@
+# $Id: PKGBUILD 12757 2010-03-13 04:22:57Z dgriffiths $
+# Maintainer: Roman Kyrylych <roman@archlinux.org>
+# Contributor: Giuseppe Lucarelli <luk@rebelsoft.org>
+
+pkgname=network-ups-tools
+pkgver=2.4.3
+pkgrel=5
+pkgdesc="NUT is a collection of programs for monitoring and administering UPS hardware"
+arch=('i686' 'x86_64')
+url="http://www.networkupstools.org/"
+license=('GPL2')
+depends=('openssl' 'hal' 'gd')
+makedepends=('libusb')
+backup=(etc/ups/{ups.conf,upsd.conf,upsd.users,upsmon.conf,upssched.conf})
+install=nut.install
+source=(http://www.networkupstools.org/source/2.4/nut-$pkgver.tar.gz run.upsd finish.upsd)
+options=('!emptydirs' '!libtool')
+
+build() {
+cd $srcdir/nut-$pkgver
+./configure --with-user=nut \
+--prefix=/usr \
+--datadir=/usr/share/ups \
+--sysconfdir=/etc/ups \
+--with-group=nut \
+--with-hal \
+--with-usb \
+--with-cgi \
+--with-cgipath=/usr/share/webapps/nut \
+--with-htmlpath=/usr/share/webapps/nut \
+--with-udev-dir=/etc/udev || return 1
+
+  make || return 1
+  make DESTDIR=$pkgdir install
+  #ugly hack because --with-pkgconfig-dir doesn't work
+  install -D -m644 lib/libupsclient.pc $pkgdir/usr/lib/pkgconfig
+
+  install -D -m644 conf/ups.conf.sample $pkgdir/etc/ups/ups.conf
+  install -D -m640 conf/upsd.conf.sample $pkgdir/etc/ups/upsd.conf
+  install -D -m640 conf/upsd.users.sample $pkgdir/etc/ups/upsd.users
+  install -D -m640 conf/upsmon.conf.sample $pkgdir/etc/ups/upsmon.conf
+  install -D -m644 conf/upssched.conf.sample $pkgdir/etc/ups/upssched.conf
+  install -D -m755 ../run.upsd $pkgdir/etc/sv/upsd/run || return 1
+  install -D -m755 ../finish.upsd $pkgdir/etc/sv/upsd/finish || return 1
+
+  # Fix udev rules
+  sed -i "s|SYSFS|ATTRS|g" $pkgdir/etc/udev/rules.d/52-nut-usbups.rules
+  install -dm755 ${pkgdir}/lib
+  mv ${pkgdir}/etc/udev ${pkgdir}/lib
+}
+md5sums=('6f893b61b07915e7a139324fa3f79121'
+         'd7af81650a966660f6fd41f957c66165'
+         'd50f13385848a9bb8f8cbc9ee5dd9fd5')
diff --git a/abs/extra/community/network-ups-tools/finish.upsd b/abs/extra/community/network-ups-tools/finish.upsd
new file mode 100644
index 0000000..8eb335b
--- /dev/null
+++ b/abs/extra/community/network-ups-tools/finish.upsd
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/upsd`
+     stat_runit "Stopping UPSd Daemon"
+     /usr/bin/upsdrvctl stop &> /dev/null
+     /usr/sbin/upsmon -c stop &> /dev/null
+     [ ! -z "$PID" ] && kill $PID &> /dev/null
+     if [ $? -gt 0 ]; then
+       stat_fail
+     else
+       rm_daemon upsd
+       stat_done
+     fi
diff --git a/abs/extra/community/network-ups-tools/nut.install b/abs/extra/community/network-ups-tools/nut.install
new file mode 100644
index 0000000..1e6beee
--- /dev/null
+++ b/abs/extra/community/network-ups-tools/nut.install
@@ -0,0 +1,21 @@
+post_install() {
+  groupadd -g 55 nut &> /dev/null
+  useradd -u 55 -g nut -G tty -d /var/state/ups -s /bin/false nut >/dev/null 2>&1
+  mkdir -p /var/state/ups/
+  chmod 0770 /var/state/ups/
+  chown root:nut /var/state/ups/
+  chown root:nut /etc/ups/upsd.conf /etc/ups/upsd.users /etc/ups/upsmon.conf
+  echo ">>> Before starting your UPSd daemon, it is imperative"
+  echo ">>> that you read through and edit where needed these files:"
+  echo ">>> /etc/ups/{ups.conf,upsd.conf,upsmon.conf,upsd.users}"
+  echo ">>>"
+  echo ">>> Then add the the upsd service:"
+  echo ">>> $ sudo add_service.sh upsd"
+}
+
+pre_remove() {
+  remove_service.sh upsd
+  userdel nut >/dev/null 2>&1
+  groupdel nut >/dev/null 2>&1
+  rm -rf /var/state/ups/
+}
diff --git a/abs/extra/community/network-ups-tools/run.upsd b/abs/extra/community/network-ups-tools/run.upsd
new file mode 100644
index 0000000..83be88d
--- /dev/null
+++ b/abs/extra/community/network-ups-tools/run.upsd
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/upsd`
+
+    stat_runit "Starting UPSd Daemon"
+    /usr/bin/upsdrvctl start &> /dev/null
+    [ -z "$PID" ] && /usr/sbin/upsd &>/dev/null
+    /usr/sbin/upsmon &>/dev/null
+    if [ $? -gt 0 ]; then
+       stat_fail
+    else
+       add_daemon upsd
+       stat_done
+   fi
+
+   while [ -n $PID ] ; do
+   sleep 60
+   done
diff --git a/abs/extra/community/peardb/PKGBUILD b/abs/extra/community/peardb/PKGBUILD
new file mode 100755
index 0000000..dafe00f
--- /dev/null
+++ b/abs/extra/community/peardb/PKGBUILD
@@ -0,0 +1,22 @@
+arch=('i686')
+pkgname=PearDB
+pkgver=1.7.13
+pkgrel=1
+_kernver=2.6.28-LinHES
+pkgdesc="Pear Database Abstraction Layer"
+url="http://pear.php.net/"
+license=('GPL-2')
+source=('http://download.pear.php.net/package/DB-1.7.13.tgz')
+#install=('')
+
+build() {
+	mkdir -p $startdir/pkg/usr/share/pear/
+	cp -r $startdir/src/DB-$pkgver/DB* $startdir/pkg/usr/share/pear/
+	mkdir -p $startdir/pkg/usr/share/pear/docs/DB/
+	cp -r $startdir/src/DB-$pkgver/doc/* $startdir/pkg/usr/share/pear/docs/DB/
+	mkdir -p $startdir/pkg/usr/share/pear/tests/DB/
+	cp -r $startdir/src/DB-$pkgver/tests/* $startdir/pkg/usr/share/pear/tests/DB/
+
+	}
+
+md5sums=('39b451245941a7059511a852f18b4946')
diff --git a/abs/extra/community/pearlog/PKGBUILD b/abs/extra/community/pearlog/PKGBUILD
new file mode 100755
index 0000000..5bc4ccc
--- /dev/null
+++ b/abs/extra/community/pearlog/PKGBUILD
@@ -0,0 +1,25 @@
+arch=('i686')
+pkgname=PearLog
+pkgver=1.12.0
+pkgrel=1
+_kernver=2.6.28-LinHES
+pkgdesc="Pear Logging Framework"
+url="http://pear.php.net/"
+license=('GPL-2')
+source=('http://download.pear.php.net/package/Log-1.12.0.tgz')
+#install=('')
+
+build() {
+	mkdir -p $startdir/pkg/usr/share/pear/
+	cp -r $startdir/src/Log-$pkgver/Log* $startdir/pkg/usr/share/pear/
+	mkdir -p $startdir/pkg/usr/share/pear/docs/Log
+	cp -r $startdir/src/Log-$pkgver/docs/* $startdir/pkg/usr/share/pear/docs/Log/
+	mkdir -p $startdir/pkg/usr/share/pear/examples/Log
+	cp -r $startdir/src/Log-$pkgver/examples/* $startdir/pkg/usr/share/pear/examples/Log/
+	mkdir -p $startdir/pkg/usr/share/pear/misc/Log
+	cp -r $startdir/src/Log-$pkgver/misc/* $startdir/pkg/usr/share/pear/misc/Log/
+	mkdir -p $startdir/pkg/usr/share/pear/tests/Log
+	cp -r $startdir/src/Log-$pkgver/tests/* $startdir/pkg/usr/share/pear/tests/Log/
+	}
+
+md5sums=('7fe68920afc4b122cb15aba40d735cb6')
diff --git a/abs/extra/community/powernowd/PKGBUILD b/abs/extra/community/powernowd/PKGBUILD
new file mode 100644
index 0000000..f784523
--- /dev/null
+++ b/abs/extra/community/powernowd/PKGBUILD
@@ -0,0 +1,28 @@
+# Contributor: kastor <kastor@fobos.org.ar>
+
+pkgname=powernowd
+pkgver=1.00
+pkgrel=2
+pkgdesc="Program for powering down CPUs dynamicly"
+arch=('i686' 'x86_64')
+url="http://www.deater.net/john/powernowd.html"
+license="GPL"
+depends=('glibc')
+source=(http://www.deater.net/john/$pkgname-$pkgver.tar.gz \
+        run finish powernowd.install powernowd.conf.d)
+install=($pkgname.install)
+
+build() {
+  cd $startdir/src/$pkgname-$pkgver
+  make || return 1
+  install -D -m755 powernowd $startdir/pkg/usr/sbin/powernowd || return 1
+  mkdir -p $startdir/pkg/etc/sv/powernowd || return 1
+  install -D -m755 $startdir/src/run $startdir/pkg/etc/sv/powernowd || return 1
+  install -D -m755 $startdir/src/finish $startdir/pkg/etc/sv/powernowd || return 1
+  install -D -m644 $startdir/src/powernowd.conf.d $startdir/pkg/etc/conf.d/powernowd || return 1
+}
+md5sums=('abc48b690d104e9e71a85400ba19d799'
+         'ffd9b939665f74dac2220b4311482e04'
+         '13c6591ffc27d0b16f41f7892671302f'
+         'dcbf8e98425b208c29f4c06b687dd0d0'
+         'c9385af22c7c74e6cd6bdc982f94644f')
diff --git a/abs/extra/community/powernowd/finish b/abs/extra/community/powernowd/finish
new file mode 100644
index 0000000..97e3034
--- /dev/null
+++ b/abs/extra/community/powernowd/finish
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# AUR Credits:
+# simple init script the ARCH-way for Powernowd
+# Made by, CyberTron, packages@linuxportalen.com
+
+# Modifications by Alexander Baldeck <alexander@archlinux.org>
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/powernowd`
+
+[ -f /etc/conf.d/powernowd ] && source /etc/conf.d/powernowd
+
+        stat_runit "Stopping Powernowd"
+        [ ! -z "$PID" ]  && kill $PID &> /dev/null
+        if [ $? -gt 0 ]; then
+            stat_fail
+        else
+            rm /var/run/powernowd.pid
+            rm_daemon powernowd
+            stat_done
+        fi
diff --git a/abs/extra/community/powernowd/powernowd.conf.d b/abs/extra/community/powernowd/powernowd.conf.d
new file mode 100644
index 0000000..287c2bc
--- /dev/null
+++ b/abs/extra/community/powernowd/powernowd.conf.d
@@ -0,0 +1,6 @@
+# Configuration file for powernowd
+
+# If no options given, powernowd should be able to autodetect
+# a sane setup. So most users will not have to put anything
+# here.
+OPTIONS="-d"
diff --git a/abs/extra/community/powernowd/powernowd.install b/abs/extra/community/powernowd/powernowd.install
new file mode 100644
index 0000000..af218af
--- /dev/null
+++ b/abs/extra/community/powernowd/powernowd.install
@@ -0,0 +1,19 @@
+post_install() {
+  add_service.sh powernowd
+
+  echo "Be sure to modprobe the proper module for your CPU and then add it
+  echo "to /etc/rc.conf in the MODULES section."
+  echo "i.e. for a Core2Duo modprobe/add acpi_cpufreq"
+  echo "Then restart the powernowd service: sudo sv restart powernowd"
+}
+
+post_upgrade() {
+  echo "Be sure to modprobe the proper module for your CPU and then add it
+  echo "to /etc/rc.conf in the MODULES section."
+  echo "i.e. for a Core2Duo modprobe/add acpi_cpufreq"
+  echo "Then restart the powernowd service: sudo sv restart powernowd"
+}
+
+pre_remove() {
+  remove_service.sh powernowd
+}
diff --git a/abs/extra/community/powernowd/run b/abs/extra/community/powernowd/run
new file mode 100644
index 0000000..0e83b98
--- /dev/null
+++ b/abs/extra/community/powernowd/run
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# AUR Credits:
+# simple init script the ARCH-way for Powernowd
+# Made by, CyberTron, packages@linuxportalen.com
+
+# Modifications by Alexander Baldeck <alexander@archlinux.org>
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/powernowd`
+
+[ -f /etc/conf.d/powernowd ] && source /etc/conf.d/powernowd
+
+        stat_runit "Starting Powernowd"
+        [ -z "$PID" ] && /usr/sbin/powernowd $OPTIONS 2>/dev/null
+        if [ $? -gt 0 ]; then
+            stat_fail
+        else
+        echo $PID > /var/run/powernowd.pid
+            add_daemon powernowd
+            stat_done
+        fi
diff --git a/abs/extra/community/squeezeboxserver/PKGBUILD b/abs/extra/community/squeezeboxserver/PKGBUILD
new file mode 100644
index 0000000..45db11f
--- /dev/null
+++ b/abs/extra/community/squeezeboxserver/PKGBUILD
@@ -0,0 +1,34 @@
+# Contributor: Anton Prins <uar at prinsonline dot demon dot nl>
+
+pkgname=squeezeboxserver
+pkgver=7.4.1
+pkgrel=1
+pkgdesc="Powerful streaming audio server from Slim Devices"
+depends=(
+# unknown to me, default arch install + openssh handles it
+        )
+
+source=(http://downloads.slimdevices.com/SqueezeboxServer_v${pkgver}/squeezeboxserver-${pkgver}.tgz
+        $pkgname.rc
+        $pkgname.conf.d
+        )
+
+url="http://www.slimdevices.com/pi_features.html"
+license=('GPL')
+arch=('i686' 'x86_64')
+install=squeezeboxserver.install
+
+#not sure how to handle the build number -28947?
+build() {
+cd $startdir/src/squeezeboxserver-${pkgver}-28947 || return 1
+
+mkdir -p $startdir/pkg/home/squeezeboxserver || return 1
+cp -a * $startdir/pkg/home/squeezeboxserver || return 1
+install -D -m755 ../squeezeboxserver.rc $startdir/pkg/etc/rc.d/squeezeboxserver || return 1
+install -D -m644 ../squeezeboxserver.conf.d $startdir/pkg/etc/conf.d/squeezeboxserver || return 1
+mkdir $startdir/pkg/home/squeezeboxserver/prefs
+}
+
+md5sums=('fa65636e7df75ae7af884a2efa184639'
+         '5e57982c257797badbf72c2ae04994f7'
+         'aa65896541958e119e63ee7c96be39af')
diff --git a/abs/extra/community/squeezeboxserver/squeezeboxserver.conf.d b/abs/extra/community/squeezeboxserver/squeezeboxserver.conf.d
new file mode 100644
index 0000000..d14a2e9
--- /dev/null
+++ b/abs/extra/community/squeezeboxserver/squeezeboxserver.conf.d
@@ -0,0 +1,7 @@
+# Configuration file for SqueezeCenter on Arch Linux.
+# Save this as /etc/conf.d/squeezeboxserver
+
+# Enter space-delimited options on the following line.
+# e.g. SQUEEZEBOXSERVER_OPTS="--diag --d_scan --d_command"
+# See "/home/squeezeboxserver/slimserver.pl --help" for a full list of possible options.
+SQUEEZEBOXSERVER_OPTS=""
diff --git a/abs/extra/community/squeezeboxserver/squeezeboxserver.install b/abs/extra/community/squeezeboxserver/squeezeboxserver.install
new file mode 100644
index 0000000..058de02
--- /dev/null
+++ b/abs/extra/community/squeezeboxserver/squeezeboxserver.install
@@ -0,0 +1,56 @@
+post_install() {
+echo -n "adding squeezeboxserver user... "
+useradd -c "SqueezeBoxServer" -g users -s /bin/false squeezeboxserver && echo "done."
+passwd -l squeezeboxserver &>/dev/null
+
+chown -R squeezeboxserver:users /home/squeezeboxserver
+
+install -o squeezeboxserver -d /var/cache/squeezeboxserver
+touch /var/log/squeezeboxserver.log
+chown squeezeboxserver:users /var/log/squeezeboxserver.log
+
+cat << 'EOM'
+
+==> SqueezeBoxServer uses MySQL instead of sqlite. If you have MySQL up and running
+==> you can configure SqueezeBoxServer to use that server as described here:
+==> http://wiki.slimdevices.com/index.php/ExistingMySQLInstance 
+
+==> PLEASE NOTE: SqueezeBoxServer should always be run as the user 'squeezeboxserver'.
+==> This is easily done by adding squeezeboxserver to the DAEMONS array in rc.conf,
+==> after network and mysql.
+
+==> Additional run-time options can be added to /etc/conf.d/squeezeboxserver.
+==> Please refer to "/home/squeezeboxserver/slimserver.pl --help" for full details.
+
+EOM
+}
+
+post_upgrade() {
+chown -R squeezeboxserver:users /home/squeezeboxserver
+
+cat << 'EOM'
+
+==> SqueezeBoxServer uses MySQL instead of sqlite. If you have MySQL up and running
+==> you can configure SqueezeBoxServer to use that server as described here:
+==> http://wiki.slimdevices.com/index.php/ExistingMySQLInstance 
+
+EOM
+}
+
+pre_remove() {
+# pre_remove gets called whenever post_remove is defined.
+true
+}
+
+post_remove() {
+# post_remove doesn't start at a newline like the other post_* functions,
+# so we'll have to make one for ourselves.
+echo -n -e "\nremoving squeezeboxserver user... "
+userdel squeezeboxserver && echo "done."
+
+rm -r /var/cache/squeezeboxserver /var/log/squeezeboxserver.log
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/extra/community/squeezeboxserver/squeezeboxserver.rc b/abs/extra/community/squeezeboxserver/squeezeboxserver.rc
new file mode 100644
index 0000000..d33db16
--- /dev/null
+++ b/abs/extra/community/squeezeboxserver/squeezeboxserver.rc
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# source application-specific settings
+[ -f /etc/conf.d/squeezeboxserver ] && . /etc/conf.d/squeezeboxserver
+
+# general config
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+squeezehome=/home/squeezeboxserver
+pidfile=/var/run/squeezeboxserver.pid
+logfile=/var/log/squeezeboxserver.log
+prefsdir=/home/squeezeboxserver/prefs
+cachedir=/var/cache/squeezeboxserver
+
+
+case "$1" in
+  start)
+    stat_busy "Starting SqueezeBoxServer"
+    cd $squeezehome
+    ./slimserver.pl --daemon --user squeezeboxserver --prefsdir $prefsdir \
+    --cachedir $cachedir --pidfile $pidfile --logfile $logfile $SQUEEZEBOXSERVER_OPTS 
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      add_daemon squeezeboxserver
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping SqueezeBoxServer"
+    kill `cat $pidfile` &>/dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon squeezeboxserver
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 3
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"  
+esac
diff --git a/abs/extra/community/transmission-cli/PKGBUILD b/abs/extra/community/transmission-cli/PKGBUILD
index a3791fc..40af42a 100644
--- a/abs/extra/community/transmission-cli/PKGBUILD
+++ b/abs/extra/community/transmission-cli/PKGBUILD
@@ -3,33 +3,39 @@
 # Contributor: Alessio 'mOLOk' Bolognino <themolok@gmail.com>
 
 pkgname=transmission-cli
-pkgver=1.42
+pkgver=2.04
 pkgrel=1
 pkgdesc="Fast, easy, and free BitTorrent client (CLI tools, daemon and web client)"
 arch=('i686' 'x86_64')
 url="http://www.transmissionbt.com/"
 license=('MIT')
-depends=('curl')
+depends=('curl' 'libevent')
 makedepends=('intltool')
 replaces=('transmission')
 backup=('etc/conf.d/transmissiond')
 install=transmission-cli.install
 source=(http://mirrors.m0k.org/transmission/files/transmission-$pkgver.tar.bz2
-        transmissiond
+        run.transmissiond
+        transmission-cli.install
+        transmission.include
         transmissiond.conf)
-md5sums=('c083bdcb01426466e80ee339bccd9351'
-         'e2326d412e25b4449ff663a5d4015e1a'
-         '7b019a710493ec4f8b54a1f528e1981d')
 
 build() {
   cd "$srcdir/transmission-$pkgver"
 
-  ./configure --prefix=/usr --disable-gtk --disable-wx || return 1
+  ./configure --prefix=/usr --disable-gtk || return 1
   make || return 1
   make DESTDIR="$pkgdir" install || return 1
 
-  install -D -m755 "$srcdir/transmissiond" "$pkgdir/etc/rc.d/transmissiond" || return 1
+  mkdir -p -m744 "$pkgdir/etc/sv/transmissiond" || return 1
+  mkdir -p -m777 "$pkgdir/myth/transmission" || return 1
+  install -D -m755 "$srcdir/run.transmissiond" "$pkgdir/etc/sv/transmissiond/run" || return 1
   install -D -m644 "$srcdir/transmissiond.conf" "$pkgdir/etc/conf.d/transmissiond" || return 1
-
+  install -D -m644 "$srcdir/transmission.include" "$pkgdir/etc/transmission/transmission.include" || return 1
   install -D -m644 COPYING "$pkgdir/usr/share/licenses/transmission-cli/COPYING" || return 1
 }
+md5sums=('84fe15eb7e000fdc369def513299358b'
+         'b91534aaf2e403331c611c615ab2c03d'
+         'ff22c13dbd52565f9e88b1de22514eb9'
+         'b5a49ea375333cd0fee40f70dbac4c2e'
+         'd05567c7a4f9df9f28602d1356d5c05c')
diff --git a/abs/extra/community/transmission-cli/run.transmissiond b/abs/extra/community/transmission-cli/run.transmissiond
new file mode 100755
index 0000000..714c946
--- /dev/null
+++ b/abs/extra/community/transmission-cli/run.transmissiond
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/transmissiond
+
+CONFIGDIR=/home/$TRANS_USER/.config/transmission-daemon
+PID=`pidof -o %PPID /usr/bin/transmission-daemon`
+# Update the block lists - try to keep the bad guys out.
+          cd ${CONFIGDIR}/blocklists
+          if [ $? -eq 0 ]; then
+             find . -mtime +4 -type f -name level1 -exec rm {} \;
+             if [ ! -f ${CONFIGDIR}/blocklists/level1 ]; then
+                # update blocklist
+               # echo "updating blocklist, ~4MB"
+                wget -q -O level1.gz http://download.m0k.org/transmission/files/level1.gz
+                if [ -f level1.gz ]; then
+                  gunzip level1.gz
+                  if [ $? -eq 0 ]; then
+                    chmod go+r level1
+                  else
+                    rm -f level1*
+                  fi
+                fi
+             fi
+             cd - 2>&1 >/dev/null
+          fi
+    stat_runit "Starting Transmission Daemon"
+    [ -z "$PID" ] && exec su -l -c "/usr/bin/nice -n 19 /usr/bin/transmission-daemon $TRANS_OPTS" $TRANS_USER 2>/dev/null
diff --git a/abs/extra/community/transmission-cli/transmission-cli.install b/abs/extra/community/transmission-cli/transmission-cli.install
index cb6bf60..088ecc6 100644
--- a/abs/extra/community/transmission-cli/transmission-cli.install
+++ b/abs/extra/community/transmission-cli/transmission-cli.install
@@ -1,9 +1,28 @@
 post_install() {
+  /bin/echo 'include "/etc/transmission/transmission.include"' >> /etc/lighttpd/conf.include
+  killall -HUP lighttpd  
+
+  add_service.sh transmissiond
+
   cat << _EOF
 
-  If you want to run the Transmission daemon at boot,
-  add transmissiond to the DAEMONS array in /etc/rc.conf.
-  You have to set the user in /etc/conf.d/transmissiond.
+  You can edit the user and options in /etc/conf.d/transmissiond.
+
+  To access the web interface:
+  http://localhost/transmission
+
+  Configuration file editing information can be found at:
+  http://trac.transmissionbt.com/wiki/ConfigFiles
 
 _EOF
+
+}
+
+pre_upgrade() {
+  rm -f /usr/share/man/man1/transmission*
+
+}
+
+pre_remove() {
+  remove_service.sh transmissiond
 }
diff --git a/abs/extra/community/transmission-cli/transmission.include b/abs/extra/community/transmission-cli/transmission.include
new file mode 100644
index 0000000..5cbf399
--- /dev/null
+++ b/abs/extra/community/transmission-cli/transmission.include
@@ -0,0 +1,15 @@
+#Redirect from /transmission to /transmission/web
+url.rewrite-once += ( "^/transmission[/]?$" => "/transmission/web" )
+$HTTP["url"] =~ "^/transmission/" {
+  #Serve static files from /usr/share/transmission
+  server.document-root = "/usr/share/"
+  #Forward RPC requests to the Transmission daemon
+  proxy.server = (
+    "/transmission/rpc" => (
+      (
+        "host" => "127.0.0.1",
+        "port" => 9091
+      )
+    )
+  )
+}
diff --git a/abs/extra/community/transmission-cli/transmissiond.conf b/abs/extra/community/transmission-cli/transmissiond.conf
index 8f1275b..d642c01 100644
--- a/abs/extra/community/transmission-cli/transmissiond.conf
+++ b/abs/extra/community/transmission-cli/transmissiond.conf
@@ -1 +1,2 @@
-TRANS_USER=""
+TRANS_USER="mythtv"
+TRANS_OPTS="-f -ep -w /myth/transmission"
diff --git a/abs/extra/conky/PKGBUILD b/abs/extra/conky/PKGBUILD
index 726f426..0b27d0b 100644
--- a/abs/extra/conky/PKGBUILD
+++ b/abs/extra/conky/PKGBUILD
@@ -3,8 +3,8 @@
 # Contributor: MrGreen <mrgreen.linuxuser@gmail.com>
 
 pkgname=conky
-pkgver=1.6.1
-pkgrel=2
+pkgver=1.8.0
+pkgrel=1
 pkgdesc="Conky is an advanced, highly configurable system monitor for X based on torsmo"
 arch=('i686' 'x86_64')
 url="http://conky.sourceforge.net/"
@@ -13,7 +13,6 @@ replaces=('torsmo')
 depends=('libxext' 'libxml2' 'curl' 'wireless_tools' 'libxft' 'glib2' 'libxdamage')
 makedepends=('pkgconfig')
 source=(http://downloads.sourceforge.net/sourceforge/conky/$pkgname-$pkgver.tar.bz2)
-md5sums=('b2839f21cec18e5eaa338c7440a1ba28')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -27,3 +26,4 @@ build() {
   install -D -m644 COPYING $startdir/pkg/usr/share/licenses/$pkgname/COPYING
 }
 
+md5sums=('494cbaf1108cfdb977fc80454d9b13e2')
diff --git a/abs/extra/cpufreqd/PKGBUILD b/abs/extra/cpufreqd/PKGBUILD
new file mode 100644
index 0000000..fd6d544
--- /dev/null
+++ b/abs/extra/cpufreqd/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 60269 2009-12-02 16:30:29Z giovanni $
+# Maintainer: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: Kevin Piche <kevin@archlinux.org>
+# Contributor: Manolis Tzanidakis <manolis@archlinux.org>
+
+pkgname=cpufreqd
+pkgver=2.4.2
+pkgrel=1
+pkgdesc="A small daemon to adjust cpu speed (and indeed voltage)"
+arch=('i686' 'x86_64')
+url="http://sourceforge.net/projects/cpufreqd"
+license=('GPL2')
+depends=('cpufrequtils')
+install="$pkgname.install"
+backup=(etc/cpufreqd.conf)
+options=('!libtool')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.bz2
+	'cpufreqd')
+
+build() {
+  cd $srcdir/$pkgname-$pkgver
+  ./configure --prefix=/usr \
+    --sysconfdir=/etc
+  make || return 1
+  make DESTDIR=$pkgdir install
+
+  install -D -m 755 $srcdir/cpufreqd $pkgdir/etc/rc.d/cpufreqd || return 1
+}
+md5sums=('2ca80a77849c9a69b81e27c1843c97f5'
+         'ae7b0ec1e8e9f9e7f05fb83749af4ed4')
diff --git a/abs/extra/cpufreqd/cpufreqd b/abs/extra/cpufreqd/cpufreqd
new file mode 100644
index 0000000..af55456
--- /dev/null
+++ b/abs/extra/cpufreqd/cpufreqd
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/cpufreqd`
+case "$1" in
+  start)
+    stat_busy "Starting cpufreqd"
+    [ -z "$PID" ] && /usr/sbin/cpufreqd
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      add_daemon cpufreqd
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping cpufreqd"
+    [ ! -z "$PID" ]  && kill $PID &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon cpufreqd
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"  
+esac
+exit 0
diff --git a/abs/extra/cpufreqd/cpufreqd.install b/abs/extra/cpufreqd/cpufreqd.install
new file mode 100644
index 0000000..e56ce57
--- /dev/null
+++ b/abs/extra/cpufreqd/cpufreqd.install
@@ -0,0 +1,26 @@
+post_install() {
+	cat << EOF
+
+NOTE
+----
+In order to use that daemon you need to either patch your
+kernel-2.4.x with cpufreq patch (check 
+http://www.codemonkey.org.uk/projects/cpufreq/),
+or use kernel-2.6.x or 2.4.x.-ac.
+
+EOF
+}
+
+post_upgrade() {
+  /bin/true
+}
+
+# arg 1:  the old package version
+pre_remove() {
+  /bin/true
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/extra/cpufrequtils/PKGBUILD b/abs/extra/cpufrequtils/PKGBUILD
new file mode 100644
index 0000000..c9087aa
--- /dev/null
+++ b/abs/extra/cpufrequtils/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 66595 2010-02-01 00:00:07Z giovanni $
+# Maintainer: kevin <kevin@archlinux.org>
+# Contributor: phrakture <aaronmgriffin+gmail+com>
+# Contributor: SpepS <dreamspepser at yahoo dot it>
+
+pkgname=cpufrequtils
+pkgver=008
+pkgrel=1
+pkgdesc="Userspace tools for the kernel cpufreq subsystem"
+arch=('i686' 'x86_64')
+url="http://www.kernel.org/pub/linux/utils/kernel/cpufreq/cpufrequtils.html"
+license=('GPL')
+depends=('sysfsutils')
+backup=('etc/conf.d/cpufreq')
+source=(http://www.kernel.org/pub/linux/utils/kernel/cpufreq/${pkgname}-${pkgver}.tar.bz2
+        cpufreq.rcd
+        cpufreq.confd)
+options=(!libtool)
+
+build()
+{
+  cd "${srcdir}/${pkgname}-${pkgver}"
+
+  make -j1 || return 1
+  make INSTALL="/bin/install -c" mandir=/usr/share/man DESTDIR="${pkgdir}" install || return 1
+
+  install -D -m755 ${srcdir}/cpufreq.rcd "${pkgdir}/etc/rc.d/cpufreq" || return 1
+  install -D -m644 ${srcdir}/cpufreq.confd "${pkgdir}/etc/conf.d/cpufreq" || return 1
+}
+md5sums=('c59b71c044d463896f3247e8dd83dd7e'
+         '7f2b5085df44d2df3e7c2d0b9f6dab08'
+         'baae1f2abffc6bef2bd32a8dd8263c09')
diff --git a/abs/extra/cpufrequtils/cpufreq.confd b/abs/extra/cpufrequtils/cpufreq.confd
new file mode 100644
index 0000000..2189097
--- /dev/null
+++ b/abs/extra/cpufrequtils/cpufreq.confd
@@ -0,0 +1,14 @@
+#configuration for cpufreq control
+
+# valid governors:
+#  ondemand, performance, powersave,
+#  conservative, userspace
+#governor="ondemand"
+
+# limit frequency range (optional)
+# valid suffixes: Hz, kHz (default), MHz, GHz, THz
+#min_freq="2.25GHz"
+#max_freq="3GHz"
+
+# use freq to set up the exact cpu frequency using it with userspace governor
+#freq=
diff --git a/abs/extra/cpufrequtils/cpufreq.rcd b/abs/extra/cpufrequtils/cpufreq.rcd
new file mode 100644
index 0000000..9bc19b1
--- /dev/null
+++ b/abs/extra/cpufrequtils/cpufreq.rcd
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+# source application-specific settings
+[ -f /etc/conf.d/cpufreq ] && . /etc/conf.d/cpufreq
+
+case "$1" in
+  start)
+    stat_busy "Setting cpufreq governing rules"
+
+	params=""
+	if [ -n "$governor" ]; then
+		mod="cpufreq_$governor"
+		params="-g $governor"
+		grep -qw "$governor" /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors || modprobe -q $mod
+		if [ $? -eq 0 ]; then
+			if [ "$min_freq" != "" ]; then
+				params="$params -d $min_freq"
+			fi
+			if [ "$max_freq" != "" ]; then
+				params="$params -u $max_freq"
+			fi
+		else
+			stat_busy "    Cannot load governor module '$governor'"
+			stat_fail
+			exit
+		fi
+	fi
+
+	if [ "$params" != "" ]; then
+		CPUS=$(sed -ne 's/^processor.* \([0-9]\+\)$/\1/p' /proc/cpuinfo)
+		stat_append ", cpu"
+		for cpu in $CPUS; do
+			stat_append " $cpu"
+			cpufreq-set -c $cpu $params
+			if [ "$freq" != "" ]; then
+				cpufreq-set -c $cpu -f $freq
+			fi
+		done
+		stat_done
+	else
+		stat_busy "    Invalid configuration in /etc/conf.d/cpufreq"
+		stat_fail
+	fi
+	;;
+  stop)
+	# nothing to do
+	;;
+  restart)
+	$0 start
+	;;
+  set)
+	# TODO: make callable... "cpufreq set 800MHz"
+	;;
+  *)
+	echo "usage: $0 {start|stop|restart}"  
+esac
+exit 0
diff --git a/abs/extra/crypto++/PKGBUILD b/abs/extra/crypto++/PKGBUILD
new file mode 100644
index 0000000..35bf2b7
--- /dev/null
+++ b/abs/extra/crypto++/PKGBUILD
@@ -0,0 +1,27 @@
+# $Id: PKGBUILD 68024 2010-02-10 14:24:12Z giovanni $
+# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
+# Contributor: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: Kritoke <kritoke@gamebox.net>
+# Contributor: jlvsimoes <jlvsimoes@oninet.pt>
+
+pkgname=crypto++
+pkgver=5.6.0
+_srcver=560
+pkgrel=2
+pkgdesc="A free C++ class library of cryptographic schemes."
+arch=('i686' 'x86_64')
+license=('custom')
+makedepends=('unzip')
+url="http://www.cryptopp.com/"
+source=(http://www.cryptopp.com/cryptopp${_srcver}.zip)
+md5sums=('36f35789ad60489d58003d3c849807e8')
+
+build() {
+  cd ${srcdir}
+  sed -i -e 's/^CXXFLAGS/#CXXFLAGS/' GNUmakefile
+  make -f GNUmakefile || return 1
+  install -d ${pkgdir}/usr/{lib,include/cryptopp}
+  install -m644 *.h ${pkgdir}/usr/include/cryptopp/
+  install -m644 libcryptopp.a ${pkgdir}/usr/lib/
+  install -D -m644 License.txt ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/extra/ddclient/PKGBUILD b/abs/extra/ddclient/PKGBUILD
index 121d2c5..f283cb9 100644
--- a/abs/extra/ddclient/PKGBUILD
+++ b/abs/extra/ddclient/PKGBUILD
@@ -3,33 +3,31 @@
 # Contributor: David Rosenstrauch <darose@darose.net>
 
 pkgname=ddclient
-pkgver=3.7.3
-pkgrel=2
+pkgver=3.8.0
+pkgrel=1
 pkgdesc="Update dynamic DNS entries for accounts on many dynamic DNS services."
 arch=('i686' 'x86_64')
 url="http://ddclient.sourceforge.net/"
 license=('GPL2')
 depends=('perl' 'perl-io-socket-ssl')
-backup=('etc/ddclient/ddclient.conf' 'etc/conf.d/ddclient')
-install=ddclient.install
-source=(http://downloads.sourceforge.net/sourceforge/ddclient/ddclient-$pkgver.tar.bz2 ddclient.rc ddclient.conf.d)
+backup=('etc/ddclient.conf')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2
+        ddclient.conf.dynamic.dyndns.sample
+        ddclient-foreground.patch)
 
 build() {
-  cd ${srcdir}/ddclient-${pkgver}
+  cd ${srcdir}/$pkgname-${pkgver}
+  patch < ${srcdir}/ddclient-foreground.patch
 
   # core files
   install -D -m755 ddclient ${pkgdir}/usr/sbin/ddclient
-  install -D -m755 ${srcdir}/ddclient.rc ${pkgdir}/etc/rc.d/ddclient
-  install -D -m600 sample-etc_ddclient.conf ${pkgdir}/etc/ddclient/ddclient.conf
-  install -D -m644 ${srcdir}/ddclient.conf.d ${pkgdir}/etc/conf.d/ddclient
+  install -D -m600 sample-etc_ddclient.conf ${pkgdir}/etc/ddclient/ddclient.conf.sample
+  install -D -m600 ${srcdir}/ddclient.conf.dynamic.dyndns.sample ${pkgdir}/etc/ddclient/
   install -d ${pkgdir}/var/cache/ddclient
 
   # additional instructions, sample configs
-  install -D -m644 README ${pkgdir}/etc/ddclient/samples/README
-  install -D -m644 sample-etc_cron.d_ddclient ${pkgdir}/etc/ddclient/samples/sample-etc_cron.d_ddclient
-  install -D -m644 sample-etc_dhcpc_dhcpcd-eth0.exe ${pkgdir}/etc/ddclient/samples/sample-etc_dhcpc_dhcpcd-eth0.exe
-  install -D -m644 sample-etc_ppp_ip-up.local ${pkgdir}/etc/ddclient/samples/sample-etc_ppp_ip-up.local
+  install -D -m644 README ${pkgdir}/etc/ddclient/README
 }
-md5sums=('f6a55bc68cf73ffe7e80d2fa5cd44f85'
-         '7035bf8132f3517a59167f61ee5e8b90'
-         'b8f39c82827776da948b76ef83544d33')
+md5sums=('6cac7a5eb1da781bfd4d98cef0b21f8e'
+         '4194825b9b4a7fcc1c57c2f5a4f6162b'
+         'd8ffc95f98f9afcb4a06a1e192220e35')
diff --git a/abs/extra/ddclient/ddclient-foreground.patch b/abs/extra/ddclient/ddclient-foreground.patch
new file mode 100644
index 0000000..a814ede
--- /dev/null
+++ b/abs/extra/ddclient/ddclient-foreground.patch
@@ -0,0 +1,47 @@
+--- ../ddclient-orig/ddclient	2009-10-19 22:45:15.000000000 +1030
++++ ddclient	2009-10-19 22:50:11.000000000 +1030
+@@ -307,6 +307,7 @@
+ my %variables = (
+     'global-defaults'    => {
+ 	'daemon'              => setv(T_DELAY, 0, 0, 1, 0,                    interval('60s')),
++	'foreground'          => setv(T_BOOL,  0, 0, 1, 0,                    undef),
+ 	'file'                => setv(T_FILE,  0, 0, 1, "$etc$program.conf",  undef),
+ 	'cache'               => setv(T_FILE,  0, 0, 1, "$cachedir$program.cache", undef),
+ 	'pid'                 => setv(T_FILE,  0, 0, 1, "",                   undef),
+@@ -535,6 +536,7 @@
+     "usage: ${program} [options]",
+     "options are:",
+     [ "daemon",      "=s", "-daemon delay         : run as a daemon, specify delay as an interval." ],
++    [ "foreground",  "!",  "-foreground           : do not fork" ],
+     [ "proxy",       "=s", "-proxy host           : use 'host' as the HTTP proxy" ],
+     [ "server",      "=s", "-server host          : update DNS information on 'host'" ],
+     [ "protocol",    "=s", "-protocol type        : update protocol used" ],
+@@ -623,7 +625,10 @@
+ $SIG{'HUP'}    = sub { $caught_hup  = 1; };
+ $SIG{'TERM'}   = sub { $caught_term = 1; };
+ $SIG{'KILL'}   = sub { $caught_kill = 1; };
+-if (opt('daemon') && !opt('force')) {
++# don't fork() if foreground or force is on
++if (opt('foreground') || opt('force')) {
++    ;
++} elsif (opt('daemon')) {
+     $SIG{'CHLD'}   = 'IGNORE';
+     my $pid = fork;
+     if ($pid < 0) {
+@@ -633,12 +638,15 @@
+ 	exit 0;
+     }
+     $SIG{'CHLD'}   = 'DEFAULT';
+-    $opt{'syslog'} = 1;
+     open(STDOUT, ">/dev/null");
+     open(STDERR, ">/dev/null");
+     open(STDIN,  "</dev/null");
++}
+ 
++# write out the pid file if we're daemon'ized
++if(opt('daemon')) {
+     write_pid();
++    $opt{'syslog'} = 1;
+ }
+ 
+ umask 077;
diff --git a/abs/extra/ddclient/ddclient.conf.dynamic.dyndns.sample b/abs/extra/ddclient/ddclient.conf.dynamic.dyndns.sample
new file mode 100644
index 0000000..a492c8b
--- /dev/null
+++ b/abs/extra/ddclient/ddclient.conf.dynamic.dyndns.sample
@@ -0,0 +1,162 @@
+######################################################################
+## 
+## $Id: sample-etc_ddclient.conf 102 2008-11-01 11:23:03Z wimpunk $
+##
+## Define default global variables with lines like:
+## 	var=value [, var=value]*
+## These values will be used for each following host unless overridden
+## with a local variable definition.
+##
+## Define local variables for one or more hosts with:
+## 	var=value [, var=value]* host.and.domain[,host2.and.domain...]
+##
+## Lines can be continued on the following line by ending the line
+## with a \
+##
+##
+## Warning: not all supported routers or dynamic DNS services 
+##          are mentioned here.
+##
+######################################################################
+daemon=300				# check every 300 seconds
+syslog=yes				# log update msgs to syslog
+mail=root				# mail all msgs to root
+mail-failure=root			# mail failed update msgs to root
+pid=/var/run/ddclient.pid		# record PID in file.
+ssl=yes					# use ssl-support.  Works with
+					# ssl-library
+# postscript=script			# run script after updating.  The
+					# new IP is added as argument.
+#
+#use=watchguard-soho,        fw=192.168.111.1:80	# via Watchguard's SOHO FW
+#use=netopia-r910,           fw=192.168.111.1:80	# via Netopia R910 FW
+#use=smc-barricade,          fw=192.168.123.254:80	# via SMC's Barricade FW
+#use=netgear-rt3xx,          fw=192.168.0.1:80		# via Netgear's internet FW
+#use=linksys,                fw=192.168.1.1:80		# via Linksys's internet FW
+#use=maxgate-ugate3x00,      fw=192.168.0.1:80		# via MaxGate's UGATE-3x00  FW
+#use=elsa-lancom-dsl10,      fw=10.0.0.254:80		# via ELSA LanCom DSL/10 DSL Router
+#use=elsa-lancom-dsl10-ch01, fw=10.0.0.254:80		# via ELSA LanCom DSL/10 DSL Router
+#use=elsa-lancom-dsl10-ch02, fw=10.0.0.254:80		# via ELSA LanCom DSL/10 DSL Router
+#use=alcatel-stp,            fw=10.0.0.138:80           # via Alcatel Speed Touch Pro
+#use=xsense-aero,            fw=192.168.1.1:80          # via Xsense Aero Router
+#use=allnet-1298,            fw=192.168.1.1:80          # via AllNet 1298 DSL Router
+#use=3com-oc-remote812,	     fw=192.168.0.254:80	# via 3com OfficeConnect Remote 812
+#use=e-tech,                 fw=192.168.1.1:80          # via E-tech Router
+#use=cayman-3220h,           fw=192.168.0.1:1080        # via Cayman 3220-H DSL Router
+#
+#fw-login=admin,             fw-password=XXXXXX		# FW login and password
+#
+## To obtain an IP address from FW status page (using fw-login, fw-password)
+#use=fw, fw=192.168.1.254/status.htm, fw-skip='IP Address' # found after IP Address
+#
+## To obtain an IP address from Web status page (using the proxy if defined)
+#use=web, web=checkip.dyndns.org/, web-skip='IP Address' # found after IP Address
+#
+#use=ip,                     ip=127.0.0.1	# via static IP's
+#use=if,                     if=eth0		# via interfaces
+use=web					# via web
+#
+#protocol=dyndns2				# default protocol
+#proxy=fasthttp.sympatico.ca:80			# default proxy
+#server=members.dyndns.org			# default server
+#server=members.dyndns.org:8245			# default server (bypassing proxies)
+
+login=your-dynamic-dyndns-login			# default login
+password=your-dynamic-dyndns-password		# default password
+#mx=mx.for.your.host				# default MX
+#backupmx=yes|no				# host is primary MX?
+#wildcard=yes|no				# add wildcard CNAME?
+
+##
+## dyndns.org dynamic addresses
+##
+## (supports variables: wildcard,mx,backupmx)
+##
+server=members.dyndns.org,		\
+protocol=dyndns2			\
+your-dynamic-dyndns-host
+
+##
+## dyndns.org static addresses
+##
+## (supports variables: wildcard,mx,backupmx)
+##
+# static=yes,				\
+# server=members.dyndns.org,		\
+# protocol=dyndns2			\
+# your-static-host.dyndns.org
+
+##
+##
+## dyndns.org custom addresses
+##
+## (supports variables: wildcard,mx,backupmx)
+##
+# custom=yes,				\
+# server=members.dyndns.org,		\
+# protocol=dyndns2			\
+# your-domain.top-level,your-other-domain.top-level
+
+##
+## ZoneEdit (zoneedit.com)
+##
+# server=dynamic.zoneedit.com, 		\
+# protocol=zoneedit1,			\
+# login=your-zoneedit-login,  		\
+# password=your-zoneedit-password	\
+# your.any.domain,your-2nd.any.dom
+
+##
+## EasyDNS (easydns.com)
+##
+# server=members.easydns.com, 		\
+# protocol=easydns,			\
+# login=your-easydns-login,  		\
+# password=your-easydns-password	\
+# your.any.domain,your-2nd.any.domain
+
+##
+## Hammernode (hn.org) dynamic addresses
+##
+# server=dup.hn.org,             	\
+# protocol=hammernode1,         	\
+# login=your-hn-login,           	\
+# password=your-hn-password      	\
+# your-hn-host.hn.org,your-2nd-hn-host.hn.org
+
+##
+## dslreports.com dynamic-host monitoring
+##
+# server=members.dslreports.com		\
+# protocol=dslreports1,			\
+# login=dslreports-login,		\
+# password=dslreports-password		\
+# dslreports-unique-id
+
+##
+## OrgDNS.org account-configuration
+##
+# use=web, web=members.orgdns.org/nic/ip
+# server=www.orgdns.org 		\
+# protocol=dyndns2 			\
+# login=yourLoginName 			\
+# password=yourPassword 		\
+# yourSubdomain.orgdns.org
+
+##
+## dnspark.com
+## (supports variables: mx, mxpri)
+##
+# use=web, web=ipdetect.dnspark.com, web-skip='Current Address:'
+# protocol=dnspark,			\
+# server=www.dnspark.com,		\
+# your-host.dnspark.com
+
+##
+## NameCheap (namecheap.com)
+##
+# protocol=namecheap,				\
+# server=dynamicdns.park-your-domain.com,	\
+# login=my-namecheap.com-login,			\
+# password=my-namecheap.com-password		\
+# myhost.namecheap.com 
diff --git a/abs/extra/deb2targz/PKGBUILD b/abs/extra/deb2targz/PKGBUILD
new file mode 100644
index 0000000..adf074d
--- /dev/null
+++ b/abs/extra/deb2targz/PKGBUILD
@@ -0,0 +1,20 @@
+# Maintainer: Douglas Soares de Andrade <dsandrade@gmail.org>
+# Contributor: Jason Erik Jackson <jacksonje@gmail.org>
+
+pkgname=deb2targz
+pkgver=1
+pkgrel=2
+pkgdesc="Converts .deb archives to tar.gz"
+arch=('i686' 'x86_64')
+url="http://www.miketaylor.org.uk/tech/deb/"
+depends=("perl")
+source=("http://www.miketaylor.org.uk/tech/deb/$pkgname")
+
+md5sums=('5b944785778d023a43e33af53bea2056')
+
+build() {
+	mkdir -p $startdir/pkg/usr/bin
+	install -m755 $startdir/src/$pkgname $startdir/pkg/usr/bin
+}
+
+
diff --git a/abs/extra/dnsmasq/PKGBUILD b/abs/extra/dnsmasq/PKGBUILD
new file mode 100644
index 0000000..f888ccd
--- /dev/null
+++ b/abs/extra/dnsmasq/PKGBUILD
@@ -0,0 +1,41 @@
+# $Id: PKGBUILD 66607 2010-02-01 01:42:17Z giovanni $
+# Maintainer: Paul Mattal <paul@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=dnsmasq
+pkgver=2.55
+pkgrel=1
+pkgdesc="Lightweight, easy to configure DNS forwarder and DHCP server"
+url="http://www.thekelleys.org.uk/dnsmasq/doc.html"
+arch=('i686' 'x86_64')
+license=('GPL')
+depends=('glibc' 'bash')
+makedepends=('libcap>=2.16')
+backup=('etc/dnsmasq.conf')
+install=
+source=("http://www.thekelleys.org.uk/$pkgname/$pkgname-$pkgver.tar.gz" 
+        'rc.dnsmasq')
+
+build() {
+  cd $srcdir/$pkgname-$pkgver
+
+  # Build
+  make || return 1
+
+  # Install
+  install -d $pkgdir/etc/rc.d || return 1
+  make PREFIX=/usr DESTDIR=$pkgdir install || return 1
+
+  install -D -m755 \
+    $srcdir/rc.dnsmasq $pkgdir/etc/rc.d/dnsmasq || return 1
+  install -D -m644 \
+    dnsmasq.conf.example $pkgdir/etc/dnsmasq.conf || return 1
+
+  # Make the Required Directories for DHCP Server Default Directories
+  install -d $pkgdir/var/db || return 1
+  install -d $pkgdir/var/lib/misc || return 1
+}
+
+# vim: ts=2 sw=2 et ft=sh
+md5sums=('b093d7c6bc7f97ae6fd35d048529232a'
+         'e956eee1ec24212a3254d2b168187495')
diff --git a/abs/extra/dnsmasq/rc.dnsmasq b/abs/extra/dnsmasq/rc.dnsmasq
new file mode 100755
index 0000000..1676072
--- /dev/null
+++ b/abs/extra/dnsmasq/rc.dnsmasq
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/dnsmasq`
+case "$1" in
+  start)
+    stat_busy "Starting DNS/DHCP daemon"
+    [ -z "$PID" ] && /usr/sbin/dnsmasq
+    if [ $? -gt 0 ] ; then
+      stat_fail
+    else
+      add_daemon dnsmasq                     # create the 'state' dir
+      stat_done 
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping DNS/DHCP daemon"
+    [ "$PID" ] && kill $PID &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon dnsmasq                      # remove the 'state' dir
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 5
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/extra/doxygen/PKGBUILD b/abs/extra/doxygen/PKGBUILD
index 5959ce5..272c267 100644
--- a/abs/extra/doxygen/PKGBUILD
+++ b/abs/extra/doxygen/PKGBUILD
@@ -1,7 +1,7 @@
-# $Id: PKGBUILD 14308 2008-10-05 15:59:28Z dan $
+# $Id: PKGBUILD 84267 2010-06-28 05:13:23Z dan $
 # Maintainer: Dan McGee <dan@archlinux.org>
 pkgname=doxygen
-pkgver=1.5.7.1
+pkgver=1.7.1
 pkgrel=1
 pkgdesc="A documentation system for C++, C, Java, IDL and PHP"
 license=('GPL')
@@ -9,17 +9,17 @@ arch=(i686 x86_64)
 url="http://www.doxygen.org/"
 depends=('gcc-libs')
 # qt required to build and run doxywizard, but don't want to drag it in
-makedepends=('flex' 'qt3')
+makedepends=('flex' 'qt')
 optdepends=('graphviz: for caller/callee graph generation'
-            'qt3: for doxywizard')
+            'qt: for doxywizard')
 source=(ftp://ftp.stack.nl/pub/users/dimitri/${pkgname}-${pkgver}.src.tar.gz)
 
 build() {
-  . /etc/profile.d/qt3.sh
   cd ${startdir}/src/${pkgname}-${pkgver}
-  ./configure --prefix /usr --with-doxywizard
+  QTDIR=/usr ./configure --prefix /usr --with-doxywizard
   make || return 1
   make INSTALL=${startdir}/pkg/usr MAN1DIR=share/man/man1 install
 }
 
-md5sums=('bc35dfd52bdae0247b862e67e0cbe7d7')
+md5sums=('13e76e10fb55581a16ee04de35c264f0')
+
diff --git a/abs/extra/doxygen/PKGBUILD.orig b/abs/extra/doxygen/PKGBUILD.orig
new file mode 100644
index 0000000..f4b09d2
--- /dev/null
+++ b/abs/extra/doxygen/PKGBUILD.orig
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 14308 2008-10-05 15:59:28Z dan $
+# Maintainer: Dan McGee <dan@archlinux.org>
+pkgname=doxygen
+pkgver=1.7.1
+pkgrel=1
+pkgdesc="A documentation system for C++, C, Java, IDL and PHP"
+license=('GPL')
+arch=(i686 x86_64)
+url="http://www.doxygen.org/"
+depends=('gcc-libs')
+# qt required to build and run doxywizard, but don't want to drag it in
+makedepends=('flex' 'qt3')
+optdepends=('graphviz: for caller/callee graph generation'
+            'qt3: for doxywizard')
+source=(ftp://ftp.stack.nl/pub/users/dimitri/${pkgname}-${pkgver}.src.tar.gz)
+
+build() {
+  . /etc/profile.d/qt3.sh
+  cd ${startdir}/src/${pkgname}-${pkgver}
+  ./configure --prefix /usr --with-doxywizard
+  make || return 1
+  make INSTALL=${startdir}/pkg/usr MAN1DIR=share/man/man1 install
+}
+md5sums=('13e76e10fb55581a16ee04de35c264f0')
diff --git a/abs/extra/dpgconv/PKGBUILD b/abs/extra/dpgconv/PKGBUILD
new file mode 100644
index 0000000..82fe117
--- /dev/null
+++ b/abs/extra/dpgconv/PKGBUILD
@@ -0,0 +1,22 @@
+# Contributor: Nick B <Shirakawasuna at gmail _dot_com>
+pkgname=dpgconv
+pkgver=9
+pkgrel=1
+pkgdesc="This is a converter to produce DPG movies for Moonshell software for Nintendo DS."
+arch=('i686' 'x86_64')
+url="http://theli.is-a-geek.org/blog/static/dpgconv"
+license=('GPL2')
+depends=('mpeg_stat' 'mplayer')
+source=(http://theli.is-a-geek.org/files/dpgconv/dpgconv-$pkgver.py.bz2
+	dpgconv-panscan.patch)
+
+build() {
+
+cd $startdir/src
+patch < dpgconv-panscan.patch
+install -m755 -D $startdir/src/dpgconv-$pkgver.py $startdir/pkg/usr/bin/dpgconv-$pkgver.py
+cd $startdir/pkg/usr/bin
+ln -s dpgconv-$pkgver.py dpgconv.py
+}
+md5sums=('fa61ceb4ebb241e98fc005aed86406e5')
+
diff --git a/abs/extra/dpgconv/dpgconv-panscan.patch b/abs/extra/dpgconv/dpgconv-panscan.patch
new file mode 100644
index 0000000..471d518
--- /dev/null
+++ b/abs/extra/dpgconv/dpgconv-panscan.patch
@@ -0,0 +1,83 @@
+--- dpgconv-9.py.old	2009-10-28 19:33:46.000000000 +1030
++++ dpgconv-9.py	2009-10-28 19:28:01.000000000 +1030
+@@ -49,9 +49,12 @@
+ 	--width xxx
+ 		destination video width (default: 256)
+ 	--keep-aspect
+-		try to keep aspect ratio
++		try to keep aspect ratio by letterboxing
++        --keep-aspect-panscan
++		try to keep aspect ratio by cropping original
+ 	
+ 	NOTE:	width/height have no effect when --keep-aspect is set
++		--keep-aspect-panscan overrides --keep-aspect
+ 	
+ 	--mv
+ 		additional parameters for mencoder for video
+@@ -150,8 +153,38 @@
+ 		v_pf = "format=rgb24,"
+ 		options.pf = 3
+ 
+-	if options.aspect:
+-		aspect = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_ASPECT\"")
++	crop=""
++	if options.panscan:
++		options.width=256
++		options.height=192
++
++		aspect = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_ASPECT\" | tail -1")
++		p1 = re.compile ("ID_VIDEO_ASPECT=(.*)")
++		m1 = p1.search( aspect )
++		width = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_WIDTH\" | tail -1")
++		p2 = re.compile ("ID_VIDEO_WIDTH=(.*)")
++		m2 = p2.search( width )
++		height = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_HEIGHT\" | tail -1")
++		p3 = re.compile ("ID_VIDEO_HEIGHT=(.*)")
++		m3 = p3.search( height )
++		if m1 and m2 and m3:
++			print "Input Aspect %s" % m1.group(1)
++			print "Input Width %s" % m2.group(1)
++			print "Input Height %s" % m3.group(1)
++			ar = float (m1.group(1))
++			iw = int (m2.group(1))
++			ih = int (m3.group(1))
++			if aspect > 1.333333:
++				cropw=int(round(iw / ar * 4 / 3, 0))
++				croph=ih
++			else:
++				cropw=iw
++				croph=int(round(ih * ar * 3 / 4, 0))
++			crop="crop="+`cropw`+":"+`croph`+","
++			print crop
++
++	elif options.aspect:
++		aspect = commands.getoutput( MPLAYER + " -frames 1 -vo null -ao null -identify \"" + file + "\" | grep -E \"^ID_VIDEO_ASPECT\" | tail -1")
+ 		p = re.compile ("ID_VIDEO_ASPECT=(.*)")
+ 		m = p.search( aspect )
+ 		if m:
+@@ -169,13 +202,13 @@
+ 		if options.fps < 24:
+ 			print "mencoder won't work with double pass and fps < 24, forcing fps = 24"
+ 			options.fps = 24
+-		v_cmd =  ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:vmax_b_frames=2:cmp=6:subcmp=6:precmp=6:dia=4:predia=4:bidir_refine=4:mv0_threshold=0:last_pred=3:vbitrate=" + `options.vbps` )
++		v_cmd =  ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:vmax_b_frames=2:cmp=6:subcmp=6:precmp=6:dia=4:predia=4:bidir_refine=4:mv0_threshold=0:last_pred=3:vbitrate=" + `options.vbps` )
+ 	elif options.hq:
+-		v_cmd =  ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=6:subcmp=6:precmp=6:dia=3:predia=3:last_pred=3:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" )
++		v_cmd =  ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` +":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=6:subcmp=6:precmp=6:dia=3:predia=3:last_pred=3:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" )
+ 	elif options.lq:
+-		v_cmd = ( " \"" + file + "\" -v -ofps " + `options.fps` + " -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` + ",harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" )
++		v_cmd = ( " \"" + file + "\" -v -ofps " + `options.fps` + " -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` + ",harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo" )
+ 	else :
+-		v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + "scale=" + `options.width` + ":" + `options.height` + ":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=2:subcmp=2:precmp=2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo")
++		v_cmd = ( " \""+ file +"\" -v -ofps " + `options.fps` + " -sws 9 -vf " + v_pf + crop + "scale=" + `options.width` + ":" + `options.height` + ":::3,harddup -nosound -ovc lavc -lavcopts vcodec=mpeg1video:vstrict=-2:mbd=2:trell:cbp:mv0:cmp=2:subcmp=2:precmp=2:vbitrate=" + `options.vbps` + " -o " + MPGTMP + " -of rawvideo")
+ 	
+ 	if options.nosub:
+ 		if options.sub != None:
+@@ -459,6 +492,7 @@
+ parser.add_option("-a","--abps", type="int", dest="abps", default=128)
+ parser.add_option("--volnorm", action="store_true", dest="volnorm", default=False)
+ parser.add_option("--keep-aspect", action="store_true", dest="aspect", default=False)
++parser.add_option("--keep-aspect-panscan", action="store_true", dest="panscan", default=False)
+ parser.add_option("--height", type="int", dest="height", default=192)
+ parser.add_option("--width", type="int", dest="width", default=256)
+ parser.add_option("-z","--hz", type="int", dest="hz", default=32000)
diff --git a/abs/extra/enchant/PKGBUILD b/abs/extra/enchant/PKGBUILD
index e22aa05..0937bd8 100644
--- a/abs/extra/enchant/PKGBUILD
+++ b/abs/extra/enchant/PKGBUILD
@@ -1,7 +1,7 @@
 # $Id: PKGBUILD 2581 2008-06-08 12:52:18Z jgc $
 # Maintainer: dorphell <dorphell@archlinux.org>
 pkgname=enchant
-pkgver=1.4.2
+pkgver=1.6.0
 pkgrel=1
 pkgdesc="A wrapper library for generic spell checking"
 arch=(i686 x86_64)
@@ -11,7 +11,6 @@ makedepends=('hspell')
 options=(!libtool)
 source=(http://www.abisource.com/downloads/enchant/${pkgver}/${pkgname}-${pkgver}.tar.gz)
 url="http://www.abisource.com/enchant/"
-md5sums=('fe4558269ff59f569ab9581c907d58cb')
 
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
@@ -19,3 +18,4 @@ build() {
   make || return 1
   make DESTDIR=${startdir}/pkg install || return 1
 }
+md5sums=('de11011aff801dc61042828041fb59c7')
diff --git a/abs/extra/evrouter/PKGBUILD b/abs/extra/evrouter/PKGBUILD
index e4fb59d..0f7d7b7 100644
--- a/abs/extra/evrouter/PKGBUILD
+++ b/abs/extra/evrouter/PKGBUILD
@@ -1,18 +1,19 @@
 # Contributor: Jonathan Liu <net147@hotmail.com>
 pkgname=evrouter
-pkgver=0.3.3
-pkgrel=2
+pkgver=0.4
+pkgrel=1
 pkgdesc="An Input Event Router for Linux"
 arch=(i686)
 url="http://www.bedroomlan.org/~alexios/coding_evrouter.html"
 license=('GPL2')
 depends=('libxt' 'libxtst' 'xorg-server')
-source=(http://www.bedroomlan.org/~alexios/files/SOFTWARE/evrouter/${pkgname}_${pkgver}.tar.gz)
-md5sums=('a20073e04679eb11a5c2da9ab59e75fd')
+source=(http://debian.bedroomlan.org/debian/pool/main/e/evrouter/${pkgname}_${pkgver}.tar.gz)
 
 build() {
-  cd "$startdir/src/$pkgname"
+  cd "${startdir}/src/${pkgname}-${pkgver}"
+  ./autogen.sh
   ./configure --prefix=/usr --without-xmms
   make || return 1
-  make DESTDIR="$startdir/pkg" install
+  make DESTDIR="${startdir}/pkg" install
 }
+md5sums=('eef1b9d8e3b545c330eb025670ffa3e8')
diff --git a/abs/extra/evtest/PKGBUILD b/abs/extra/evtest/PKGBUILD
new file mode 100644
index 0000000..0952c5e
--- /dev/null
+++ b/abs/extra/evtest/PKGBUILD
@@ -0,0 +1,24 @@
+# Contributor: Andrej Gelenberg <andrej.gelenberg@udo.edu>
+pkgname=evtest
+pkgver=1.25
+pkgrel=2
+pkgdesc="Simple tool for input event debugging."
+arch=('i686' 'x86_64')
+url="http://cgit.freedesktop.org/~whot/evtest/"
+license=('GPL')
+depends=(libxml2)
+makedepends=(xmlto asciidoc)
+optdepends=(libxslt)
+source=("http://cgit.freedesktop.org/~whot/evtest/snapshot/$pkgname-$pkgver.zip" "evtest.diff")
+
+build()
+{
+ cd $srcdir/$pkgname-$pkgver
+ patch -p1 < ../evtest.diff || return 1
+ autoreconf -iv
+ ./configure --prefix=/usr 
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}
+md5sums=('1edddfcd366bb52490e08cbf1dbaeddf'
+         '1753bd5825ca7e5244a1a09029b8a47d')
diff --git a/abs/extra/evtest/evtest.diff b/abs/extra/evtest/evtest.diff
new file mode 100644
index 0000000..0dc7ba5
--- /dev/null
+++ b/abs/extra/evtest/evtest.diff
@@ -0,0 +1,32 @@
+diff -ruaN evtest-1.25.orig/evtest-capture.c evtest-1.25/evtest-capture.c
+--- evtest-1.25.orig/evtest-capture.c	2009-12-02 22:24:44.000000000 +0000
++++ evtest-1.25/evtest-capture.c	2010-05-06 08:38:03.000000000 +0000
+@@ -560,16 +560,6 @@
+ 	[ABS_TOOL_WIDTH] = "ABS_TOOL_WIDTH",
+ 	[ABS_VOLUME] = "ABS_VOLUME",
+ 	[ABS_MISC] = "ABS_MISC",
+-	[ABS_MT_TOUCH_MAJOR] = "ABS_MT_TOUCH_MAJOR",
+-	[ABS_MT_TOUCH_MINOR] = "ABS_MT_TOUCH_MINOR",
+-	[ABS_MT_WIDTH_MAJOR] = "ABS_MT_WIDTH_MAJOR",
+-	[ABS_MT_WIDTH_MINOR] = "ABS_MT_WIDTH_MINOR",
+-	[ABS_MT_ORIENTATION] = "ABS_MT_ORIENTATION",
+-	[ABS_MT_POSITION_X] = "ABS_MT_POSITION_X",
+-	[ABS_MT_POSITION_Y] = "ABS_MT_POSITION_Y",
+-	[ABS_MT_TOOL_TYPE] = "ABS_MT_TOOL_TYPE",
+-	[ABS_MT_BLOB_ID] = "ABS_MT_BLOB_ID",
+-	[ABS_MT_TRACKING_ID] = "ABS_MT_TRACKING_ID",
+ };
+ 
+ const char *misc[MSC_MAX + 1] = {
+diff -ruaN evtest-1.25.orig/evtest.c evtest-1.25/evtest.c
+--- evtest-1.25.orig/evtest.c	2009-12-02 22:24:44.000000000 +0000
++++ evtest-1.25/evtest.c	2010-05-06 08:38:21.000000000 +0000
+@@ -192,7 +192,7 @@
+ 	[BTN_TOOL_MOUSE] = "ToolMouse",		[BTN_TOOL_LENS] = "ToolLens",
+ 	[BTN_TOUCH] = "Touch",			[BTN_STYLUS] = "Stylus",
+ 	[BTN_STYLUS2] = "Stylus2",		[BTN_TOOL_DOUBLETAP] = "Tool Doubletap",
+-	[BTN_TOOL_TRIPLETAP] = "Tool Tripletap", [BTN_TOOL_QUADTAP] = "Tool Quadtap",
++	[BTN_TOOL_TRIPLETAP] = "Tool Tripletap",
+ 	[BTN_GEAR_DOWN] = "WheelBtn",
+ 	[BTN_GEAR_UP] = "Gear up",		[KEY_OK] = "Ok",
+ 	[KEY_SELECT] = "Select",		[KEY_GOTO] = "Goto",
diff --git a/abs/extra/fakeroot/PKGBUILD b/abs/extra/fakeroot/PKGBUILD
index f8dd4b2..688c3d3 100644
--- a/abs/extra/fakeroot/PKGBUILD
+++ b/abs/extra/fakeroot/PKGBUILD
@@ -3,8 +3,8 @@
 # Contributor: Jochem Kossen <j.kossen@home.nl>
 
 pkgname=fakeroot
-pkgver=1.12.2
-pkgrel=2
+pkgver=1.14.4
+pkgrel=1
 pkgdesc="Gives a fake root environment, useful for building packages as a non-privileged user"
 arch=('i686' 'x86_64')
 license=('GPL')
@@ -13,8 +13,7 @@ groups=('base-devel')
 install=fakeroot.install
 depends=('glibc' 'filesystem' 'grep' 'sed')
 options=('!libtool')
-source=(http://ftp.debian.org/debian/pool/main/f/$pkgname/${pkgname}_${pkgver}.tar.gz)
-md5sums=('1eb7d972a19159035892e7d132602726')
+source=(http://ftp.debian.org/debian/pool/main/f/$pkgname/${pkgname}_${pkgver}.orig.tar.bz2)
 
 build() {
   cd ${srcdir}/$pkgname-$pkgver
@@ -26,3 +25,4 @@ build() {
   # install README for sysv/tcp usage
   install -Dm644 $srcdir/$pkgname-$pkgver/README $pkgdir/usr/share/doc/$pkgname/README
 }
+md5sums=('bea628be77838aaa7323a2f7601c2d7e')
diff --git a/abs/extra/fftw/PKGBUILD b/abs/extra/fftw/PKGBUILD
index 1556108..a4ca689 100644
--- a/abs/extra/fftw/PKGBUILD
+++ b/abs/extra/fftw/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: damir <damir@archlinux.org>
 
 pkgname=fftw
-pkgver=3.2
+pkgver=3.2.2
 pkgrel=1
 pkgdesc="A library for computing the discrete Fourier transform (DFT)"
 arch=('i686' 'x86_64')
@@ -46,3 +46,4 @@ build() {
   rm -f $pkgdir/usr/share/info/dir
   gzip $pkgdir/usr/share/info/*
 }
+md5sums=('b616e5c91218cc778b5aa735fefb61ae')
diff --git a/abs/extra/fuppes-svn/PKGBUILD b/abs/extra/fuppes-svn/PKGBUILD
index 67936c0..03ffb9c 100644
--- a/abs/extra/fuppes-svn/PKGBUILD
+++ b/abs/extra/fuppes-svn/PKGBUILD
@@ -2,8 +2,8 @@
 # patch for svn r634: Ivan Yurasov <vd@vdk.su>
 
 pkgname=fuppes-svn
-pkgver=636
-pkgrel=9
+pkgver=664
+pkgrel=1
 pkgdesc="A free, multiplatform Universal Plug and Play A/V MediaServer"
 arch=('i686' 'x86_64')
 url="http://fuppes.ulrich-voelkel.de/"
@@ -12,9 +12,6 @@ depends=('pcre' 'libxml2' 'sqlite3' 'gettext' 'taglib' 'imagemagick' 'ffmpeg' 'l
 makdepends=('pkgconfig' 'autoconf' 'subversion')
 install=fuppes.install
 source=(fuppes-r634-archlinux.patch fuppes.diff fuppes.cfg run fuppes.ch fuppes.lr)
-md5sums=('5d9f6331cc91b64aab69449ce327b214' 'c495fa1bd9a870ae36820632434319ee' \
-	 'b0cef07d8e60d01c8146a69870672e1f' '3850001378088e5efac60487e5550d54' \
-	 '3c355b860f1b0d273f5aa8b2bea1bde6')
 
 _svnmod="fuppes"
 _svntrunk="https://fuppes.svn.sourceforge.net/svnroot/fuppes/trunk"
@@ -45,8 +42,13 @@ build()
 	cp $startdir/src/fuppes.cfg $startdir/pkg/etc/fuppes
 	mkdir -p $startdir/pkg/etc/cron.hourly
 	mkdir -p $startdir/pkg/etc/logrotate.d/
-	mkdir -p $startdir/pkg/etc/sv/fuppes/supervise
 	install -D -m755 $startdir/src/fuppes.ch $startdir/pkg/etc/cron.hourly
 	install -D -m755 $startdir/src/run $startdir/pkg/etc/sv/fuppes
 	install -D -m755 $startdir/src/fuppes.lr $startdir/pkg/etc/logrotate.d
 }
+md5sums=('5d9f6331cc91b64aab69449ce327b214'
+         'c495fa1bd9a870ae36820632434319ee'
+         'b0cef07d8e60d01c8146a69870672e1f'
+         '3850001378088e5efac60487e5550d54'
+         '3c355b860f1b0d273f5aa8b2bea1bde6'
+         '3151a3862fbc6b758d7ae5776eba3d57')
diff --git a/abs/extra/gdl/PKGBUILD b/abs/extra/gdl/PKGBUILD
index ee649c2..f7ee580 100644
--- a/abs/extra/gdl/PKGBUILD
+++ b/abs/extra/gdl/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Jan de Groot <jgc@archlinux.org>
 
 pkgname=gdl
-pkgver=2.26.0
+pkgver=2.90.0
 pkgrel=1
 pkgdesc="Gnome Devtool Libraries"
 arch=(i686 x86_64)
@@ -11,8 +11,7 @@ url="http://www.gnome.org/"
 depends=('libglade>=2.6.4')
 makedepends=('pkgconfig')
 options=('!libtool')
-source=(http://ftp.gnome.org/pub/GNOME/sources/gdl/2.26/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('8915b8808d88e12c1bb53e84f50e6707')
+source=(http://ftp.gnome.org/pub/GNOME/sources/gdl/2.90/${pkgname}-${pkgver}.tar.bz2)
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
@@ -21,3 +20,4 @@ build() {
   make || return 1
   make DESTDIR="${pkgdir}" install || return 1
 }
+md5sums=('7ccaafc1b55c510a4e39ea7e54844bb3')
diff --git a/abs/extra/geoip/PKGBUILD b/abs/extra/geoip/PKGBUILD
new file mode 100644
index 0000000..9ae74ba
--- /dev/null
+++ b/abs/extra/geoip/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 40078 2009-05-27 06:04:17Z juergen $
+# Maintainer: Dan McGee <dan@archlinux.org>
+# Contributor: Manolis Tzanidakis <manolis@archlinux.org>
+
+pkgname=geoip
+pkgver=1.4.6
+pkgrel=1
+pkgdesc="Non-DNS IP-to-country resolver C library & utils"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.maxmind.com/app/c"
+depends=('zlib')
+backup=(etc/geoip/GeoIP.conf)
+options=('!libtool')
+source=(http://www.maxmind.com/download/geoip/api/c/GeoIP-${pkgver}.tar.gz)
+md5sums=('cb14b1beeb40631a12676b11ca0c309a')
+
+build() {
+  cd ${startdir}/src/GeoIP-${pkgver}
+  ./configure --prefix=/usr --mandir=/usr/share/man --sysconfdir=/etc/geoip
+  make || return 1
+  make check || return 1
+  make DESTDIR=${startdir}/pkg install
+}
+
diff --git a/abs/extra/glew/PKGBUILD b/abs/extra/glew/PKGBUILD
index 989621b..1db995d 100644
--- a/abs/extra/glew/PKGBUILD
+++ b/abs/extra/glew/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: SleepyDog
 
 pkgname=glew
-pkgver=1.5.1
+pkgver=1.5.5
 pkgrel=1
 pkgdesc="A cross-platform C/C++ extension loading library"
 arch=('i686' 'x86_64')
@@ -11,13 +11,13 @@ url="http://glew.sourceforge.net"
 license=('BSD' 'MIT' 'GPL')
 depends=('libxmu' 'libxi' 'mesa')
 makedepends=('hd2u')
-source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}-src.tgz)
-md5sums=('759a59853dfaae4d007b414a3c1712f2')
+source=(http://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tgz)
 
 build() {
-  cd ${startdir}/src/${pkgname}
+  cd ${startdir}/src/${pkgname}-${pkgver}
   dos2unix config/config.guess
   make || return 1
   make GLEW_DEST=${startdir}/pkg/usr LIBDIR=${startdir}/pkg/usr/lib install || return 1
   install -D -m644 LICENSE.txt ${startdir}/pkg/usr/share/licenses/${pkgname}/LICENSE.txt || return 1
 }
+md5sums=('3621f27cfd3e33d5dbcc1111ecb5b762')
diff --git a/abs/extra/gnu-netcat/PKGBUILD b/abs/extra/gnu-netcat/PKGBUILD
new file mode 100644
index 0000000..82c90f3
--- /dev/null
+++ b/abs/extra/gnu-netcat/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 49781 2009-08-15 16:06:57Z jgc $
+# Maintainer: Tom K <tomk@runbox.com>
+
+pkgname=gnu-netcat
+pkgver=0.7.1
+pkgrel=3
+pkgdesc="GNU rewrite of netcat, the network piping application"
+depends=('glibc' 'texinfo')
+arch=('i686' 'x86_64')
+url="http://netcat.sourceforge.net/"
+license=('GPL')
+replaces=('netcat')
+provides=('netcat')
+install=gnu-netcat.install
+source=(http://internap.dl.sourceforge.net/sourceforge/netcat/netcat-$pkgver.tar.bz2)
+md5sums=('0a29eff1736ddb5effd0b1ec1f6fe0ef')
+
+build() {
+  cd "${srcdir}/netcat-${pkgver}"
+  ./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info || return 1
+  make || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+}
diff --git a/abs/extra/gnu-netcat/gnu-netcat.install b/abs/extra/gnu-netcat/gnu-netcat.install
new file mode 100644
index 0000000..a946aa2
--- /dev/null
+++ b/abs/extra/gnu-netcat/gnu-netcat.install
@@ -0,0 +1,13 @@
+infodir=/usr/share/info
+
+post_install() {
+  install-info $infodir/netcat.info.gz $infodir/dir 2> /dev/null
+}
+
+post_upgrade() {
+  post_install $1
+}
+
+pre_remove() {
+  install-info --delete $infodir/netcat.info.gz $infodir/dir 2> /dev/null
+}
diff --git a/abs/extra/gnupg/PKGBUILD b/abs/extra/gnupg/PKGBUILD
new file mode 100644
index 0000000..cb980ce
--- /dev/null
+++ b/abs/extra/gnupg/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 52155 2009-09-16 11:08:07Z allan $
+# Maintainer: Andreas Radke <andyrtr at archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=gnupg
+pkgver=1.4.10
+pkgrel=2
+pkgdesc="GNU Privacy Guard - a PGP replacement tool"
+arch=('i686' 'x86_64')
+license=('GPL3')
+depends=('zlib' 'bzip2' 'libldap>=2.4.11' 'libusb' 'curl>=7.16.2' 'readline>=5.0.00')
+source=(ftp://ftp.franken.de/pub/crypt/mirror/ftp.gnupg.org/gcrypt/gnupg/$pkgname-$pkgver.tar.bz2)
+install=gnupg.install
+url="http://www.gnupg.org/"
+md5sums=('dcf7ed712997888d616e029637bfc303')
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+  ./configure --prefix=/usr --libexecdir=/usr/lib # docdir can't be set properly
+  make || return 1
+  ln -s ${pkgname}-${pkgver}/scripts ..
+  make DESTDIR=${pkgdir} install || return 1
+  
+  # fix fileconflict with gnupg2 pkg
+  rm ${pkgdir}/usr/share/man/man1/gpg-zip.1
+}
diff --git a/abs/extra/gnupg/gnupg.install b/abs/extra/gnupg/gnupg.install
new file mode 100644
index 0000000..5a67047
--- /dev/null
+++ b/abs/extra/gnupg/gnupg.install
@@ -0,0 +1,21 @@
+info_dir=/usr/share/info
+info_files=(gnupg1.info)
+
+post_install() {
+  [ -x usr/bin/install-info ] || return 0
+  for f in ${info_files[@]}; do
+    usr/bin/install-info ${info_dir}/$f.gz ${info_dir}/dir 2> /dev/null
+  done
+}
+
+post_upgrade() {
+  post_install $1
+}
+
+pre_remove() {
+  [ -x usr/bin/install-info ] || return 0
+  for f in ${info_files[@]}; do
+    usr/bin/install-info --delete ${info_dir}/$f.gz ${info_dir}/dir 2> /dev/null
+  done
+}
+# vim:set ts=2 sw=2 et:
diff --git a/abs/extra/gnuplot/PKGBUILD b/abs/extra/gnuplot/PKGBUILD
index ec372f0..3b04bde 100644
--- a/abs/extra/gnuplot/PKGBUILD
+++ b/abs/extra/gnuplot/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: Niklas Volbers <mithrandir42@web.de>
 
 pkgname=gnuplot
-pkgver=4.2.5
+pkgver=4.4.0
 pkgrel=1
 pkgdesc="Command-line driven interactive data and function plotting utility"
 url="http://www.gnuplot.info"
@@ -12,7 +12,6 @@ makedepends=('texinfo')
 license='custom'
 arch=('i686')
 source=(http://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz)
-md5sums=(85d042f8efd7aae3d9cbfd85b14d06d2)
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -32,3 +31,4 @@ build() {
 
    install -D $startdir/src/$pkgname-$pkgver/Copyright $startdir/pkg/usr/share/licenses/custom/gnuplot/Copyright
 }
+md5sums=('e708665bd512153ad5c35252fe499059')
diff --git a/abs/extra/gpgme/PKGBUILD b/abs/extra/gpgme/PKGBUILD
new file mode 100644
index 0000000..ce03d89
--- /dev/null
+++ b/abs/extra/gpgme/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 48153 2009-07-31 20:34:25Z tpowa $
+# Maintainer: Roman Kyrylych <roman@archlinux.org>
+# Contributor: Sarah Hay <sarah@archlinux.org>
+
+pkgname=gpgme
+pkgver=1.2.0
+pkgrel=1
+pkgdesc="A C wrapper library for GnuPG."
+arch=('i686' 'x86_64')
+url="http://www.gnupg.org/related_software/gpgme/"
+license=('GPL')
+depends=('libgpg-error>=1.5' 'pth' 'gnupg')
+install=gpgme.install
+options=('!libtool' '!emptydirs')
+source=(ftp://ftp.gnupg.org/gcrypt/${pkgname}/${pkgname}-${pkgver}.tar.gz)
+md5sums=('3164bbbd49f94863f2849f39c343521e')
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+  ./configure --prefix=/usr
+  make || return 1
+  make DESTDIR=${pkgdir} install
+  rm ${pkgdir}/usr/share/info/dir
+  gzip ${pkgdir}/usr/share/info/*
+}
diff --git a/abs/extra/gpgme/__changelog b/abs/extra/gpgme/__changelog
new file mode 100644
index 0000000..4074d1b
--- /dev/null
+++ b/abs/extra/gpgme/__changelog
@@ -0,0 +1 @@
+removed gnupg2 requirement
diff --git a/abs/extra/gpgme/gpgme.install b/abs/extra/gpgme/gpgme.install
new file mode 100644
index 0000000..b54620d
--- /dev/null
+++ b/abs/extra/gpgme/gpgme.install
@@ -0,0 +1,18 @@
+infodir=/usr/share/info
+filelist=(gpgme.info gpgme.info-1 gpgme.info-2)
+
+post_install() {
+  for file in ${filelist[@]}; do
+    install-info $infodir/$file $infodir/dir 2> /dev/null
+  done
+}
+
+post_upgrade() {
+  post_install $1
+}
+
+pre_remove() {
+  for file in ${filelist[@]}; do
+    install-info --delete $infodir/$file $infodir/dir 2> /dev/null
+  done
+}
diff --git a/abs/extra/gtk-doc/PKGBUILD b/abs/extra/gtk-doc/PKGBUILD
index 6bbbb94..3b07565 100644
--- a/abs/extra/gtk-doc/PKGBUILD
+++ b/abs/extra/gtk-doc/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: dorphell <dorphell@archlinux.org>
 
 pkgname=gtk-doc 
-pkgver=1.10
+pkgver=1.15
 pkgrel=1
 options=('docs')
 pkgdesc="Used to document the public API of libraries" 
@@ -13,7 +13,6 @@ makedepends=('pkgconfig' 'jade')
 install=gtk-doc.install
 url="http://www.gtk.org/gtk-doc/"
 source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.bz2) 
-md5sums=('cbd4be396b0cf8b8ce1fc9b927cdf451')
 
 build() { 
   cd ${startdir}/src/${pkgname}-${pkgver} 
@@ -21,3 +20,4 @@ build() {
   make || return 1 
   make DESTDIR=${startdir}/pkg install || return 1
 }
+md5sums=('c022788b1fbbec30d55df4ccb34eeb90')
diff --git a/abs/extra/help2man/PKGBUILD b/abs/extra/help2man/PKGBUILD
new file mode 100644
index 0000000..ef9642e
--- /dev/null
+++ b/abs/extra/help2man/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 67994 2010-02-10 11:34:11Z giovanni $
+# Maintainer: Giovanni Scafora <giovanni@archlinux.org>
+# Contributor: Paul Mattal <paul@mattal.com>
+
+pkgname=help2man
+pkgver=1.37.1
+pkgrel=1
+pkgdesc="Conversion tool to create man files"
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/help2man/"
+license=('GPL')
+depends=('perl-locale-gettext')
+source=(http://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${pkgver}.tar.gz
+        help2man-1.37.1-respect-LDFLAGS.patch)
+md5sums=('371b5cc74fe9c2ea3ee1ca23c19b19a8'
+         '6f80dfd75b46c6bfbc2eeb5516771096')
+
+build() {
+  cd "${srcdir}/${pkgname}-${pkgver}"
+
+  patch -Np1 -i ${srcdir}/help2man-1.37.1-respect-LDFLAGS.patch || return 1
+  ./configure --prefix=/usr \
+              --mandir=/usr/share/man \
+	      --infodir=/usr/share/info \
+	      --libdir=/lib
+  make || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+}
diff --git a/abs/extra/help2man/help2man-1.37.1-respect-LDFLAGS.patch b/abs/extra/help2man/help2man-1.37.1-respect-LDFLAGS.patch
new file mode 100644
index 0000000..a314c27
--- /dev/null
+++ b/abs/extra/help2man/help2man-1.37.1-respect-LDFLAGS.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.in	2009-11-14 07:21:34.000000000 +0100
++++ b/Makefile.in	2010-02-10 12:23:35.000000000 +0100
+@@ -103,7 +103,7 @@
+ 
+ preload: $(preload).so
+ $(preload).so: $(srcdir)/$(preload).c
+-	$(CC) $(CFLAGS) -o $@ -fPIC -shared $? $(LIBS)
++	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -fPIC -shared $? $(LIBS)
+ 
+ man: $(target).1
+ $(target).1: $(srcdir)/$(target).PL $(srcdir)/$(target).h2m
diff --git a/abs/extra/hicolor-icon-theme/PKGBUILD b/abs/extra/hicolor-icon-theme/PKGBUILD
index 55e4c34..7109330 100644
--- a/abs/extra/hicolor-icon-theme/PKGBUILD
+++ b/abs/extra/hicolor-icon-theme/PKGBUILD
@@ -2,14 +2,13 @@
 # Maintainer: arjan <arjan@archlinux.org>
 # Contributer: Jan De Groot <jan@jgc.homeip.net>
 pkgname=hicolor-icon-theme
-pkgver=0.10
+pkgver=0.12
 pkgrel=1
 pkgdesc="Freedesktop.org Hicolor icon theme"
 arch=(i686 x86_64)
 depends=()
 url="http://icon-theme.freedesktop.org/wiki/HicolorTheme"
 source=(http://icon-theme.freedesktop.org/releases/${pkgname}-${pkgver}.tar.gz)
-md5sums=('3534f7b8e59785c7d5bfa923e85510a7')
 
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
@@ -17,3 +16,4 @@ build() {
   make || return 1
   make DESTDIR=${startdir}/pkg install
 }
+md5sums=('55cafbcef8bcf7107f6d502149eb4d87')
diff --git a/abs/extra/htop/PKGBUILD b/abs/extra/htop/PKGBUILD
index 326a98a..95b9660 100644
--- a/abs/extra/htop/PKGBUILD
+++ b/abs/extra/htop/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Alexander Fehr <pizzapunk gmail com>
 
 pkgname=htop
-pkgver=0.8.1
+pkgver=0.8.3
 pkgrel=1
 pkgdesc="Interactive process viewer"
 arch=('i686' 'x86_64')
@@ -10,19 +10,13 @@ url="http://htop.sourceforge.net/"
 license=('GPL')
 depends=('ncurses')
 options=('!emptydirs')
-source=(http://downloads.sourceforge.net/htop/htop-$pkgver.tar.gz
-        htop-treeview.patch)
-md5sums=('f0b259ca29175656de48bf0fa0a2e619'
-         '54613e5237592691da8903fae05780d9')
+source=(http://downloads.sourceforge.net/htop/htop-$pkgver.tar.gz)
 
 build() {
   cd "$srcdir/htop-$pkgver"
-
-  # Fix tree view
-  # http://sourceforge.net/tracker2/?func=detail&aid=2343835&group_id=108839&atid=651635
-  patch -Np1 -i "$srcdir/htop-treeview.patch" || return 1
-
+  sed -i 's|ncursesw/curses.h|curses.h|' RichString.h RichString.c || return 1
   ./configure --prefix=/usr --enable-unicode || return 1
   make || return 1
   make DESTDIR="$pkgdir" install || return 1
 }
+md5sums=('5c9f093f9eaddf6e77aa6d54c2116d0c')
diff --git a/abs/extra/huludesktop/PKGBUILD b/abs/extra/huludesktop/PKGBUILD
new file mode 100644
index 0000000..b215d19
--- /dev/null
+++ b/abs/extra/huludesktop/PKGBUILD
@@ -0,0 +1,21 @@
+pkgname=huludesktop
+pkgver=0.1
+pkgrel=5
+pkgdesc="Hulu Desktop for Linux"
+arch=(i686)
+url="http://www.hulu.com/labs/hulu-desktop-linux"
+license=('unknown')
+makedepends=('deb2targz')
+depends=('glib2' 'gtk2' 'lirc' 'flashplugin')
+install=huludesktop.install
+options=('')
+source=('http://download.hulu.com/huludesktop_i386.deb' 'huludesktop')
+md5sums=('ee339181b7fb206e2ca2795d46213529')
+
+build() {
+    cd $startdir/src
+    deb2targz huludesktop_i386.deb
+    tar -xzvf huludesktop_i386.tar.gz -C $pkgdir
+    mkdir -p $pkgdir/home/mythtv
+    cp huludesktop $pkgdir/home/mythtv/.huludesktop
+}
diff --git a/abs/extra/huludesktop/huludesktop b/abs/extra/huludesktop/huludesktop
new file mode 100644
index 0000000..c3ae870
--- /dev/null
+++ b/abs/extra/huludesktop/huludesktop
@@ -0,0 +1,25 @@
+[display]
+fullscreen = TRUE
+width = 1024
+height = 576
+pos_x = 201
+pos_y = 179
+
+[remote]
+lirc_device = /dev/lircd
+lirc_remote_identifier = mceusb
+lirc_release_suffix = _UP
+lirc_repeat_threshold = 10
+button_name_up = Up
+button_name_down = Down
+button_name_left = Left
+button_name_right = Right
+button_name_select = OK
+button_name_menu = Home
+
+[flash]
+flash_location = /usr/lib/mozilla/plugins/libflashplayer.so
+
+[version]
+latest = (null)
+eula_version = 0
diff --git a/abs/extra/huludesktop/huludesktop.install b/abs/extra/huludesktop/huludesktop.install
new file mode 100644
index 0000000..271c5a1
--- /dev/null
+++ b/abs/extra/huludesktop/huludesktop.install
@@ -0,0 +1,26 @@
+# arg 1:  the new package version
+post_install() {
+  mv /usr/share/mythtv/is.xml /tmp
+  grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
+  echo "<!--#Hulu-->" >> /tmp/is.xml.tmp
+  echo "   <button>" >> /tmp/is.xml.tmp
+  echo "     <type>STREAM</type>" >> /tmp/is.xml.tmp
+  echo "     <text>Hulu Desktop</text>" >> /tmp/is.xml.tmp
+  echo "     <action>EXEC huludesktop</action>" >> /tmp/is.xml.tmp 
+  echo "   </button>" >> /tmp/is.xml.tmp
+  echo "<!--#Hulu-->" >> /tmp/is.xml.tmp
+  echo "" >> /tmp/is.xml.tmp
+  echo "</mythmenu>" >> /tmp/is.xml.tmp
+  mv /tmp/is.xml.tmp /usr/share/mythtv/is.xml
+}
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_remove() {
+	rm -fr /usr/share/mythtv/appletrailer.xml
+	mv /usr/share/mythtv/is.xml /tmp/is.xml.tmp
+	sed -e '/\#Hulu/,/\#Hulu/d' < /tmp/is.xml.tmp > /usr/share/mythtv/is.xml
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/extra/hunspell/PKGBUILD b/abs/extra/hunspell/PKGBUILD
index 2db38c2..07a6e66 100644
--- a/abs/extra/hunspell/PKGBUILD
+++ b/abs/extra/hunspell/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: Hussam Al-Tayeb <ht990332@gmail.com>
 
 pkgname=hunspell
-pkgver=1.2.8
+pkgver=1.2.11
 pkgrel=1
 pkgdesc="Spell checker and morphological analyzer library and program"
 arch=('i686' 'x86_64')
@@ -12,7 +12,6 @@ license=('GPL' 'LGPL' 'MPL')
 depends=('gcc-libs')
 options=('!libtool')
 source=(http://downloads.sourceforge.net/hunspell/hunspell-$pkgver.tar.gz)
-md5sums=('1177af54a09e320d2c24015f29c3a93e')
 
 build() {
   cd "$srcdir/hunspell-$pkgver"
@@ -21,3 +20,4 @@ build() {
   make || return 1
   make DESTDIR="$pkgdir" install || return 1
 }
+md5sums=('8f57cdc4db091d69e1f682ed4d8ab282')
diff --git a/abs/extra/hunspell/__changelog b/abs/extra/hunspell/__changelog
new file mode 100644
index 0000000..173ca43
--- /dev/null
+++ b/abs/extra/hunspell/__changelog
@@ -0,0 +1 @@
+update to 1.2.11
diff --git a/abs/extra/icon-naming-utils/PKGBUILD b/abs/extra/icon-naming-utils/PKGBUILD
index 82592ff..ce025df 100644
--- a/abs/extra/icon-naming-utils/PKGBUILD
+++ b/abs/extra/icon-naming-utils/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: William Rea <sillywilly@gmail.com>
 
 pkgname=icon-naming-utils
-pkgver=0.8.7
+pkgver=0.8.90
 pkgrel=1
 pkgdesc="Maps the new names of icons for Tango to the legacy names used by the GNOME and KDE desktops."
 arch=(i686 x86_64)
@@ -11,7 +11,6 @@ license=('GPL')
 url="http://tango.freedesktop.org/"
 depends=('perl-xml-simple')
 source=(http://tango.freedesktop.org/releases/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('2bcd77b8b6361831a932a5e76e82b66d')
 
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
@@ -22,3 +21,4 @@ build() {
   make DESTDIR=${startdir}/pkg install
   mv ${startdir}/pkg/usr/share/pkgconfig ${startdir}/pkg/usr/lib/pkgconfig
 }
+md5sums=('dd8108b56130b9eedc4042df634efa66')
diff --git a/abs/extra/imdbpy/PKGBUILD b/abs/extra/imdbpy/PKGBUILD
new file mode 100644
index 0000000..f3fe589
--- /dev/null
+++ b/abs/extra/imdbpy/PKGBUILD
@@ -0,0 +1,28 @@
+# $Id: PKGBUILD 5794 2009-11-19 01:18:33Z andrea $
+# Maintainer: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: Geoffroy Carrier <geoffroy.carrier@koon.fr>
+# Contributor: lang2 <wenzhi.liang@gmail.com>
+
+pkgname=imdbpy
+pkgver=4.6
+pkgrel=1
+pkgdesc="Python bindings for imdb"
+url="http://imdbpy.sourceforge.net/"
+arch=('i686' 'x86_64')
+license=('GPL')
+depends=('python')
+makedepends=('setuptools')
+optdepends=('python-lxml' 'python-sqlalchemy' 'python-sqlobject')
+source=(http://downloads.sourceforge.net/$pkgname/IMDbPY-$pkgver.tar.gz)
+
+build(){
+  cd "$srcdir/IMDbPY-$pkgver"
+  python setup.py install --root="$pkgdir" || return 1
+
+  # fix directories path
+  mv ${pkgdir}/usr/etc ${pkgdir}
+  install -d ${pkgdir}/usr/share
+  mv ${pkgdir}/usr/imdb ${pkgdir}/usr/share
+  mv ${pkgdir}/usr/doc ${pkgdir}/usr/share/imdb/
+}
+md5sums=('876d4cd041fa23633e3637c22bf95622')
diff --git a/abs/extra/irqbalance/PKGBUILD b/abs/extra/irqbalance/PKGBUILD
index 5d823cd..a21cda2 100644
--- a/abs/extra/irqbalance/PKGBUILD
+++ b/abs/extra/irqbalance/PKGBUILD
@@ -3,7 +3,7 @@
 
 pkgname=irqbalance
 pkgver=0.55
-pkgrel=3
+pkgrel=4
 pkgdesc="IRQ balancing daemon for SMP systems"
 arch=('i686' 'x86_64')
 url="http://www.irqbalance.org/"
@@ -11,14 +11,13 @@ license=('GPL')
 depends=(glib2)
 makedepends=(pkgconfig)
 backup=(etc/conf.d/irqbalance)
+install=($pkgname.install)
 source=(http://www.irqbalance.org/releases/$pkgname-$pkgver.tar.gz
         Makefile.irqbalance
         irqbalance.conf.d
-        irqbalance.rc.d)
-md5sums=('9f6b314ff1fdc14173abeb40592d4edf'
-         '45bc9e1d041d8547f2dbf12f887216df'
-         '336c1ee99818f9ecda1687e34c69fd6b'
-         '96efae052553711f74a61760cefa93b5')
+        run
+        finish
+        irqbalance.install)
 
 build() {
   cd $srcdir/$pkgname-$pkgver
@@ -26,7 +25,15 @@ build() {
   cp ../Makefile.irqbalance Makefile
   make || return 1
 
-  install -D -m755 irqbalance $pkgdir/usr/sbin/irqbalance
-  install -D -m644 ../irqbalance.conf.d $pkgdir/etc/conf.d/irqbalance
-  install -D -m755 ../irqbalance.rc.d $pkgdir/etc/rc.d/irqbalance
+  install -D -m755 irqbalance $pkgdir/usr/sbin/irqbalance || return 1
+  mkdir -p $pkgdir/etc/sv/irqbalance || return 1
+  install -D -m644 ../irqbalance.conf.d $pkgdir/etc/conf.d/irqbalance || return 1
+  install -D -m755 ../run $pkgdir/etc/sv/irqbalance || return 1
+  install -D -m755 ../finish $pkgdir/etc/sv/irqbalance || return 1
 }
+md5sums=('9f6b314ff1fdc14173abeb40592d4edf'
+         '45bc9e1d041d8547f2dbf12f887216df'
+         '336c1ee99818f9ecda1687e34c69fd6b'
+         '7f3ee7fb2fccb619f7c66668b6d96d35'
+         'ebb35e88267f4c2e6f68e675c81b2a34'
+         '5f5e96d2fbf35e85d4a8004a3d6b73fc')
diff --git a/abs/extra/irqbalance/finish b/abs/extra/irqbalance/finish
new file mode 100644
index 0000000..ccd9278
--- /dev/null
+++ b/abs/extra/irqbalance/finish
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/irqbalance`
+
+    stat_runit "Stopping IRQ balancing"
+    [ ! -z "$PID" ] && kill $PID &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon irqbalance
+      stat_done
+    fi
diff --git a/abs/extra/irqbalance/irqbalance.install b/abs/extra/irqbalance/irqbalance.install
new file mode 100644
index 0000000..d4e15f1
--- /dev/null
+++ b/abs/extra/irqbalance/irqbalance.install
@@ -0,0 +1,10 @@
+post_install () {
+  add_service.sh irqbalance
+
+}
+
+pre_remove () {
+  remove_service.sh irqbalance
+
+}
+
diff --git a/abs/extra/irqbalance/run b/abs/extra/irqbalance/run
new file mode 100644
index 0000000..f0d18f7
--- /dev/null
+++ b/abs/extra/irqbalance/run
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+# source application-specific settings
+ONESHOT=0
+[ -f /etc/conf.d/irqbalance ] && . /etc/conf.d/irqbalance
+
+if [ "$ONESHOT" -ne 0 ]; then
+	ONESHOT_CMD="oneshot"
+fi
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/irqbalance`
+
+    stat_runit "Starting IRQ balancing"
+    [ -z "$PID" ] && /usr/sbin/irqbalance --debug $ONESHOT_CMD >/dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      if [ "$ONESHOT" -eq 0 ]; then
+        add_daemon irqbalance
+      fi
+      stat_done
+    fi
diff --git a/abs/extra/iso-codes/PKGBUILD b/abs/extra/iso-codes/PKGBUILD
index 21504a3..9477d74 100644
--- a/abs/extra/iso-codes/PKGBUILD
+++ b/abs/extra/iso-codes/PKGBUILD
@@ -2,14 +2,13 @@
 # Maintainer: Jan de Groot <jgc@archlinux.org>
 
 pkgname=iso-codes
-pkgver=2.0
+pkgver=3.18
 pkgrel=1
 arch=(i686 x86_64)
 license=('LGPL')
 pkgdesc="Lists of the country, language, and currency names"
 source=(ftp://pkg-isocodes.alioth.debian.org/pub/pkg-isocodes/${pkgname}-${pkgver}.tar.bz2)
 url="http://pkg-isocodes.alioth.debian.org/"
-md5sums=('58e7fee45749583e11a3880c8e1ae567')
 
 build() {
   cd ${srcdir}/${pkgname}-${pkgver}
@@ -17,3 +16,4 @@ build() {
   make || return 1
   make DESTDIR=${pkgdir} pkgconfigdir=/usr/lib/pkgconfig install || return 1
 }
+md5sums=('96d22a03e307a8e0ca1e43280392cdc4')
diff --git a/abs/extra/iw/PKGBUILD b/abs/extra/iw/PKGBUILD
index 052e6d0..2f66bdc 100644
--- a/abs/extra/iw/PKGBUILD
+++ b/abs/extra/iw/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Thomas Baechler <thomas@archlinux.org>
 
 pkgname=iw
-pkgver=0.9.8
+pkgver=0.9.20
 pkgrel=1
 pkgdesc="nl80211 based CLI configuration utility for wireless devices"
 arch=("i686" "x86_64")
@@ -11,10 +11,10 @@ license=("GPL")
 depends=("libnl")
 makedepends=("kernel-headers")
 source=(http://wireless.kernel.org/download/$pkgname/$pkgname-$pkgver.tar.bz2)
-md5sums=('d39f85e3866b1be5533fe0edce412951')
 
 build() {
   cd $pkgname-$pkgver
   make || return 1
   make DESTDIR=$pkgdir install
 }
+md5sums=('1055799b544b3e08169d155bb6c21bb0')
diff --git a/abs/extra/lcdproc/PKGBUILD b/abs/extra/lcdproc/PKGBUILD
index 7ee6e50..e5cc719 100644
--- a/abs/extra/lcdproc/PKGBUILD
+++ b/abs/extra/lcdproc/PKGBUILD
@@ -1,29 +1,26 @@
 # Contributor: Bernhard Walle <bernhard.walle@gmx.de>
 pkgname=lcdproc
-pkgver=0.5.2
-pkgrel=2
+pkgver=0.5.3
+pkgrel=3
 pkgdesc="LCDproc is a utility to drive one or more LCD (and LCD-like) devices attached to a host."
 url="http://lcdproc.omnipotent.net/"
 license="GPL"
 depends=(libusb serdisplib libftdi autoconf automake lirc libnxml libmrss pkgconfig xosd)
 backup=(etc/LCDd.conf)
 arch=(i686 x86_64)
+install=lcdproc.install
 source=(http://switch.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.gz
-        lcdd
         lcdproc-add-serdisplib
         )
-md5sums=('860f192d061d87dda6512b11b79daac2'
-         '56f52dcccd6e129a9cf84cd1a0452d56'
-         '274322642740ad323c43ec5d324519d4')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
-  patch -p1 < ../lcdproc-add-serdisplib
+#  patch -p1 < ../lcdproc-add-serdisplib
   autoreconf
   ./configure --prefix=/usr --sysconfdir=/etc --enable-libusb --enable-lcdproc-menus --enable-stat-smbfs --enable-drivers=all
   make
   make DESTDIR=$startdir/pkg install
-  sed -e "s/server\/drivers\//\/usr\/lib\/lcdproc\//g" LCDd.conf > $startdir/pkg/etc/LCDd.conf
-  mkdir -p $startdir/pkg/etc/rc.d
-  install -m 755 $startdir/src/lcdd $startdir/pkg/etc/rc.d
+  sed -e "s/server\/drivers\//\/usr\/lib\/lcdproc\//g" LCDd.conf > $pkgdir/etc/LCDd.conf
 }
+md5sums=('fe9a7c9d8f2c5e76250ce2ea8f644921'
+         '274322642740ad323c43ec5d324519d4')
diff --git a/abs/extra/lcdproc/__changelog b/abs/extra/lcdproc/__changelog
index 52c2d35..96fd954 100644
--- a/abs/extra/lcdproc/__changelog
+++ b/abs/extra/lcdproc/__changelog
@@ -1 +1,4 @@
-add xosd
\ No newline at end of file
+add xosd
+# mihanson 2010-04-05
+updated to 0.5.3
+removed lcdproc-add-serdisplib as it does not appear to be needed anymore
diff --git a/abs/extra/lcdproc/lcdproc.install b/abs/extra/lcdproc/lcdproc.install
new file mode 100644
index 0000000..bd3c85e
--- /dev/null
+++ b/abs/extra/lcdproc/lcdproc.install
@@ -0,0 +1,7 @@
+post_install() {
+      add_service.sh lcdd
+}
+
+pre_remove() {
+      remove_service.sh lcdd
+}
diff --git a/abs/extra/libbonobo/PKGBUILD b/abs/extra/libbonobo/PKGBUILD
index 93e2538..de48e25 100644
--- a/abs/extra/libbonobo/PKGBUILD
+++ b/abs/extra/libbonobo/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Jan de Groot <jgc@archlinux.org>
 
 pkgname=libbonobo
-pkgver=2.24.1
+pkgver=2.24.3
 pkgrel=1
 pkgdesc="A set of language and system independant CORBA interfaces for creating reusable components"
 arch=(i686 x86_64)
@@ -16,8 +16,6 @@ url="http://www.gnome.org"
 source=(http://ftp.gnome.org/pub/gnome/sources/libbonobo/2.24/libbonobo-${pkgver}.tar.bz2
 	bonobo-activation-config.xml)
 install=libbonobo.install
-md5sums=('8868b6083392964a6969547ceb8d7cd1'
-         '6392efaca30a26f826eafc4b8ccbc01f')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
@@ -28,3 +26,5 @@ build() {
   make DESTDIR="${pkgdir}" install || return 1
   install -m644 "${srcdir}/bonobo-activation-config.xml" "${pkgdir}/etc/bonobo-activation/" || return 1
 }
+md5sums=('b217cef6a187505290c66c5bf8225d38'
+         '6392efaca30a26f826eafc4b8ccbc01f')
diff --git a/abs/extra/libbonoboui/PKGBUILD b/abs/extra/libbonoboui/PKGBUILD
index b008798..7118102 100644
--- a/abs/extra/libbonoboui/PKGBUILD
+++ b/abs/extra/libbonoboui/PKGBUILD
@@ -2,7 +2,7 @@
 # Maintainer: Jan de Groot <jgc@archlinux.org>
 
 pkgname=libbonoboui
-pkgver=2.24.1
+pkgver=2.24.3
 pkgrel=1
 pkgdesc="User Interface library for Bonobo"
 arch=(i686 x86_64)
@@ -12,7 +12,6 @@ makedepends=('perlxml' 'pkgconfig')
 options=('!libtool' '!emptydirs')
 url="http://www.gnome.org"
 source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.24/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('9ff3ec1c7aefd0b1a15a5b21ecc7b4e4')
 
 build() {
   cd "${srcdir}/${pkgname}-${pkgver}"
@@ -22,3 +21,4 @@ build() {
   make DESTDIR="${pkgdir}" install || return 1
   rm -f "${pkgdir}/usr/share/applications/bonobo-browser.desktop"
 }
+md5sums=('3a754b1df0a4d5fd4836a05020a0bb4a')
diff --git a/abs/extra/libcdio/PKGBUILD b/abs/extra/libcdio/PKGBUILD
index d3aaaa9..1d4cacf 100644
--- a/abs/extra/libcdio/PKGBUILD
+++ b/abs/extra/libcdio/PKGBUILD
@@ -3,8 +3,8 @@
 # Contributor: damir <damir@archlinux.org>
 
 pkgname=libcdio
-pkgver=0.80
-pkgrel=3
+pkgver=0.82
+pkgrel=1
 pkgdesc="GNU Compact Disc Input and Control Library"
 arch=("i686" "x86_64")
 license=('GPL')
@@ -12,7 +12,6 @@ url="http://www.gnu.org/software/libcdio/"
 depends=('gcc-libs>=4.3.0' 'libcddb' 'ncurses')
 options=('!libtool')
 source=(http://ftp.gnu.org/gnu/libcdio/$pkgname-$pkgver.tar.gz)
-md5sums=('6495add276ed11b7ac8a88092799ab4f')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -24,3 +23,4 @@ build() {
   rm ${pkgdir}/usr/share/info/dir
 }
 
+md5sums=('1c29b18e01ab2b966162bc727bf3c360')
diff --git a/abs/extra/libebml/PKGBUILD b/abs/extra/libebml/PKGBUILD
index d537999..ffa4331 100644
--- a/abs/extra/libebml/PKGBUILD
+++ b/abs/extra/libebml/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: 03/08/04 <lefungus@altern.org>
 
 pkgname=libebml
-pkgver=0.7.8
+pkgver=1.0.0
 pkgrel=1
 pkgdesc="Extensible Binary Meta Language library"
 arch=(i686 x86_64)
@@ -18,6 +18,4 @@ build() {
  make || return 1
  make prefix=$startdir/pkg/usr install
 }
-
-
-md5sums=('6278109f52e4f9d2c8a8dfc0d668b587')
+md5sums=('6d438f03d8928d83a2d120ed02705f03')
diff --git a/abs/extra/libftdi/PKGBUILD b/abs/extra/libftdi/PKGBUILD
index b435b9a..b5a72da 100644
--- a/abs/extra/libftdi/PKGBUILD
+++ b/abs/extra/libftdi/PKGBUILD
@@ -1,14 +1,13 @@
 # Contributor: Bernhard Walle <bernhard.walle@gmx.de>
 pkgname=libftdi
-pkgver=0.13
-pkgrel=0
+pkgver=0.18
+pkgrel=1
 pkgdesc="Library to program and control the FTDI USB controller"
 url="http://www.intra2net.com/de/produkte/opensource/ftdi/"
 license="GPL"
 depends=(libusb)
 arch=(i686 x86_64)
 source=(http://www.intra2net.com/de/produkte/opensource/ftdi/TGZ/$pkgname-$pkgver.tar.gz)
-md5sums=('7b4a660fd644980f3d45873d156d021a')
 
 build() {
   cd $startdir/src/$pkgname-$pkgver
@@ -17,3 +16,4 @@ build() {
   make DESTDIR=$startdir/pkg install
 }
 # :mode=shellscript:
+md5sums=('916f65fa68d154621fc0cf1f405f2726')
diff --git a/abs/extra/libmatroska/PKGBUILD b/abs/extra/libmatroska/PKGBUILD
new file mode 100644
index 0000000..f515d3e
--- /dev/null
+++ b/abs/extra/libmatroska/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: damir <damir@archlinux.org>
+# Contributor 03/08/04 <lefungus@altern.org>
+
+pkgname=libmatroska
+pkgver=1.0.0
+pkgrel=1
+pkgdesc="Matroska library"
+arch=(i686 x86_64)
+url="http://dl.matroska.org/downloads/libmatroska/"
+depends=('libebml>=1.0.0')
+#source=(http://www.bunkus.org/videotools/mkvtoolnix/sources/$pkgname-$pkgver.tar.bz2)
+source=($url/$pkgname-$pkgver.tar.bz2)
+
+build() {
+ cd $startdir/src/$pkgname-$pkgver/make/linux
+ make sharedlib || return 1
+ make prefix=$startdir/pkg/usr install
+}
+md5sums=('4efcf3945b17a6f0320cf1aaa326a4de')
diff --git a/abs/extra/libmms/PKGBUILD b/abs/extra/libmms/PKGBUILD
index 81c7474..230b082 100644
--- a/abs/extra/libmms/PKGBUILD
+++ b/abs/extra/libmms/PKGBUILD
@@ -2,7 +2,7 @@
 #Maintainer: Jan de Groot <jgc@archlinux.org>
 
 pkgname=libmms
-pkgver=0.4
+pkgver=0.5
 pkgrel=1
 pkgdesc="MMS stream protocol library"
 arch=(i686 x86_64)
@@ -11,7 +11,6 @@ license=(LGPL)
 depends=('glib2>=2.16.4')
 options=('!libtool')
 source=(http://launchpad.net/libmms/trunk/${pkgver}/+download/libmms-${pkgver}.tar.gz)
-md5sums=('4a681a815186fe26bb1b02ccea57fb75')
 
 build() {
   cd ${startdir}/src/${pkgname}-${pkgver}
@@ -19,3 +18,4 @@ build() {
   make || return 1
   make DESTDIR=${startdir}/pkg install || return 1
 }
+md5sums=('cf83053ec891f14e73a04c84d9de08ee')
diff --git a/abs/extra/lm_sensors/ChangeLog b/abs/extra/lm_sensors/ChangeLog
new file mode 100644
index 0000000..dfec49d
--- /dev/null
+++ b/abs/extra/lm_sensors/ChangeLog
@@ -0,0 +1,50 @@
+2010-02-02  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.1.2-1
+	* Upstream update
+	* Fixed fancontrol daemon script (close FS#17775)
+
+2009-11-23  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.1.1-4
+	* Added more configs in backup array (close FS#17260)
+	* Changed rrdtool optdepends to a depends
+
+2009-11-20  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.1.1-3
+	* Fixed stopping of fancontrol daemon script (close FS#17083)
+	* Fixed healthd script (close FS#17089)
+
+2009-09-28  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.1.1-2
+	* Fixed fancontrol daemon script (close FS#15269)
+	* Added sensord daemon script (close FS#15811)
+
+2009-06-24  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.1.1-1
+	* Upstream update
+	* Added healthd daemon (close FS#14597)
+
+2009-03-03  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.1.0-1
+	* Upstream update
+	* Updated sensors-detect.patch
+
+2009-01-03  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.0.3-2
+	* Rebuilt against rrdtool 1.3.5
+
+2008-11-08  Eric Belanger  <eric@archlinux.org>
+
+	* lm_sensors 3.0.3-1
+	* Upstream update
+	* Updated sensors-detect.patch patch
+	* FHS man pages
+	* Changed sensors daemon script to move config in new location (cf. FS#9516)
+	* Did several other fixes and clean up in sensors daemon script
+	* Added ChangeLog
diff --git a/abs/extra/lm_sensors/PKGBUILD b/abs/extra/lm_sensors/PKGBUILD
index 487a6fe..226139a 100644
--- a/abs/extra/lm_sensors/PKGBUILD
+++ b/abs/extra/lm_sensors/PKGBUILD
@@ -1,41 +1,44 @@
-# $Id: PKGBUILD 8687 2008-08-15 15:06:46Z andyrtr $
-# Maintainer: aurelien <aurelien@archlinux.org>
+# $Id: PKGBUILD 67093 2010-02-03 03:55:56Z eric $
+# Maintainer: Eric Belanger <eric@archlinux.org>
 # Contributor: Aurelien Foret <orelien@chez.com>
+
 pkgname=lm_sensors
-pkgver=3.0.2
-pkgrel=2
-pkgdesc="Collection of user space tools for general SMBus access and hardware monitoring."
+pkgver=3.1.2
+pkgrel=7
+pkgdesc="Collection of user space tools for general SMBus access and hardware monitoring"
 arch=('i686' 'x86_64')
+url="http://www.lm-sensors.org/"
 license=('GPL')
-depends=('perl' 'sysfsutils')
-makedepends=('bison' 'flex' 'rrdtool')
-optdepends=('rrdtool:  for logging with sensord')
-backup=(etc/sensors3.conf)
+depends=('perl' 'sysfsutils' 'rrdtool')
+backup=('etc/sensors3.conf' 'etc/conf.d/healthd' 'etc/conf.d/sensord')
+options=('!emptydirs')
 install=sensors.install
-source=(http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-$pkgver.tar.bz2
-	sensors.rc
-	fancontrol.rc
-	sensors-detect.patch)
-url="http://www.lm-sensors.org/"
-md5sums=('5b210ba9cc01f00161c438fd618484e5'
-         'c9f7f38964963ae3ced4dff3f1f0b7b9'
-         'f14e335a8eea27388892c36af8099782'
-         '6fd30ed1e5ac739b8a27f3913ba706f4')
+source=(http://dl.lm-sensors.org/lm-sensors/releases/lm_sensors-${pkgver}.tar.bz2 \
+	sensors.rc fancontrol.rc sensors-detect.patch healthd healthd.conf healthd.rc \
+        sensord.conf sensord.rc)
+md5sums=('58a9a225808ac4587c4c8cbd12b40b5c' 'c370f5e620bfe41113354a1e22c0c18c'\
+         '1e04aad66debdb72557b4528bf79b742' '47c40b381d1f25d6634ae84cecf35f33'\
+         '6549050897c237514aeaa2bb6cfd29ea' 'f649261f52bd4329347bf93f5f83cb0a'\
+         '970408d2e509dc4138927020efefe323' '96a8dd468e81d455ec9b165bdf33e0b7'\
+         '41a5c20854bbff00ea7174bd2276b736')
+sha1sums=('4a3b13e4f9c18c29e7f853739bdd88ca7799fcc7' 'b2e664b9b87759991f02d0a1e8cac5e95098c0a5'\
+         '66f3cdde688127f4e4e81b5ec3c180149b5c36ea' '47095a32a918d6be50bd8daa8aaa9c24940d60e9'\
+         '78b5cd36c3cb8e98b972cdd8c4a12687d79a79a8' 'c6ddfebc20685ba69700f66038c6b00a7c0bdb80'\
+         'e662881f5d3f3f35a1bc97ba45d2c471dd28c37f' 'de8d4d65406815c389f8a04e2a8508a1ae6749c8'\
+         '72a60251d1d55a67307dab4105d9f3f01a080af4')
 
 build() {
-  cd ${srcdir}/$pkgname-$pkgver
-  patch -Np0 -i ${srcdir}/sensors-detect.patch || return 1
-
-  make PREFIX=/usr PROG_EXTRA:=sensord user || return 1
-  make user_install PREFIX=/usr DESTDIR=${pkgdir}
-  install -DT -m755 ${srcdir}/$pkgname-$pkgver/prog/sensord/sensord ${pkgdir}/usr/sbin/sensord
-
-  install -DT -m755 ${srcdir}/sensors.rc ${pkgdir}/etc/rc.d/sensors
-  install -DT -m755 ${srcdir}/fancontrol.rc ${pkgdir}/etc/rc.d/fancontrol
+  cd "${srcdir}/${pkgname}-${pkgver}"
+  patch -p1 < ../sensors-detect.patch || return 1
 
-  # remove the static lib
-  rm -rf ${pkgdir}/usr/lib/libsensors.a
+  make PROG_EXTRA=sensord BUILD_STATIC_LIB=0 \
+    PREFIX=/usr MANDIR=/usr/share/man DESTDIR="${pkgdir}" install || return 1
 
-  # FIXME: avoid conflicts with glibc headers
-  rm -rf ${pkgdir}/usr/include/linux
+  install -D -m755 "${srcdir}/sensors.rc" "${pkgdir}/etc/rc.d/sensors" || return 1
+  install -D -m755 "${srcdir}/fancontrol.rc" "${pkgdir}/etc/rc.d/fancontrol" || return 1
+  install -D -m755 "${srcdir}/healthd" "${pkgdir}/usr/sbin/healthd" || return 1
+  install -D -m755 "${srcdir}/healthd.rc" "${pkgdir}/etc/rc.d/healthd" || return 1
+  install -D -m644 "${srcdir}/healthd.conf" "${pkgdir}/etc/conf.d/healthd" || return 1
+  install -D -m755 "${srcdir}/sensord.rc" "${pkgdir}/etc/rc.d/sensord" || return 1
+  install -D -m644 "${srcdir}/sensord.conf" "${pkgdir}/etc/conf.d/sensord" || return 1
 }
diff --git a/abs/extra/lm_sensors/fancontrol.rc b/abs/extra/lm_sensors/fancontrol.rc
index 7fc1bbf..bce5d7e 100644
--- a/abs/extra/lm_sensors/fancontrol.rc
+++ b/abs/extra/lm_sensors/fancontrol.rc
@@ -3,10 +3,11 @@
 . /etc/rc.conf
 . /etc/rc.d/functions
 
+PID=$(pidof -o %PPID -x /usr/sbin/fancontrol)
 case "$1" in
   start)
     stat_busy "Starting fancontrol"
-    /usr/sbin/fancontrol >/dev/null 2>&1 &
+    [ -z "$PID" ] && /usr/sbin/fancontrol >/dev/null 2>&1 &
     if [ $? -gt 0 ]; then
       stat_fail
     else
@@ -16,7 +17,7 @@ case "$1" in
     ;;
   stop)
     stat_busy "Stopping fancontrol"
-    [ -f /var/run/fancontrol.pid ] && kill `cat /var/run/fancontrol.pid`
+    [ ! -z "$PID" ]  && kill $PID &> /dev/null
     if [ $? -gt 0 ]; then
       stat_fail
     else
diff --git a/abs/extra/lm_sensors/healthd b/abs/extra/lm_sensors/healthd
new file mode 100644
index 0000000..0315dd7
--- /dev/null
+++ b/abs/extra/lm_sensors/healthd
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+#
+# /usr/sbin/healthd
+#
+
+. /etc/conf.d/healthd
+
+cmd="${ALARM_CMD}"
+addr="${ADMIN_EMAIL}"
+slp="${ALARM_SLEEP}"
+sensors="/usr/bin/sensors"
+
+
+while [ $# -gt 0 ] ; do
+	case "${1}" in
+		-c ) cmd="${2}" ; shift 2 ;;
+		-m ) addr="${2}" ; shift 2 ;;
+		-s ) slp="${2}" ; shift 2 ;;
+		*  ) shift 1 ;;
+	esac
+done
+
+[ -n "${cmd}" ] && [ -n "$( which -- "${cmd%% *}" )" ] || \
+	[ -n "${addr}" ] || exit 1
+
+[ "${slp}" -ge 2 ] || slp=600
+
+while true ; do
+	sleep 15
+	message="$( $sensors )"
+	case "$message" in
+		''      ) message='Could not get any sensor values !' ;;
+		*ALARM* ) : ;;
+		*       ) message='' ;;
+	esac
+	if [ -n "$message" ]; then
+		if [ -n "${addr}" ]; then
+			echo "$message" | mail -s \
+				"Sensors ALARM detected at host: $( hostname )" \
+				"${addr}"
+		fi
+		[ -z "${cmd}" ] || ${cmd} &
+		sleep ${slp}
+	fi
+done &
diff --git a/abs/extra/lm_sensors/healthd.conf b/abs/extra/lm_sensors/healthd.conf
new file mode 100644
index 0000000..36c5f55
--- /dev/null
+++ b/abs/extra/lm_sensors/healthd.conf
@@ -0,0 +1,16 @@
+#
+# /etc/conf.d/healthd
+#
+
+# reset any pending alarms on startup
+ALARM_RESET="yes"
+
+# where to sent mails on alarm
+ADMIN_EMAIL="root"
+
+# Seconds to sleep when alarm detected before checking again
+# If you want to fill up your mail inbox set this to 2. ;-)
+ALARM_SLEEP=600
+
+# command to run in background on each alarm
+ALARM_CMD="beep -f 800 -l 500 -d 500 -r 600"
diff --git a/abs/extra/lm_sensors/healthd.rc b/abs/extra/lm_sensors/healthd.rc
new file mode 100644
index 0000000..7bb7951
--- /dev/null
+++ b/abs/extra/lm_sensors/healthd.rc
@@ -0,0 +1,52 @@
+#!/bin/bash
+
+#
+# /etc/rc.d/healthd
+#
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/healthd
+
+maybe_alarm_reset() {
+  case "${ALARM_RESET}" in
+    yes) /usr/bin/sensors > /dev/null
+    ;;
+    no) true
+    ;;
+    *) false
+    esac
+  return $?
+}
+
+PID=$(pidof -x -o %PPID /usr/sbin/healthd)
+case "${1}" in
+  start)
+    stat_busy "Starting Health Daemon"
+    [ -z "${PID}" ] && maybe_alarm_reset && /usr/sbin/healthd &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      echo "${PID}" > /var/run/healthd.pid
+      add_daemon healthd
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping Health Daemon"
+    [ ! -z "${PID}" ] && kill ${PID} &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon healthd
+      stat_done
+    fi
+    ;;
+  restart) 
+    $0 stop 
+    sleep 2
+    $0 start 
+    ;;
+  *) echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/extra/lm_sensors/sensord.conf b/abs/extra/lm_sensors/sensord.conf
new file mode 100644
index 0000000..a1cf091
--- /dev/null
+++ b/abs/extra/lm_sensors/sensord.conf
@@ -0,0 +1,4 @@
+#
+# Parameters to be passed to sensord
+#
+SENSORD_ARGS=""
diff --git a/abs/extra/lm_sensors/sensord.rc b/abs/extra/lm_sensors/sensord.rc
new file mode 100644
index 0000000..e3ef4d2
--- /dev/null
+++ b/abs/extra/lm_sensors/sensord.rc
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/sensord
+
+PID=$(pidof -o %PPID /usr/sbin/sensord)
+case "$1" in
+  start)
+    stat_busy "Starting sensord"
+    [ -z "$PID" ] && /usr/sbin/sensord ${SENSORD_ARGS}
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      add_daemon sensord
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping sensord"
+    [ ! -z "$PID" ]  && kill $PID &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm_daemon sensord
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"  
+esac
+exit 0
diff --git a/abs/extra/lm_sensors/sensors-detect.patch b/abs/extra/lm_sensors/sensors-detect.patch
index 981ed3d..1d12a2c 100644
--- a/abs/extra/lm_sensors/sensors-detect.patch
+++ b/abs/extra/lm_sensors/sensors-detect.patch
@@ -1,61 +1,61 @@
---- prog/detect/sensors-detect.orig	2008-02-07 20:59:25.125302226 +0100
-+++ prog/detect/sensors-detect	2008-02-07 21:06:53.821929489 +0100
-@@ -5879,21 +5879,21 @@
-     }
-   }
+diff -Naur lm_sensors-3.1.0/prog/detect/sensors-detect lm_sensors-3.1.0-new/prog/detect/sensors-detect
+--- lm_sensors-3.1.0/prog/detect/sensors-detect	2009-03-03 20:36:33.000000000 -0500
++++ lm_sensors-3.1.0-new/prog/detect/sensors-detect	2009-03-03 20:52:06.000000000 -0500
+@@ -5282,21 +5282,21 @@
+ 		}
+ 	}
  
--  my $have_sysconfig = -d '/etc/sysconfig';
--  printf "Do you want to \%s /etc/sysconfig/lm_sensors? (\%s): ",
--         (-e '/etc/sysconfig/lm_sensors' ? 'overwrite' : 'generate'),
-+  my $have_sysconfig = -d '/etc/conf.d';
-+  printf "Do you want to \%s /etc/conf.d/lm_sensors? (\%s): ",
-+         (-e '/etc/conf.d/lm_sensors' ? 'overwrite' : 'generate'),
-          ($have_sysconfig ? 'YES/no' : 'yes/NO');
-   $_ = <STDIN>;
-   if (($have_sysconfig and not m/^\s*n/i) or m/^\s*y/i) {
-     unless ($have_sysconfig) {
--      mkdir '/etc/sysconfig', 0777
--        or die "Sorry, can't create /etc/sysconfig ($!)";
-+      mkdir '/etc/conf.d', 0777
-+        or die "Sorry, can't create /etc/conf.d ($!)";
-     }
--    open(local *SYSCONFIG, ">/etc/sysconfig/lm_sensors")
--      or die "Sorry, can't create /etc/sysconfig/lm_sensors ($!)";
-+    open(local *SYSCONFIG, ">/etc/conf.d/lm_sensors")
-+      or die "Sorry, can't create /etc/conf.d/lm_sensors ($!)";
-     print SYSCONFIG <<'EOT';
--#    /etc/sysconfig/lm_sensors - Defines modules loaded by
--#                                /etc/init.d/lm_sensors
-+#    /etc/conf.d/lm_sensors - Defines modules loaded by
-+#                                /etc/rc.d/sensors
- #    Copyright (c) 1998 - 2001  Frodo Looijaard <frodol@dds.nl>
+-	my $have_sysconfig = -d '/etc/sysconfig';
+-	printf "Do you want to \%s /etc/sysconfig/lm_sensors? (\%s): ",
+-	       (-e '/etc/sysconfig/lm_sensors' ? 'overwrite' : 'generate'),
++	my $have_sysconfig = -d '/etc/conf.d';
++	printf "Do you want to \%s /etc/conf.d/lm_sensors? (\%s): ",
++	       (-e '/etc/conf.d/lm_sensors' ? 'overwrite' : 'generate'),
+ 	       ($have_sysconfig ? 'YES/no' : 'yes/NO');
+ 	$_ = <STDIN>;
+ 	if (($have_sysconfig and not m/^\s*n/i) or m/^\s*y/i) {
+ 		unless ($have_sysconfig) {
+-			mkdir('/etc/sysconfig', 0777)
+-				or die "Sorry, can't create /etc/sysconfig ($!)";
++			mkdir('/etc/conf.d', 0777)
++				or die "Sorry, can't create /etc/conf.d ($!)";
+ 		}
+-		open(local *SYSCONFIG, ">/etc/sysconfig/lm_sensors")
+-			or die "Sorry, can't create /etc/sysconfig/lm_sensors ($!)";
++		open(local *SYSCONFIG, ">/etc/conf.d/lm_sensors")
++			or die "Sorry, can't create /etc/conf.d/lm_sensors ($!)";
+ 		print SYSCONFIG "# Generated by sensors-detect on " . scalar localtime() . "\n";
+ 		print SYSCONFIG <<'EOT';
+-# This file is sourced by /etc/init.d/lm_sensors and defines the modules to
++# This file is sourced by /etc/rc.d/lm_sensors and defines the modules to
+ # be loaded/unloaded.
  #
- #    This program is free software; you can redistribute it and/or modify
-@@ -5914,8 +5914,8 @@
- # See also the lm_sensors homepage at:
- #     http://www.lm-sensors.org/
- #
--# This file is used by /etc/init.d/lm_sensors and defines the modules to
--# be loaded/unloaded. This file is sourced into /etc/init.d/lm_sensors.
-+# This file is used by /etc/rc.d/sensors and defines the modules to
-+# be loaded/unloaded. This file is sourced into /etc/rc.d/sensors.
- #
- # The format of this file is a shell script that simply defines the modules
- # in order as normal variables with the special names:
-@@ -5952,12 +5952,12 @@
-     print SYSCONFIG $sysconfig;
-     close(SYSCONFIG);
+ # The format of this file is a shell script that simply defines variables:
+@@ -5322,13 +5322,13 @@
+ 		}
+ 		close(SYSCONFIG);
+ 
+-		print "Copy prog/init/lm_sensors.init to /etc/init.d/lm_sensors\n".
++		print "Copy prog/init/lm_sensors.init to /etc/rc.d/lm_sensors\n".
+ 		      "for initialization at boot time.\n"
+-			unless -f "/etc/init.d/lm_sensors";
++			unless -f "/etc/rc.d/lm_sensors";
  
--    print "Copy prog/init/lm_sensors.init to /etc/init.d/lm_sensors\n".
-+    print "Copy prog/init/lm_sensors.init to /etc/rc.d/sensors\n".
-           "for initialization at boot time.\n"
--      unless -f "/etc/init.d/lm_sensors";
-+      unless -f "/etc/rc.d/sensors";
+-		if (-x "/sbin/insserv" && -f "/etc/init.d/lm_sensors") {
+-			system("/sbin/insserv", "/etc/init.d/lm_sensors");
+-		} elsif (-x "/sbin/chkconfig" && -f "/etc/init.d/lm_sensors") {
++		if (-x "/sbin/insserv" && -f "/etc/rc.d/lm_sensors") {
++			system("/sbin/insserv", "/etc/rc.d/lm_sensors");
++		} elsif (-x "/sbin/chkconfig" && -f "/etc/rc.d/lm_sensors") {
+ 			system("/sbin/chkconfig", "lm_sensors", "on");
+ 			if (-x "/sbin/service") {
+ 				system("/sbin/service", "lm_sensors", "start");
+@@ -5377,7 +5377,7 @@
+ 		exit -1;
+ 	}
  
--    if (-x "/sbin/insserv" && -f "/etc/init.d/lm_sensors") {
--      system("/sbin/insserv", "/etc/init.d/lm_sensors");
-+    if (-x "/sbin/insserv" && -f "/etc/rc.d/sensors") {
-+      system("/sbin/insserv", "/etc/rc.d/sensors");
-     } elsif (-x "/sbin/chkconfig" && -f "/etc/init.d/lm_sensors") {
-       system("/sbin/chkconfig", "lm_sensors", "on");
-       if (-x "/sbin/service") {
+-	if (-x "/sbin/service" && -f "/etc/init.d/lm_sensors" &&
++	if (-x "/sbin/service" && -f "/etc/rc.d/sensors" &&
+ 	    -f "/var/lock/subsys/lm_sensors") {
+ 		system("/sbin/service", "lm_sensors", "stop");
+ 	}
diff --git a/abs/extra/lm_sensors/sensors.rc b/abs/extra/lm_sensors/sensors.rc
index aa086eb..4acde22 100644
--- a/abs/extra/lm_sensors/sensors.rc
+++ b/abs/extra/lm_sensors/sensors.rc
@@ -1,27 +1,12 @@
 #!/bin/bash
-#
-# chkconfig: 2345 26 74
+
 # description: sensors is used for monitoring motherboard sensor values.
-# config: /etc/sysconfig/sensors
-#
-#    This program is free software; you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation; either version 2 of the License, or
-#    (at your option) any later version.
-#
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
-#
-#    You should have received a copy of the GNU General Public License
-#    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# config: /etc/conf.d/lm_sensors
 
 # See also the lm_sensors homepage at:
 #     http://www2.lm-sensors.nu/~lm78/index.html
 
-# It uses a config file /etc/sysconfig/sensors that contains the modules to
+# It uses a config file /etc/conf.d/lm_sensors that contains the modules to
 # be loaded/unloaded. That file is sourced into this one.
 
 # The format of that file a shell script that simply defines the modules
@@ -31,46 +16,52 @@
 . /etc/rc.conf
 . /etc/rc.d/functions
 
-if grep -q sysfs /proc/mounts; then
+PSENSORS=/usr/bin/sensors
+
+if $(grep -q sysfs /proc/mounts); then
   WITHSYS=1
 else
   WITHSYS=0
 fi
 
-CONFIG=/etc/conf.d/lm_sensors
-PSENSORS=/usr/bin/sensors
-if [ ! -x $PSENSORS ]; then
-  PSENSORS=/usr/bin/sensors
+if [ $WITHSYS == "0" ]; then
+  # If sensors isn't supported by the kernel, try loading the module...
+  [ -e /proc/sys/dev/sensors ] || /sbin/modprobe i2c-proc &>/dev/null
+
+  # Don't bother if /proc/sensors still doesn't exist, kernel doesn't have support for sensors.
+  if ! [ -e /proc/sys/dev/sensors ]; then
+    echo  "lm_sensors: kernel does not have sensors support"
+    stat_fail
+  fi
+
+  # If sensors was not already running, unload the module...
+  [ -e /var/run/daemons/sensors ] || /sbin/modprobe -r i2c-proc &>/dev/null
+fi
+
+if [ -e /etc/conf.d/lm_sensors ]; then
+  CONFIG=/etc/conf.d/lm_sensors
+elif [ -e /etc/sysconfig/lm_sensors ]; then
+  # Moving config to new Arch-specific location
+  mv /etc/sysconfig/lm_sensors /etc/conf.d/lm_sensors
+  CONFIG=/etc/conf.d/lm_sensors
 fi
 
 case "$1" in
   start)
     stat_busy "Starting Up Sensors"
 
-    if [ $WITHSYS == "0" ]; then
-      # If sensors isn't supported by the kernel, try loading the module...
-      [ -e /proc/sys/dev/sensors ] || /sbin/modprobe i2c-proc &>/dev/null
-
-      # Don't bother if /proc/sensors still doesn't exist, kernel doesn't have
-      # support for sensors.
-      [ -e /proc/sys/dev/sensors ] || exit 0
-
-      # If sensors was not already running, unload the module...
-      [ -e /var/lock/subsys/lm_sensors ] || /sbin/modprobe -r i2c-proc &>/dev/null
-    fi
-
-
     if [ -r "$CONFIG" ]; then
-        . "$CONFIG"
-        modules=`grep \^MODULE_ $CONFIG | wc -l | tr -d ' '`
-        i=0
-        while [ $i -lt $modules ] ; do
-            module=`eval echo '$'MODULE_$i`
-            #echo starting module __${module}__ #debug
-           /sbin/modprobe $module &>/dev/null
-           i=`expr $i + 1`
-        done
+      . "$CONFIG"
+      modules=$(grep \^MODULE_ $CONFIG | wc -l | tr -d ' ')
+      i=0
+      while [ $i -lt $modules ] ; do
+        module=$(eval echo '$'MODULE_$i)
+       # echo starting module __${module}__ #debug
+        /sbin/modprobe $module &>/dev/null
+        i=$(expr $i + 1)
+      done
     fi
+
     $PSENSORS -s
 
     if [ $? -gt 0 ]; then
@@ -85,14 +76,15 @@ case "$1" in
     stat_busy "Shutting Down Sensors"
 
     if [ -r "$CONFIG" ]; then
-        . "$CONFIG"
-        modules=`grep \^MODULE_ $CONFIG | wc -l | tr -d ' '`
-        i=`expr $modules`
-        while [ $i -ge 0 ] ; do
-            module=`eval echo '$'MODULE_$i`
-            /sbin/modprobe -r $module &>/dev/null
-            i=`expr $i - 1`
-        done
+      . "$CONFIG"
+      modules=$(grep \^MODULE_ $CONFIG | wc -l | tr -d ' ')
+      i=$(expr $modules - 1)
+      while [ $i -ge 0 ] ; do
+        module=$(eval echo '$'MODULE_$i)
+      #  echo stoping module __${module}__ #debug
+        /sbin/modprobe -r $module &>/dev/null
+        i=$(expr $i - 1)
+      done
     fi
 
     if [ $WITHSYS == "0" ]; then
@@ -107,9 +99,8 @@ case "$1" in
     fi
     ;;
     
-  dostatus)
+  status)
     $PSENSORS
-    RETVAL=$?
     ;;
     
   restart)
@@ -119,9 +110,10 @@ case "$1" in
     ;;
 
   condrestart)
-    [ -e /var/lock/subsys/lm_sensors ] && restart || :
+    [ -e /var/run/daemons/sensors ] && $0 restart || :
     ;;
 
   *)
-    echo "Usage: sensors.init {start|stop|status|restart|reload|condrestart}"
+    echo "Usage: $0 {start|stop|restart|status|condrestart}"
 esac
+exit 0
diff --git a/abs/extra/mediaserv/PKGBUILD b/abs/extra/mediaserv/PKGBUILD
index 0ed43fa..59eed79 100644
--- a/abs/extra/mediaserv/PKGBUILD
+++ b/abs/extra/mediaserv/PKGBUILD
@@ -3,7 +3,7 @@
 
 pkgname=mediaserv
 pkgver=0.05
-pkgrel=5
+pkgrel=20
 pkgdesc="On-demand transcoding server for videos, targetting the Nokia Internet Tablets."
 arch=('i686' 'x86_64')
 license=('ARTISTIC')
@@ -26,3 +26,8 @@ build() {
   cp -a ${srcdir}/.mediaserv/* ${pkgdir}/myth/mediaserv
   install -D -m755 ${srcdir}/run ${srcdir}/finish $startdir/pkg/etc/sv/mediaserv
 }
+md5sums=('94c300a0e95c55dae42a61f77e4e41fe'
+         'e7b6fcc91b73939db350c4854c19e9ee'
+         '68d25630786e76fa36c9e6bb29821367'
+         'd047f0fa5f1d39d864debd8a76f677e2'
+         'f2022c1cc8f04959299c97edde06d023')
diff --git a/abs/extra/mediaserv/linhes-mediaserv.tar.bz2 b/abs/extra/mediaserv/linhes-mediaserv.tar.bz2
index 7630679..6397fb7 100644
Binary files a/abs/extra/mediaserv/linhes-mediaserv.tar.bz2 and b/abs/extra/mediaserv/linhes-mediaserv.tar.bz2 differ
diff --git a/abs/extra/mediaserv/mediaserv.install b/abs/extra/mediaserv/mediaserv.install
index 7a26077..4a9de8e 100644
--- a/abs/extra/mediaserv/mediaserv.install
+++ b/abs/extra/mediaserv/mediaserv.install
@@ -1,8 +1,20 @@
 # arg 1:  the new package version
+
+
 post_install() {
-  ln -s /myth/mediaserv /home/mythtv/.mediaserv
-  ln -s /myth/pretty /myth/mediaserv/media/tv
-  ln -s /myth/video /myth/mediaserv/media/video
+  if [ ! -e /home/mythtv/.mediaserv ]
+  then
+      ln -s /myth/mediaserv /home/mythtv/.mediaserv
+  fi
+
+  if [ ! -e /myth/mediaserv/media/tv ]
+  then
+      ln -s /myth/pretty /myth/mediaserv/media/tv
+  fi
+  if [ ! -e /myth/mediaserv/media/video ]
+  then
+      ln -s /myth/video /myth/mediaserv/media/video
+  fi
   chown -R mythtv.mythtv /myth/mediaserv
   add_service.sh mediaserv
   sv start mediaserv
diff --git a/abs/extra/mediaserv/run b/abs/extra/mediaserv/run
index 82a1705..fbd1c97 100644
--- a/abs/extra/mediaserv/run
+++ b/abs/extra/mediaserv/run
@@ -4,5 +4,5 @@ export TERM=linux
 . /etc/rc.conf
 . /etc/rc.d/functions
 stat_runit "Starting mediaserv"
-exec su mythtv -c "/usr/bin/mediaserv"
+exec su mythtv -c "/usr/bin/mediaserv" 2>/dev/null 
 wait
diff --git a/abs/extra/mime-types/PKGBUILD b/abs/extra/mime-types/PKGBUILD
new file mode 100644
index 0000000..563857d
--- /dev/null
+++ b/abs/extra/mime-types/PKGBUILD
@@ -0,0 +1,17 @@
+# $Id: PKGBUILD 35674 2009-04-15 05:29:19Z eric $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+pkgname=mime-types
+pkgver=1.0
+pkgrel=2
+pkgdesc="Provides /etc/mime.types"
+arch=('i686' 'x86_64')
+url="http://www.archlinux.org/"
+license=('GPL2')
+backup=('etc/mime.types')
+source=(mime.types)
+md5sums=('aa90248272ba2e9dca0a243746686739')
+
+build() {
+  cd ${srcdir}
+  install -D -m644 mime.types ${pkgdir}/etc/mime.types || return 1
+}
diff --git a/abs/extra/mime-types/mime.types b/abs/extra/mime-types/mime.types
new file mode 100644
index 0000000..5a6bbd4
--- /dev/null
+++ b/abs/extra/mime-types/mime.types
@@ -0,0 +1,758 @@
+###############################################################################
+#
+#  MIME-TYPES and the extensions that represent them
+#
+#  This file is part of the mime-types package, which is based on 
+#  gentoo's "app-misc/mime-types".  If you would like new types and/or 
+#  extensions to be added here, please file a bug on http://bugs.archlinux.org
+#
+#  The reason that all types are managed by the mime-support package instead
+#  allowing individual packages to install types in much the same way as they
+#  add entries in to the mailcap file is so these types can be referenced by
+#  other programs (such as a web server) even if the specific support package
+#  for that type is not installed.
+#
+#  Users can add their own types if they wish by creating a ".mime.types"
+#  file in their home directory.  Definitions included there will take
+#  precedence over those listed here.
+#
+#  Note: Compression schemes like "gzip", "bzip", and "compress" are not
+#  actually "mime-types".  They are "encodings" and hence must _not_ have
+#  entries in this file to map their extensions.  The "mime-type" of an
+#  encoded file refers to the type of data that has been encoded, not the
+#  type of encoding.
+#
+###############################################################################
+
+
+application/activemessage
+application/andrew-inset			ez
+application/applefile
+application/atomicmail
+application/batch-SMTP
+application/beep+xml
+application/cals-1840
+application/commonground
+application/cu-seeme				cu
+application/cybercash
+application/dca-rft
+application/dec-dx
+application/docbook+xml
+application/dsptype				tsp
+application/dvcs
+application/edi-consent
+application/edi-x12
+application/edifact
+application/eshop
+application/font-tdpfr
+application/futuresplash			spl
+application/ghostview
+application/hta					hta
+application/http
+application/hyperstudio
+application/iges
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/iotp
+application/ipp
+application/isup
+application/java-archive			jar
+application/java-serialized-object		ser
+application/java-vm				class
+application/mac-binhex40			hqx
+application/mac-compactpro			cpt
+application/macwriteii
+application/marc
+application/mathematica				nb
+application/mathematica-old
+application/msaccess				mdb
+application/msword				doc dot
+application/news-message-id
+application/news-transmission
+application/ocsp-request
+application/ocsp-response
+application/octet-stream			bin
+application/oda					oda
+application/ogg					ogg
+application/parityfec
+application/pdf					pdf
+application/pgp-encrypted
+application/pgp-keys				key
+application/pgp-signature			pgp
+application/pics-rules				prf
+application/pkcs10
+application/pkcs7-mime
+application/pkcs7-signature
+application/pkix-cert
+application/pkix-crl
+application/pkixcmp
+application/postscript				ps ai eps
+application/prs.alvestrand.titrax-sheet
+application/prs.cww
+application/prs.nprend
+application/qsig
+application/rar					rar
+application/rdf+xml				rdf
+application/remote-printing
+application/riscos
+application/rss+xml				rss
+application/rtf
+application/sdp
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/sgml
+application/sgml-open-catalog
+application/sieve
+application/slate
+application/smil				smi smil
+application/timestamp-query
+application/timestamp-reply
+application/vemmi
+application/whoispp-query
+application/whoispp-response
+application/wita
+application/wordperfect				wpd
+application/wordperfect5.1			wp5
+application/x400-bp
+application/xhtml+xml				xhtml xht
+application/xml					xml xsl
+application/xml-dtd
+application/xml-external-parsed-entity
+application/zip					zip
+application/vnd.3M.Post-it-Notes
+application/vnd.accpac.simply.aso
+application/vnd.accpac.simply.imp
+application/vnd.acucobol
+application/vnd.aether.imp
+application/vnd.anser-web-certificate-issue-initiation
+application/vnd.anser-web-funds-transfer-initiation
+application/vnd.audiograph
+application/vnd.bmi
+application/vnd.businessobjects
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.cinderella			cdy
+application/vnd.claymore
+application/vnd.commerce-battelle
+application/vnd.commonspace
+application/vnd.comsocaller
+application/vnd.contact.cmsg
+application/vnd.cosmocaller
+application/vnd.ctc-posml
+application/vnd.cups-postscript
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.cybank
+application/vnd.dna
+application/vnd.dpgraph
+application/vnd.dxr
+application/vnd.ecdis-update
+application/vnd.ecowin.chart
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.enliven
+application/vnd.epson.esf
+application/vnd.epson.msf
+application/vnd.epson.quickanime
+application/vnd.epson.salt
+application/vnd.epson.ssf
+application/vnd.ericsson.quickcall
+application/vnd.eudora.data
+application/vnd.fdf
+application/vnd.ffsns
+application/vnd.flographit
+application/vnd.framemaker
+application/vnd.fsc.weblaunch
+application/vnd.fujitsu.oasys
+application/vnd.fujitsu.oasys2
+application/vnd.fujitsu.oasys3
+application/vnd.fujitsu.oasysgp
+application/vnd.fujitsu.oasysprs
+application/vnd.fujixerox.ddd
+application/vnd.fujixerox.docuworks
+application/vnd.fujixerox.docuworks.binder
+application/vnd.fut-misnet
+application/vnd.grafeq
+application/vnd.groove-account
+application/vnd.groove-identity-message
+application/vnd.groove-injector
+application/vnd.groove-tool-message
+application/vnd.groove-tool-template
+application/vnd.groove-vcard
+application/vnd.hhe.lesson-player
+application/vnd.hp-HPGL
+application/vnd.hp-PCL
+application/vnd.hp-PCLXL
+application/vnd.hp-hpid
+application/vnd.hp-hps
+application/vnd.httphone
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.MiniPay
+application/vnd.ibm.afplinedata
+application/vnd.ibm.modcap
+application/vnd.informix-visionary
+application/vnd.intercon.formnet
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo
+application/vnd.intu.qfx
+application/vnd.irepository.package+xml
+application/vnd.is-xpr
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.koan
+application/vnd.lotus-1-2-3
+application/vnd.lotus-approach
+application/vnd.lotus-freelance
+application/vnd.lotus-notes
+application/vnd.lotus-organizer
+application/vnd.lotus-screencam
+application/vnd.lotus-wordpro
+application/vnd.mcd
+application/vnd.mediastation.cdkey
+application/vnd.meridian-slingshot
+application/vnd.mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf
+application/vnd.mobius.dis
+application/vnd.mobius.msl
+application/vnd.mobius.plc
+application/vnd.mobius.txf
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.mozilla.xul+xml			xul
+application/vnd.ms-artgalry
+application/vnd.ms-asf
+application/vnd.ms-excel			xls xlb xlt
+application/vnd.ms-lrm
+application/vnd.ms-pki.seccat			cat
+application/vnd.ms-pki.stl			stl
+application/vnd.ms-powerpoint			ppt pps
+application/vnd.ms-project
+application/vnd.ms-tnef
+application/vnd.ms-works
+application/vnd.mseq
+application/vnd.msign
+application/vnd.music-niff
+application/vnd.musician
+application/vnd.netfpx
+application/vnd.noblenet-directory
+application/vnd.noblenet-sealer
+application/vnd.noblenet-web
+application/vnd.novadigm.EDM
+application/vnd.novadigm.EDX
+application/vnd.novadigm.EXT
+application/vnd.oasis.opendocument.chart	odc
+application/vnd.oasis.opendocument.database	odb
+application/vnd.oasis.opendocument.formula	odf
+application/vnd.oasis.opendocument.graphics	odg
+application/vnd.oasis.opendocument.graphics-template otg
+application/vnd.oasis.opendocument.image	odi
+application/vnd.oasis.opendocument.presentation	odp
+application/vnd.oasis.opendocument.presentation-template otp
+application/vnd.oasis.opendocument.spreadsheet	ods
+application/vnd.oasis.opendocument.spreadsheet-template ots
+application/vnd.oasis.opendocument.text		odt
+application/vnd.oasis.opendocument.text-master	odm
+application/vnd.oasis.opendocument.text-template ott
+application/vnd.oasis.opendocument.text-web	oth
+application/vnd.osa.netdeploy
+application/vnd.palm
+application/vnd.pg.format
+application/vnd.pg.osasli
+application/vnd.powerbuilder6
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.previewsystems.box
+application/vnd.publishare-delta-tree
+application/vnd.pvi.ptid1
+application/vnd.pwg-xhtml-print+xml
+application/vnd.rapid
+application/vnd.rim.cod				cod
+application/vnd.s3sms
+application/vnd.seemail
+application/vnd.shana.informed.formdata
+application/vnd.shana.informed.formtemplate
+application/vnd.shana.informed.interchange
+application/vnd.shana.informed.package
+application/vnd.smaf				mmf
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.stardivision.calc		sdc
+application/vnd.stardivision.draw		sda
+application/vnd.stardivision.impress		sdd sdp
+application/vnd.stardivision.math		smf
+application/vnd.stardivision.writer		sdw vor
+application/vnd.stardivision.writer-global	sgl
+application/vnd.street-stream
+application/vnd.sun.xml.calc			sxc
+application/vnd.sun.xml.calc.template		stc
+application/vnd.sun.xml.draw			sxd
+application/vnd.sun.xml.draw.template		std
+application/vnd.sun.xml.impress			sxi
+application/vnd.sun.xml.impress.template	sti
+application/vnd.sun.xml.math			sxm
+application/vnd.sun.xml.writer			sxw
+application/vnd.sun.xml.writer.global		sxg
+application/vnd.sun.xml.writer.template		stw
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.symbian.install			sis
+application/vnd.triscape.mxs
+application/vnd.trueapp
+application/vnd.truedoc
+application/vnd.tve-trigger
+application/vnd.ufdl
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.vcx
+application/vnd.vectorworks
+application/vnd.vidsoft.vidconference
+application/vnd.visio				vsd
+application/vnd.vividence.scriptfile
+application/vnd.wap.sic
+application/vnd.wap.slc
+application/vnd.wap.wbxml			wbxml
+application/vnd.wap.wmlc			wmlc
+application/vnd.wap.wmlscriptc			wmlsc
+application/vnd.webturbo
+application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf
+application/vnd.xara
+application/vnd.xfdl
+application/vnd.yellowriver-custom-menu
+application/x-123				wk
+application/x-abiword				abw
+application/x-apple-diskimage			dmg
+application/x-bcpio				bcpio
+application/x-bittorrent			torrent
+application/x-cdf				cdf
+application/x-cdlink				vcd
+application/x-chess-pgn				pgn
+application/x-core
+application/x-cpio				cpio
+application/x-csh				csh
+application/x-debian-package			deb udeb
+application/x-director				dcr dir dxr
+application/x-dms				dms
+application/x-doom				wad
+application/x-dvi				dvi
+application/x-executable
+application/x-flac				flac
+application/x-font				pfa pfb gsf pcf pcf.Z
+application/x-freemind				mm
+application/x-futuresplash			spl
+application/x-gnumeric				gnumeric
+application/x-go-sgf				sgf
+application/x-graphing-calculator		gcf
+application/x-gtar				gtar tgz taz
+application/x-hdf				hdf
+application/x-ica				ica
+application/x-internet-signup			ins isp
+application/x-iphone				iii
+application/x-iso9660-image			iso
+application/x-java-applet
+application/x-java-bean
+application/x-java-jnlp-file			jnlp
+application/x-javascript			js
+application/x-jmol				jmz
+application/x-kchart				chrt
+application/x-kdelnk
+application/x-killustrator			kil
+application/x-koan				skp skd skt skm
+application/x-kpresenter			kpr kpt
+application/x-kspread				ksp
+application/x-kword				kwd kwt
+application/x-latex				latex
+application/x-lha				lha
+application/x-lzh				lzh
+application/x-lzx				lzx
+application/x-maker				frm maker frame fm fb book fbdoc
+application/x-mif				mif
+application/x-ms-wmd				wmd
+application/x-ms-wmz				wmz
+application/x-msdos-program			com exe bat dll
+application/x-msi				msi
+application/x-netcdf				nc
+application/x-ns-proxy-autoconfig		pac
+application/x-nwc				nwc
+application/x-object				o
+application/x-oz-application			oza
+application/x-pkcs7-certreqresp			p7r
+application/x-pkcs7-crl				crl
+application/x-python-code			pyc pyo
+application/x-quicktimeplayer			qtl
+application/x-redhat-package-manager		rpm
+application/x-rx
+application/x-sh				sh
+application/x-shar				shar
+application/x-shellscript
+application/x-shockwave-flash			swf swfl
+application/x-stuffit				sit
+application/x-sv4cpio				sv4cpio
+application/x-sv4crc				sv4crc
+application/x-tar				tar
+application/x-tcl				tcl
+application/x-tex-gf				gf
+application/x-tex-pk				pk
+application/x-texinfo				texinfo texi
+application/x-trash				~ % bak old sik
+application/x-troff				t tr roff
+application/x-troff-man				man
+application/x-troff-me				me
+application/x-troff-ms				ms
+application/x-ustar				ustar
+application/x-videolan
+application/x-wais-source			src
+application/x-wingz				wz
+application/x-x509-ca-cert			crt
+application/x-xcf				xcf
+application/x-xfig				fig
+application/x-xpinstall				xpi
+
+audio/32kadpcm
+audio/basic					au snd
+audio/dvi4
+audio/g.722.1
+audio/g722
+audio/g723
+audio/g726-16
+audio/g726-24
+audio/g726-32
+audio/g726-40
+audio/g728
+audio/g729
+audio/g729d
+audio/g729e
+audio/gsm
+audio/gsm-efr
+audio/l8
+audio/l16
+audio/lpc
+audio/midi					mid midi kar
+audio/mp4a-latm
+audio/mpa
+audio/mpa-robust
+audio/mpeg					mpga mpega mp2 mp3 m4a
+audio/mpegurl					m3u
+audio/parityfec
+audio/pcma
+audio/pcmu
+audio/prs.sid					sid
+audio/qcelp
+audio/red
+audio/telephone-event
+audio/tone
+audio/vdvi
+audio/vnd.cisco.nse
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.digital-winds
+audio/vnd.everad.plj
+audio/vnd.lucent.voice
+audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800
+audio/vnd.nuera.ecelp7470
+audio/vnd.nuera.ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.qcelp
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.vmx.cvsd
+audio/x-aiff					aif aiff aifc
+audio/x-gsm					gsm
+audio/x-mpegurl					m3u
+audio/x-ms-wma					wma
+audio/x-ms-wax					wax
+audio/x-pn-realaudio-plugin
+audio/x-pn-realaudio				ra rm ram
+audio/x-realaudio				ra
+audio/x-scpls					pls
+audio/x-sd2					sd2
+audio/x-wav					wav
+
+chemical/x-alchemy				alc
+chemical/x-cache				cac cache
+chemical/x-cache-csf				csf
+chemical/x-cactvs-binary			cbin cascii ctab
+chemical/x-cdx					cdx
+chemical/x-cerius				cer
+chemical/x-chem3d				c3d
+chemical/x-chemdraw				chm
+chemical/x-cif					cif
+chemical/x-cmdf					cmdf
+chemical/x-cml					cml
+chemical/x-compass				cpa
+chemical/x-crossfire				bsd
+chemical/x-csml					csml csm
+chemical/x-ctx					ctx
+chemical/x-cxf					cxf cef
+#chemical/x-daylight-smiles			smi
+chemical/x-embl-dl-nucleotide			emb embl
+chemical/x-galactic-spc				spc
+chemical/x-gamess-input				inp gam gamin
+chemical/x-gaussian-checkpoint			fch fchk
+chemical/x-gaussian-cube			cub
+chemical/x-gaussian-input			gau gjc gjf
+chemical/x-gaussian-log				gal
+chemical/x-gcg8-sequence			gcg
+chemical/x-genbank				gen
+chemical/x-hin					hin
+chemical/x-isostar				istr ist
+chemical/x-jcamp-dx				jdx dx
+chemical/x-kinemage				kin
+chemical/x-macmolecule				mcm
+chemical/x-macromodel-input			mmd mmod
+chemical/x-mdl-molfile				mol
+chemical/x-mdl-rdfile				rd
+chemical/x-mdl-rxnfile				rxn
+chemical/x-mdl-sdfile				sd sdf
+chemical/x-mdl-tgf				tgf
+#chemical/x-mif					mif
+chemical/x-mmcif				mcif
+chemical/x-mol2					mol2
+chemical/x-molconn-Z				b
+chemical/x-mopac-graph				gpt
+chemical/x-mopac-input				mop mopcrt mpc dat zmt
+chemical/x-mopac-out				moo
+chemical/x-mopac-vib				mvb
+chemical/x-ncbi-asn1				asn
+chemical/x-ncbi-asn1-ascii			prt ent
+chemical/x-ncbi-asn1-binary			val aso
+chemical/x-ncbi-asn1-spec			asn
+chemical/x-pdb					pdb ent
+chemical/x-rosdal				ros
+chemical/x-swissprot				sw
+chemical/x-vamas-iso14976			vms
+chemical/x-vmd					vmd
+chemical/x-xtel					xtel
+chemical/x-xyz					xyz
+
+image/cgm
+image/g3fax
+image/gif					gif
+image/ief					ief
+image/jpeg					jpeg jpg jpe
+image/naplps
+image/pcx					pcx
+image/png					png
+image/prs.btif
+image/prs.pti
+image/svg+xml					svg svgz
+image/tiff					tiff tif
+image/vnd.cns.inf2
+image/vnd.djvu					djvu djv
+image/vnd.dwg
+image/vnd.dxf
+image/vnd.fastbidsheet
+image/vnd.fpx
+image/vnd.fst
+image/vnd.fujixerox.edmics-mmr
+image/vnd.fujixerox.edmics-rlc
+image/vnd.mix
+image/vnd.net-fpx
+image/vnd.svf
+image/vnd.wap.wbmp				wbmp
+image/vnd.xiff
+image/x-cmu-raster				ras
+image/x-coreldraw				cdr
+image/x-coreldrawpattern			pat
+image/x-coreldrawtemplate			cdt
+image/x-corelphotopaint				cpt
+image/x-icon					ico
+image/x-jg					art
+image/x-jng					jng
+image/x-ms-bmp					bmp
+image/x-photoshop				psd
+image/x-portable-anymap				pnm
+image/x-portable-bitmap				pbm
+image/x-portable-graymap			pgm
+image/x-portable-pixmap				ppm
+image/x-rgb					rgb
+image/x-xbitmap					xbm
+image/x-xpixmap					xpm
+image/x-xwindowdump				xwd
+
+inode/chardevice
+inode/blockdevice
+inode/directory-locked
+inode/directory
+inode/fifo
+inode/socket
+
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/http
+message/s-http
+message/news
+message/partial
+message/rfc822
+
+model/iges					igs iges
+model/mesh					msh mesh silo
+model/vnd.dwf
+model/vnd.flatland.3dml
+model/vnd.gdl
+model/vnd.gs-gdl
+model/vnd.gtw
+model/vnd.mts
+model/vnd.vtu
+model/vrml					wrl vrml
+
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/voice-message
+
+text/calendar					ics icz
+text/comma-separated-values			csv
+text/css					css
+text/directory
+text/english
+text/enriched
+text/h323					323
+text/html					html htm shtml
+text/iuls					uls
+text/mathml					mml
+text/parityfec
+text/plain					asc txt text diff pot
+text/prs.lines.tag
+text/x-psp					psp
+text/rfc822-headers
+text/richtext					rtx
+text/rtf					rtf
+text/scriptlet					sct wsc
+text/t140
+text/texmacs					tm ts
+text/tab-separated-values			tsv
+text/uri-list
+text/vnd.abc
+text/vnd.curl
+text/vnd.DMClientScript
+text/vnd.flatland.3dml
+text/vnd.fly
+text/vnd.fmi.flexstor
+text/vnd.in3d.3dml
+text/vnd.in3d.spot
+text/vnd.IPTC.NewsML
+text/vnd.IPTC.NITF
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage
+text/vnd.sun.j2me.app-descriptor		jad
+text/vnd.wap.si
+text/vnd.wap.sl
+text/vnd.wap.wml				wml
+text/vnd.wap.wmlscript				wmls
+text/x-bibtex					bib
+text/x-c++hdr					h++ hpp hxx hh
+text/x-c++src					c++ cpp cxx cc
+text/x-chdr					h
+text/x-crontab
+text/x-csh					csh
+text/x-csrc					c
+text/x-haskell					hs
+text/x-java					java
+text/x-literate-haskell				lhs
+text/x-makefile
+text/x-moc					moc
+text/x-pascal					p pas
+text/x-pcs-gcd					gcd
+text/x-perl					pl pm
+text/x-python					py
+text/x-server-parsed-html
+text/x-setext					etx
+text/x-sh					sh
+text/x-tcl					tcl tk
+text/x-tex					tex ltx sty cls
+text/x-vcalendar				vcs
+text/x-vcard					vcf
+
+video/bmpeg
+video/bt656
+video/celb
+video/dl					dl
+video/dv					dif dv
+video/fli					fli
+video/gl					gl
+video/jpeg
+video/h261
+video/h263
+video/h263-1998
+video/h263-2000
+video/mp1s
+video/mp2p
+video/mp2t
+video/mp4					mp4
+video/mp4v-es
+video/mpeg					mpeg mpg mpe
+video/mpv
+video/nv
+video/parityfec
+video/pointer
+video/quicktime					qt mov
+video/vnd.fvt
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl				mxu
+video/vnd.mts
+video/vnd.nokia.interleaved-multimedia
+video/vnd.vivo
+video/x-la-asf					lsf lsx
+video/x-mng					mng
+video/x-ms-asf					asf asx
+video/x-ms-wm					wm
+video/x-ms-wmv					wmv
+video/x-ms-wmx					wmx
+video/x-ms-wvx					wvx
+video/x-msvideo					avi
+video/x-sgi-movie				movie
+video/x-flv					flv
+
+x-conference/x-cooltalk				ice
+
+x-world/x-vrml					vrm vrml wrl
diff --git a/abs/extra/mkvtoolnix/PKGBUILD b/abs/extra/mkvtoolnix/PKGBUILD
index 21681a9..6404481 100644
--- a/abs/extra/mkvtoolnix/PKGBUILD
+++ b/abs/extra/mkvtoolnix/PKGBUILD
@@ -3,15 +3,14 @@
 # Contributor: 03/08/04 <lefungus@altern.org>
 
 pkgname=mkvtoolnix
-pkgver=2.9.8
+pkgver=4.1.1
 pkgrel=1
 pkgdesc="Set of tools to create, edit and inspect Matroska files"
 arch=('i686' 'x86_64')
 license=('GPL2')
 url="http://www.bunkus.org/videotools/mkvtoolnix/index.html"
-depends=('libmatroska>=0.8.1' 'flac>=1.1.4' 'libvorbis' 'wxgtk>=2.8.0.1' 'file' 'boost' 'lzo2')
+depends=('libmatroska>=1.0.0' 'libebml>=1.0.0' 'flac>=1.1.4' 'libvorbis' 'wxgtk>=2.8.0.1' 'file' 'boost' 'lzo2')
 source=("http://www.bunkus.org/videotools/${pkgname}/sources/${pkgname}-${pkgver}.tar.bz2")
-md5sums=('7b049aa43c6b39dfcb19f5a46d5574ac')
 
 build() {
   cd ${srcdir}/${pkgname}-${pkgver}/
@@ -20,3 +19,4 @@ build() {
   make  || return 1
   make DESTDIR=${pkgdir}/ install
 }
+md5sums=('6f38fefd73b8b95de3ea3feb9de4cdd7')
diff --git a/abs/extra/monitorix-linhes.tar.gz b/abs/extra/monitorix-linhes.tar.gz
new file mode 100644
index 0000000..02ea6e2
Binary files /dev/null and b/abs/extra/monitorix-linhes.tar.gz differ
diff --git a/abs/extra/monitorix/PKGBUILD b/abs/extra/monitorix/PKGBUILD
new file mode 100644
index 0000000..e73fcd1
--- /dev/null
+++ b/abs/extra/monitorix/PKGBUILD
@@ -0,0 +1,58 @@
+# Maintainer: graysky <da_audiophile yahoo>
+
+pkgname=monitorix
+pkgver=1.4.2
+pkgrel=8
+pkgdesc='A lightweight system monitoring tool that uses rrd databases.'
+arch=(i686)
+url=http://www.$pkgname.org/
+license=(GPL)
+depends=(dcron rrdtool lighttpd )
+optdepends=('lm_sensors: enable support for system temp monitoring'
+'hddtemp: enable support for hdd temp monitoring')
+
+backup=(etc/$pkgname.conf)
+source=($url$pkgname-$pkgver.tar.gz
+        monitorix.rc.d)
+md5sums=('6db1bdbeeb0d128622590dfecb9694e4'
+'34e7cb2d78bb4e3ece4aeb4ed26a0d43')
+install=('monitorix.install')
+
+build() {
+  cd $pkgname-$pkgver
+
+  install -D $pkgname.pl $pkgdir/usr/sbin/$pkgname.pl
+  install -D ../$pkgname.rc.d $pkgdir/etc/rc.d/$pkgname
+
+# use LinHES defaults
+  sed -e '/^our $OSTYPE/ s,RHFC,Arch,' \
+      -e '/^our $TITLE/ s,FIBRANET NSP\, SL,LinHES,' \
+      -e '/^our @HDDTEMP_LIST/ s,hda,sda,' \
+      -e '/^our $ENABLE_CROND_MAIL/ s,Y,N,' \
+      -e '/^our $ENABLE_SERVU/ s,Y,N,' \
+      -e '/^our $ENABLE_PORT/ s,Y,N,' \
+      -e '/^our $ENABLE_USER/ s,Y,N,' \
+      -e '/^our $ENABLE_INT/ s,Y,N,' \
+      -e '/^our @HDDTEMP_LIST/ s,hda,sda,' \
+      -e '/^our @MNT_LIST/ s,boot,myth,' \
+      -e '/^\s*"Linux-Arch"/ s,/var/log/httpd/access.log,/var/log/httpd/access_log,' \
+      -e '/^\s*"Linux-Arch"/ s,/var/log/secure,/var/log/auth.log,' \
+      -e '/^\s*"Linux-Arch"/ s,/srv/http,/data/srv/httpd/htdocs,' < $pkgname.conf \
+                                                                        > $pkgdir/etc/$pkgname.conf
+
+  mkdir -p $pkgdir/var/lib/$pkgname/usage
+  cp -r reports $pkgdir/var/lib/$pkgname
+
+  mkdir -p $pkgdir/usr/share/doc/$pkgname
+  cp Changes $pkgname-apache.conf $pkgname-alert.sh README README.nginx TODO \
+     $pkgdir/usr/share/doc/$pkgname
+
+  install -dm777 $pkgdir/data/srv/httpd/htdocs/$pkgname/imgs
+  cp {logo_bot,logo_top,${pkgname}ico}.png $pkgdir/data/srv/httpd/htdocs/$pkgname
+
+  install -D $pkgname.cgi $pkgdir/data/srv/httpd/htdocs/cgi-bin/$pkgname.cgi
+
+  gzip -9 man/man5/$pkgname.conf.5
+  install -Dm644 man/man5/$pkgname.conf.5.gz $pkgdir/usr/share/man/man5/$pkgname.conf.5.gz
+}
+
diff --git a/abs/extra/monitorix/monitorix.install b/abs/extra/monitorix/monitorix.install
new file mode 100644
index 0000000..6c1d1bd
--- /dev/null
+++ b/abs/extra/monitorix/monitorix.install
@@ -0,0 +1,30 @@
+remove_notes() {
+ echo '----------------------------------------------------------------------'
+ echo 'To remove all traces of monitorix from your system, you must manually'
+ echo 'remove the following dir trees (doing so will delete your databases):'
+ echo
+ echo '/var/lib/monitorix'
+ echo '/srv/http/monitorix'
+ echo '----------------------------------------------------------------------'
+}
+
+# $1: The new package version
+# $2: The old package version
+post_upgrade() {
+    echo ''
+    echo '' 
+    echo  'now edit /etc/monitorix.conf'
+    echo ' our $HOSTNAME - your hostname.'
+    echo ' our $ENABLE_LMTEMP - switch this on if you wanna log your temps.'
+    echo ' our @HDDTEMP_LIST - If you system has more than one hdd, add it to the array.'
+    echo ' stats can be seen at http://$THIS_SYSTEMS_IP/monitorix/'
+
+    echo '' 
+    echo '' 
+}
+
+post_install(){
+    . /etc/systemconfig
+    sed -i "s/^our \$HOSTNAME.*$/our \$HOSTNAME = \"${hostname}\"\; /" /etc/monitorix.conf|
+    post_upgrade
+}
diff --git a/abs/extra/monitorix/monitorix.rc.d b/abs/extra/monitorix/monitorix.rc.d
new file mode 100644
index 0000000..9649519
--- /dev/null
+++ b/abs/extra/monitorix/monitorix.rc.d
@@ -0,0 +1,54 @@
+#!/bin/bash
+#
+# @(#) Fibranet NSP, SL
+# Copyright (C) 2005-2009 by Jordi Sanfeliu <jordi@fibranet.cat>
+#
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+case $1 in
+    start)
+        stat_busy "Starting Monitorix"
+        if ck_daemon monitorix; then
+	if [ -x /etc/cron.hourly/sync-monitorix.sh ]; then
+                /etc/cron.hourly/sync-monitorix.sh >/dev/null 2>&1
+        fi
+            # Creates RRDs files if needed
+            /usr/sbin/monitorix.pl create >/dev/null 2>&1 || stat_die $?
+            /usr/sbin/monitorix.pl init >/dev/null 2>&1 || stat_die $?
+            add_daemon monitorix
+        # restart crond so data gets collected
+        /sbin/sv restart cron
+            stat_done
+        else
+            stat_fail
+        fi
+    ;;
+
+    stop)
+        stat_busy "Stopping Monitorix"
+        if ! ck_daemon monitorix; then
+        if [ -x /etc/cron.hourly/sync-monitorix.sh ]; then
+                /etc/cron.hourly/sync-monitorix.sh >/dev/null 2>&1
+        fi
+            /usr/sbin/monitorix.pl stop 2>&1 || stat_die $?
+            rm_daemon monitorix
+        # restart crond data stops getting collected
+        /sbin/sv restart cron
+            stat_done
+        else
+            stat_fail
+        fi
+    ;;
+
+    restart)
+        $0 stop
+        sleep 1
+        $0 start
+    ;;
+    *)
+        echo "usage: $0 {start|stop|restart}"
+    ;;
+esac
+
+exit 0
diff --git a/abs/extra/most/PKGBUILD b/abs/extra/most/PKGBUILD
new file mode 100644
index 0000000..b2d8624
--- /dev/null
+++ b/abs/extra/most/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 57011 2009-10-31 08:09:42Z allan $
+# Maintainer: juergen <juergen@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+
+pkgname=most
+pkgver=5.0.0a
+pkgrel=2
+pkgdesc="A terminal pager similar to 'more' and 'less'"
+arch=('i686' 'x86_64')
+depends=('slang')
+license=('GPL')
+url="ftp://space.mit.edu/pub/davis/most/"
+source=(ftp://space.mit.edu/pub/davis/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('30f2131b67f61716f6fe1f65205da48b')
+
+build() {
+  cd $srcdir/$pkgname-$pkgver
+  ./configure --prefix=/usr --sysconfdir=/etc || return 1
+  make DESTDIR=$pkgdir install || return 1
+}
diff --git a/abs/extra/most/most-debian.patch b/abs/extra/most/most-debian.patch
new file mode 100644
index 0000000..4387420
--- /dev/null
+++ b/abs/extra/most/most-debian.patch
@@ -0,0 +1,1655 @@
+--- most-4.10.2.orig/most.1
++++ most-4.10.2/most.1
+@@ -134,7 +134,7 @@
+ Use this switch when you want to view files
+ containing 8 bit characters.
+ .I most
+-will display the file 16 bytes per line in hexidecimal notation.
++will display the file 16 bytes per line in hexadecimal notation.
+ A typical line looks like:
+ .IP
+ .Ds
+@@ -185,12 +185,13 @@
+ This option is meaningful only when used with the
+ .B \-v
+ option.
++.TP
+ .BI + lineno
+ Start up at
+ .IR lineno .
+ .TP
+-.B +c
+-Make search case sensitive.
++.B -c
++Make searches case sensitive.
+ By default, they are not.
+ .TP
+ .B +d
+@@ -482,7 +483,7 @@
+ descriptors that represent the file name and line number,
+ respectively.  For example, if JED is your editor, then set
+ .B MOST_EDITOR 
+-to 'jed %s -g %d'.
++to 'jed %s -g %d'. This will only work where the %s preceeds the %d.
+ .TP
+ .B MOST_HELP
+ This variable may be used to specify an alternate help file.
+@@ -496,7 +497,7 @@
+ .I most.rc
+ on other systems.
+ .SH CONFIGURATION FILE SYNTAX
+-When most starts up, it tries to read a system confiuration file and
++When most starts up, it tries to read a system configuration file and
+ then a personal configuration file.  These files may be used to
+ specify keybindings and colors.
+ .PP
+--- most-4.10.2.orig/src/buffer.c
++++ most-4.10.2/src/buffer.c
+@@ -44,10 +44,10 @@
+ 
+ Most_Buffer_Type *Most_Buf;
+ 
+-int Most_Num_Lines;
++long long Most_Num_Lines;
+ 
+-unsigned int Most_C_Offset;
+-int Most_C_Line;
++unsigned long long Most_C_Offset;
++long long Most_C_Line;
+ 
+ static unsigned char *beg_of_line1(void)
+ {
+@@ -61,24 +61,29 @@
+      {
+ 	if (*pos == '\n')
+ 	  {
+-	     pos--;
+-	     while ((pos > Most_Beg)
+-		    && (*pos != '\n'))
++	     pos--; /* Skip back the new-line. */
++	     /* This block is UTF-8 safe, because it only scans the
++		buffer for a new-line, and doesn't count
++		characters. */
++	     while ((pos > Most_Beg) && (*pos != '\n'))
+ 	       pos--;
+ 
+-	     if (*pos != '\n') return pos;
++	     if (*pos != '\n') return Most_Beg;
++	     /* from here on *pos == '\n' */
+ 	     if (pos + 1 != cpos)
+ 	       return pos + 1;
+ 	  }
+      }
+-   else pos--;
++   else
++     pos = SLutf8_bskip_char(Most_Beg, pos);
+ 
+    if (*pos != '\n')
+      {
+-	while ((pos > Most_Beg)
+-	       && (*pos != '\n'))
++	/* This block is UTF-8 safe. See comment above. */
++	while ((pos > Most_Beg) && (*pos != '\n'))
+ 	  pos--;
+ 	if (*pos != '\n') return Most_Beg;
++	/* from here on *pos == '\n' */
+ 	return pos + 1;
+      }
+ 
+@@ -93,55 +98,6 @@
+    return pos;
+ }
+ 
+-
+-static unsigned char *forward_columns (unsigned char *b, unsigned char *e, unsigned int num_cols)
+-{
+-   unsigned int col = 0;
+-
+-   while ((b < e)
+-	  && (col < num_cols))
+-     {
+-	unsigned char ch = *b++;
+-	if (((ch >= ' ') && (ch < 0x7F))
+-	    || (ch >= SLsmg_Display_Eight_Bit))
+-	  {
+-	     col++;
+-	     continue;
+-	  }
+-	
+-	if ((ch == '\b') || (ch == '\t') || (ch == '\r'))
+-	  switch (ch)
+-	    {
+-	     case '\b':
+-	       if (Most_V_Opt == 0)
+-		 {
+-		    if (col > 0) col--;
+-		 }
+-	       else col += 2;
+-	       break;
+-	       
+-	     case '\r':
+-	       if (Most_V_Opt == 0)
+-		 col = 0;
+-	       else 
+-		 col += 2;
+-	       break;
+-	       
+-	     case '\t':
+-	       if (Most_T_Opt == 0)
+-		 col = Most_Tab_Width * (col/Most_Tab_Width + 1);
+-	       else
+-		 col += 2;
+-	       break;
+-	    }
+-	else if (ch & 0x80)
+-	  col += 3;
+-	else
+-	  col += 2;
+-     }
+-   return b;
+-}
+-
+ /* does not move point */
+ static unsigned char *end_of_line1(void)
+ {
+@@ -164,6 +120,9 @@
+ 
+    if (*pos != '\n')
+      {
++	/* This block is UTF-8 safe, because it only scans the buffer
++	   for a new-line, and doesn't count characters. */
++
+ 	n = pmax - pos;
+ 	n2 = n % 8;
+ 	pmax = pos + (n - 8);
+@@ -215,7 +174,7 @@
+    ncols = SLtt_Screen_Cols-1;
+    while (1)
+      {
+-	unsigned char *next_b = forward_columns (b, e, ncols);
++	unsigned char *next_b = most_forward_columns (b, e, ncols, 1);
+ 	if ((next_b == e) || (next_b == b))
+ 	  break;
+ 	
+@@ -237,11 +196,12 @@
+      return e;
+ 
+    if (b == NULL) b = most_beg_of_line ();
+-   b = forward_columns (b, e, SLtt_Screen_Cols-1);
++   b = most_forward_columns (b, e, SLtt_Screen_Cols-1, 1);
+    
+    /* Do not wrap the line if the last character falls on the last column 
+     * of the display.
+     */
++   /* FIXME potential bug if dealing with multi-byte char. */
+    if ((b + 1 <= e) 
+        && (b + 1 < Most_Eob) 
+        && (b[1] == '\n'))
+@@ -250,10 +210,10 @@
+    return b;
+ }
+ 
+-int most_forward_line(int save)
++long long most_forward_line(long long save)
+ {
+-   int m;
+-   register int n = save;
++   long long m;
++   register long long n = save;
+    unsigned char *p;
+    unsigned char *pmax;
+ 
+@@ -346,14 +306,14 @@
+ }
+ 
+ /* Count lines in the region.  A half line counts as 1 */
+-int most_count_lines(unsigned char *beg, unsigned char *end)
++long long most_count_lines(unsigned char *beg, unsigned char *end)
+ {
+-   int save_line, n;
++   long long save_line, n;
+    unsigned char *save_beg, *save_eob;
+-   unsigned int save_pos;
++   unsigned long long save_pos;
+    int dn = 1000;
+ 
+-   if (Most_B_Opt) return(1 + (int)(end - beg) / 16);
++   if (Most_B_Opt) return(1 + (long long)(end - beg) / 16);
+ 
+    save_line = Most_C_Line; save_beg = Most_Beg; save_eob = Most_Eob;
+    save_pos = Most_C_Offset;
+@@ -371,9 +331,9 @@
+    return(n);
+ }
+ 
+-void most_goto_line(int line)
++void most_goto_line(long long line)
+ {
+-   int dif_c, dif_b,dif_t;
++   long long dif_c, dif_b,dif_t;
+ 
+    if (line < 1) line = 1;
+    most_read_to_line(line);
+@@ -420,7 +380,7 @@
+ }
+ 
+ /* return line the point is on without the final '\n's  */
+-int most_extract_line(unsigned char **beg, unsigned char **end)
++long long most_extract_line(unsigned char **beg, unsigned char **end)
+ {
+    *beg = most_beg_of_line();
+    *end = end_of_line (*beg);
+@@ -428,12 +388,12 @@
+    return 0;
+ }
+ 
+-int most_what_line(unsigned char *pos)
++long long most_what_line(unsigned char *pos)
+ {
+-   unsigned int save_pos;
+-   int save_line, dir;
+-   register int dif_c, dif_b,dif_t;
+-   int ret;
++   unsigned long long save_pos;
++   long long save_line, dir;
++   register long long dif_c, dif_b,dif_t;
++   long long ret;
+ 
+    if (Most_B_Opt)
+      {
+@@ -517,7 +477,7 @@
+ }
+ 
+ /* given a buffer position, find the line and column */
+-void most_find_row_column(unsigned char *pos, int *r, int *c)
++void most_find_row_column(unsigned char *pos, long long *r, long long *c)
+ {
+    unsigned char *beg;
+    unsigned int save_offset;
+@@ -545,7 +505,10 @@
+     /* Now we have found the line it is on so.... */
+    beg = most_beg_of_line();
+    *c = 1;
+-   while (beg++ < pos) *c = *c + 1;
++   if (Most_UTF8_Mode)
++     while ((beg = SLutf8_skip_char(beg, pos)) < pos) *c = *c + 1;
++   else
++     while (beg++ < pos) *c = *c + 1;
+    Most_C_Line = save_line;
+    Most_C_Offset = save_offset;
+ }
+--- most-4.10.2.orig/src/buffer.h
++++ most-4.10.2/src/buffer.h
+@@ -23,12 +23,12 @@
+ 
+ extern Most_Buffer_Type *Most_Buf;
+ extern unsigned char *Most_Beg, *Most_Eob;
+-extern int Most_Num_Lines;
++extern long long Most_Num_Lines;
+ 
+ /* Offset of current position from beginning of buffer */
+-extern unsigned int Most_C_Offset;
++extern unsigned long long Most_C_Offset;
+ 
+-extern int Most_C_Line;
++extern long long Most_C_Line;
+ /*
+  *  Current line number.  If at the beginning of the buffer, it is 1.  If
+  *  we are at the last point of the buffer it is the number of lines.
+@@ -37,26 +37,26 @@
+ /* This routine does not move the point */
+ extern unsigned char *most_beg_of_line(void);
+ 
+-extern int most_forward_line(int);
++extern long long most_forward_line(long long);
+ /* This routine moves the point forward n lines. n can be negative.
+    It returns the number moved. */
+ 
+-extern void most_goto_line(int);
++extern void most_goto_line(long long);
+ /* Move the point somewhere on the nth line of the buffer returning
+    C_POS */
+ 
+-extern int most_what_line(unsigned char *);
++extern long long most_what_line(unsigned char *);
+ /* return the line number of position 'argument'. Does not move point */
+ 
+ /* count the number of lines in the region delimited by beg and end.
+    Counts lines from beg up to end but does not count end.
+    Does not move point. */
+-extern int most_count_lines(unsigned char *, unsigned char *);
+-extern int most_extract_line(unsigned char **, unsigned char **);
++extern long long most_count_lines(unsigned char *, unsigned char *);
++extern long long most_extract_line(unsigned char **, unsigned char **);
+ 
+ extern Most_Buffer_Type *most_switch_to_buffer(Most_Buffer_Type *);
+ extern Most_Buffer_Type *most_create_buffer(char *);
+-extern void most_find_row_column(unsigned char *, int *, int *);
++extern void most_find_row_column(unsigned char *, long long *, long long *);
+ 
+ #endif
+ 
+--- most-4.10.2.orig/src/keym.c
++++ most-4.10.2/src/keym.c
+@@ -228,7 +228,7 @@
+ static void goto_percent_cmd(void)
+ {
+    unsigned char *pos;
+-   int n;
++   long long n;
+ 
+    if (Most_Digit_Arg != (int *) NULL) n = *Most_Digit_Arg;
+    else
+@@ -282,7 +282,7 @@
+ 
+ static void find_next_cmd(void)
+ {
+-   int col, line, n = 1;
++   long long col, line, n = 1;
+    unsigned long ofs;
+ 
+    if (Most_Digit_Arg != NULL) n = *Most_Digit_Arg;
+@@ -309,7 +309,7 @@
+ #else
+ 				 "Search: ",
+ #endif
+-				 Most_Search_Str,
++				 (char *) Most_Search_Str,
+ 				 MOST_SEARCH_BUF_LEN
+ 				 ) == -1) return;
+    Most_Curs_Offset = Most_C_Offset;
+@@ -325,7 +325,7 @@
+ #else
+ 				 "Search Backwards: ",
+ #endif
+-				 Most_Search_Str,
++				 (char *) Most_Search_Str,
+ 				 MOST_SEARCH_BUF_LEN) == -1) return;
+    find_next_cmd();
+ }
+--- most-4.10.2.orig/src/line.c
++++ most-4.10.2/src/line.c
+@@ -87,8 +87,7 @@
+    while (b < end)
+      {
+         ch = *b++;
+-	if (((ch >= ' ') && (ch < 0x7F))
+-	    || (ch >= SLsmg_Display_Eight_Bit))
++	if (most_isprint(ch))
+ 	  {
+ 	     *s++ = ch;
+ 	     continue;
+@@ -108,103 +107,156 @@
+ 
+    if (end > Most_Eob) end = Most_Eob;
+ 
+-   sprintf (buf, "0x%08X: ", Most_C_Offset);
++   sprintf (buf, "0x%08llX: ", Most_C_Offset);
+    ascii_format_line (beg, end, buf + 12);
+    SLsmg_write_string (buf);
+    SLsmg_erase_eol ();
+ }
+ 
+-static int most_analyse_line(unsigned char *begg, unsigned char *endd, 
+-			     char *out, char *attributes)
++int most_isprint(unsigned char ch)
+ {
+-   unsigned char *beg, *end;
+-   unsigned int min_col, max_col;
+-   unsigned int i, i_max;
++   /* Can this be directly replaced with isprint? */
++   return (ch >= ' ' && ch < 0x7F) || ch >= SLsmg_Display_Eight_Bit;
++}
++
++static void most_analyse_line(unsigned char *beg, unsigned char *end,
++			      unsigned char *out, char *attributes)
++{
++   unsigned char *pout;
++   char* pattributes;
++
++   /* Holds the number of columns for the current character counting
++    * from the left margin (in contrast to the leftmost visible
++    * column).
++    */
++   unsigned int col;
++
++   /* Holds the number of the column up to which to apply the
++    * current/following formatting. Only meaningful when format_rlim > i.
++    */
++   unsigned int format_rlim;
+ 
+-   beg = begg;
+-   end = endd;
+-   i = i_max = 0;
+-   min_col = Most_Column - 1;
+-   max_col = min_col + SLtt_Screen_Cols;
++   beg = most_forward_columns(beg, end, Most_Column - 1, 0);
++   pout = out;
++   pattributes = attributes;
++   col = format_rlim = 0;
+ 
+    while (beg < end)
+      {
+ 	char attr = ' ';
+-	unsigned char ch;
++	unsigned char ch = *beg++;
+ 
+-	if ('\n' == (ch = *beg++))
++	if ('\n' == ch)
+ 	  break;
+ 	
+ 	if ((ch == '\r') && (Most_V_Opt == 0))
+ 	  {
+-	     if (i > i_max) i_max = i;
+-	     i = 0;
++	     if (col > format_rlim) format_rlim = col;
++	     col = 0;
+ 	     continue;
+ 	  }
+ 	
+ 	if ((ch == '\b') && (Most_V_Opt == 0))
+ 	  {
+-	     if (i > i_max) i_max = i;
+-	     if (i > 0)
+-	       i--;
++	     if (col > format_rlim) format_rlim = col;
++	     if (col > 0)
++	       {
++		  if (Most_UTF8_Mode)
++		    {
++		       SLwchar_Type wc;
++		       pout = SLutf8_bskip_char(out, pout);
++		       if (SLutf8_decode(pout, pout + SLUTF8_MAX_MBLEN, &wc, NULL))
++			 {
++			    unsigned int char_len = SLwchar_wcwidth(wc);
++			    if (char_len > 1)
++			      col -= char_len - 1;
++			 }
++		    }
++		  else
++		    pout--;
++		  pattributes--;
++		  col--;
++	       }
+ 	     continue;
+ 	  }
+ 	
+-	if (i < i_max)		       /* overstrike */
++	if (col < format_rlim)		       /* overstrike */
+ 	  {
+ 	     attr = 'b';
+-	     if ((i >= min_col) && (i < max_col))
++	     if (col < SLtt_Screen_Cols)
+ 	       {
+-		  if (out[i-min_col] == '_')
++		  if (*pout == '_')
+ 		    attr = 'u';
+ 		  else if (ch == '_')
+ 		    {
+ 		       attr = 'u';
+-		       ch = out[i - min_col];
++		       ch = *pout;
+ 		    }
+ 	       }
+ 	     if (ch == ' ')
+ 	       {
+-		  i++;
++		  col++;
+ 		  continue;
+ 	       }
+ 	     /* drop */
+ 	  }
+-	
+-	if ((ch >= ' ') && (ch < 0x7F))
+-	  {
+-	     if ((i >= min_col) && (i < max_col))
++
++	if (Most_UTF8_Mode) {
++	   unsigned char *prev = --beg;
++	   SLwchar_Type wc;
++	   unsigned int len;
++
++	   if (SLutf8_decode(beg, end, &wc, NULL))
++	     {
++	        unsigned int char_len = SLwchar_wcwidth(wc);
++		if (char_len > 1)
++	          col += char_len - 1;
++	     }
++
++	   beg = SLutf8_skip_char(beg, end);
++	   len = beg - prev;
++
++	   if (len > 1) {
++	     /* Non-ASCII char, display it. */
++	     if (col < SLtt_Screen_Cols)
+ 	       {
+-		  out[i-min_col] = ch;
+-		  attributes[i-min_col] = attr;
++		  memcpy(pout, prev, len);
++		  pout += len;
++		  *pattributes++ = attr;
+ 	       }
+-	     i++;
++	     col++;
+ 	     continue;
+-	  }
+-	
+-	if (ch >= SLsmg_Display_Eight_Bit)
++	   }
++	}
++
++	if (most_isprint(ch))
+ 	  {
+-	     if ((i >= min_col) && (i < max_col))
++	     if (col < SLtt_Screen_Cols)
+ 	       {
+-		  out[i-min_col] = ch;
+-		  attributes[i-min_col] = attr;
++		  *pout++ = ch;
++		  *pattributes++ = attr;
+ 	       }
+-	     i++;
++	     col++;
+ 	     continue;
+ 	  }
+ 
+ 	if ((ch == '\t') && (Most_T_Opt == 0) && (Most_Tab_Width))
+ 	  {
+-
+-	     int nspaces = Most_Tab_Width * (i/Most_Tab_Width + 1) - i;
++	     /* Tab expansion must take into consideration the
++	      * leftmost visible column. However, variable col holds the
++	      * number of columns from the left margin and must be
++	      * corrected.
++	      */
++	     int vis_col = col + Most_Column - 1;
++	     int nspaces = Most_Tab_Width - (vis_col % Most_Tab_Width);
+ 	     while (nspaces > 0)
+ 	       {
+-		  if ((i >= min_col) && (i < max_col))
++		  if (col < SLtt_Screen_Cols)
+ 		    {
+-		       out[i-min_col] = ' ';
+-		       attributes[i-min_col] = attr;
++		       *pout++ = ' ';
++		       *pattributes++ = attr;
+ 		    }
+-		  i++;
++		  col++;
+ 		  nspaces--;
+ 	       }
+ 	     continue;
+@@ -212,36 +264,36 @@
+ 
+ 	if (ch & 0x80)
+ 	  {
+-	     if ((i >= min_col) && (i < max_col))
++	     if (col < SLtt_Screen_Cols)
+ 	       {
+-		  out[i-min_col] = '~';
+-		  attributes[i-min_col] = attr;
++		  *pout++ = '~';
++		  *pattributes++ = attr;
+ 	       }
+-	     i++;
++	     col++;
+ 	     ch &= 0x7F;
+ 	     /* drop */
+ 	  }
+ 	
+-	if ((i >= min_col) && (i < max_col))
++	if (col < SLtt_Screen_Cols)
+ 	  {
+-	     out[i-min_col] = '^';
+-	     attributes[i-min_col] = attr;
++	     *pout++ = '^';
++	     *pattributes++ = attr;
+ 	  }
+-	i++;
++	col++;
+ 	
+ 	if (ch == 0x7F) ch = '?';
+ 	else ch += '@';
+ 	
+-	if ((i >= min_col) && (i < max_col))
++	if (col < SLtt_Screen_Cols)
+ 	  {
+-	     out[i-min_col] = ch;
+-	     attributes[i-min_col] = attr;
++	     *pout++ = ch;
++	     *pattributes++ = attr;
+ 	  }
+-	i++;
++	col++;
+      }
+ 
+-   if (i < i_max) 
+-     i = i_max;
++   if (col < format_rlim) 
++     col = format_rlim;
+ 
+    /* Now add "..." if selective display.  To do that, the next line needs to 
+     * be dealt with to determine whether or not it will be hidden.
+@@ -249,7 +301,7 @@
+    if (Most_Selective_Display 
+        && (Most_W_Opt == 0)
+        && (beg < Most_Eob)
+-       && ((i >= min_col) && (i < max_col)))
++       && (col < SLtt_Screen_Cols))
+      {
+ 	if (*beg == '\n') beg++;
+ 
+@@ -260,37 +312,29 @@
+ 	if ((beg >= Most_Eob) || (*beg == '\n') 
+ 	    || (most_apparant_distance(beg) >= Most_Selective_Display))
+ 	  {
+-	     i_max = i + 3;
+-	     while (i < i_max)
++	     /* Add an ellipsis, if they fit on the screen. */
++	     int rlimit = col + 3;
++	     while (col < rlimit)
+ 	       {
+-		  if (i < max_col)
++		  if (col < SLtt_Screen_Cols)
+ 		    {
+-		       out[i] = '.';
+-		       attributes[i] = ' ';
++		       *pout++ = '.';
++		       *pattributes++ = ' ';
+ 		    }
+-		  i++;
++		  col++;
+ 	       }
+ 	  }
+      }
+-   
+-   i_max = i;
+ 
+-   if (i < min_col)
+-     i = min_col;
+-   else if (i >= max_col)
+-     i = max_col;
+-
+-   i -= min_col;
+-
+-   out[i] = 0;
+-   attributes[i] = 0;
+-   return i_max;
++   *pout = 0;
++   *pattributes = 0;
+ }
+ 
+-static void output_with_attr (unsigned char *out, unsigned char *attr)
++static void output_with_attr (unsigned char *out, char *attr)
+ {
+-   unsigned char at, ch, lat;
++   unsigned char at, lat;
+    unsigned char *p = out;
++   unsigned char *pmax = p + strlen((char *) p);
+ 
+    if (Most_V_Opt) 
+      {
+@@ -299,7 +343,7 @@
+      }
+ 
+    lat = ' ';
+-   while ((ch = *p) != 0)
++   while (p < pmax)
+      {
+ 	if (lat != *attr)
+ 	  {
+@@ -321,7 +365,7 @@
+ 	     else most_tt_normal_video ();
+ 	     lat = at;
+ 	  }
+-	p++;
++	p = SLutf8_skip_char(p, pmax);
+ 	attr++;
+      }
+ 
+@@ -340,10 +384,11 @@
+ void most_display_line (void)
+ {
+    unsigned char *beg, *end;
+-   unsigned int len;
++#if 0
+    unsigned char dollar;
++#endif
+    static unsigned char *line;
+-   static unsigned char *attr;
++   static char *attr;
+    static unsigned int line_len;
+ 
+    if (Most_B_Opt)
+@@ -357,37 +402,43 @@
+    if (line_len < (unsigned int)(SLtt_Screen_Cols + 1) * SLUTF8_MAX_MBLEN)
+      {
+ 	SLfree ((char *) line);
+-	SLfree ((char *) attr);
++	SLfree (attr);
+ 	
+ 	line_len = (SLtt_Screen_Cols + 1) * SLUTF8_MAX_MBLEN;
+ 	
+ 	if ((NULL == (line = (unsigned char *) SLmalloc (line_len)))
+-	    || (NULL == (attr = (unsigned char *) SLmalloc (line_len))))
++	    || (NULL == (attr = SLmalloc (line_len))))
+ 	  most_exit_error ("Out of memory");
+      }
+ 
+    (void) most_extract_line (&beg, &end);
+ 
+-   len = most_analyse_line(beg, end, (char *) line, (char *) attr);
++   most_analyse_line(beg, end, line, attr);
+ 
++#if 0
++   /* Currently the dollar sign is not always being written at the
++      rightmost column when displaying multi-byte characters. */
+    dollar = 0;
+    if (Most_W_Opt)
+      {
+-	if ((end < Most_Eob)
+-	    && (*end != '\n'))
+-	  dollar = '\\';
++       if ((end < Most_Eob)
++           && (*end != '\n'))
++         dollar = '\\';
+      }
+    else if (len > (unsigned int) SLtt_Screen_Cols + (Most_Column - 1))
+      dollar = '$';
+-   
++
+    if (dollar)
+      {
+-	line[SLtt_Screen_Cols-1] = dollar;
+-	attr[SLtt_Screen_Cols-1] = ' ';
+-	line[SLtt_Screen_Cols] = 0;
+-	attr[SLtt_Screen_Cols] = 0;
++       unsigned char *pline =
++	 most_forward_columns(line, line + line_len, SLtt_Screen_Cols-1, 1);
++       *pline = dollar;
++       *(pline+1) = 0;
++       attr[SLtt_Screen_Cols-1] = ' ';
++       attr[SLtt_Screen_Cols] = 0;
+      }
+-   
++#endif
++
+    output_with_attr (line, attr);
+    SLsmg_erase_eol ();
+ }
+@@ -398,21 +449,34 @@
+ int most_apparant_distance (unsigned char *pos)
+ {
+    int i;
+-   unsigned char *save_pos, ch;
++   unsigned char *save_pos, *beg, ch;
+    unsigned int save_offset;
+ 
+    save_offset = Most_C_Offset;
+    save_pos = pos;
+    Most_C_Offset = (unsigned int) (pos - Most_Beg);
+-   pos = most_beg_of_line();
++   beg = pos = most_beg_of_line();
+    Most_C_Offset = save_offset;
+ 
+    i = 0;
+    while (pos < save_pos)
+      {
+-	ch = *pos++;
+-	if (((ch >= ' ') && (ch < 0x7F))
+-	    || (ch >= SLsmg_Display_Eight_Bit))
++	ch = *pos;
++
++	if (Most_UTF8_Mode) {
++	   unsigned char *prev = pos;
++	   int len;
++	   pos = SLutf8_skip_char(pos, save_pos);
++	   len = pos - prev;
++	   if (len > 1) {
++	     i++;
++	     continue;
++	   }
++	} else {
++	   pos++;
++	}
++
++	if (most_isprint(ch))
+ 	  {
+ 	     i++;
+ 	     continue;
+@@ -420,7 +484,13 @@
+ 
+ 	if (!Most_V_Opt && (ch == '\b'))
+ 	  {
+-	     if (i > 0) i--;
++	     if (i > 0)
++	       {
++		  if (Most_UTF8_Mode)
++		    i -= pos - SLutf8_bskip_char(beg, pos);
++		  else
++		    i--;
++	       }
+ 	  }
+ 	else if (!Most_V_Opt && (ch == '\015')) /* ^M */
+ 	  {
+@@ -439,3 +509,95 @@
+      }
+    return i;
+ }
++
++/*
++ * Returns a pointer to the num_cols'th character after the one
++ * pointed at b. Invisible character runs are not counted toward this
++ * limit, i.e. strings that represent attributes, such as "_\b" for
++ * underlines.
++ *
++ * If multi_column is non-zero, characters spanning more than one
++ * column will add their extra width to the column count.
++ *
++ * If there the end of the buffer is reached, as delimited by argument
++ * e, then e is returned.
++ */
++unsigned char *most_forward_columns (unsigned char *beg, unsigned char *e, unsigned int num_cols, int multi_column)
++{
++   unsigned int col = 0;
++   unsigned int prev_width = 1;
++   unsigned char* b = beg;
++
++   while ((b < e)
++	  && ((col < num_cols)
++	      || (*b == '\b')
++	      || (*b == '\r')))
++     {
++	unsigned char ch = *b;
++
++	if (Most_UTF8_Mode)
++	  {
++	     unsigned char *prev = b;
++	     int len;
++	     b = SLutf8_skip_char(b, e);
++	     len = b - prev;
++	     if (len > 1)
++	       {
++		  if (multi_column)
++		    {
++		        SLwchar_Type wc;
++			if (SLutf8_decode(prev, e, &wc, NULL))
++			  col += prev_width = SLwchar_wcwidth(wc);
++		    }
++		  else
++		    col++;
++		  continue;
++	       }
++	  }
++	else
++	  b++;
++
++	if (most_isprint(ch))
++	  {
++	     col++;
++	     prev_width = 1;
++	     continue;
++	  }
++
++	if ((ch == '\b') || (ch == '\t') || (ch == '\r'))
++	  switch (ch)
++	    {
++	     case '\b':
++	       if (Most_V_Opt == 0)
++		 {
++		    if (col > 0) col -= prev_width;
++		 }
++	       else col += 2;
++	       break;
++
++	     case '\r':
++	       if (Most_V_Opt == 0)
++		 col = 0;
++	       else
++		 col += 2;
++	       break;
++
++	     case '\t':
++	       if (Most_T_Opt == 0)
++		 col = Most_Tab_Width * (col/Most_Tab_Width + 1);
++	       else
++		 col += 2; /* ^I is two chars long. */
++	       break;
++	    }
++	else if (ch & 0x80)
++	  col += 3;
++	else
++	  col += 2;
++     }
++
++   /* Last character was too wide. Backstep it. */
++   if (col > num_cols)
++     b = SLutf8_bskip_char(beg, b);
++
++   return b;
++}
+--- most-4.10.2.orig/src/line.h
++++ most-4.10.2/src/line.h
+@@ -7,5 +7,7 @@
+ 
+ extern void most_display_line(void);
+ extern int most_apparant_distance(unsigned char *);
++extern int most_isprint(unsigned char);
++extern unsigned char *most_forward_columns (unsigned char *, unsigned char *, unsigned int, int);
+ #endif
+ 
+--- most-4.10.2.orig/src/most.c
++++ most-4.10.2/src/most.c
+@@ -125,7 +125,7 @@
+    ch = *(++str);
+    if ( ch == '/')
+      {
+-	strcpy (Most_Search_Str,++str);
++	strcpy ((char *) Most_Search_Str,++str);
+ 	return;
+      }
+ 
+@@ -329,7 +329,8 @@
+ 
+ static void do_most (char *file, int start)
+ {
+-   int piped, row, col;
++   int piped;
++   long long row, col;
+ 
+    most_get_cdir(Most_C_Dir);
+ 
+@@ -347,7 +348,7 @@
+    Most_Curs_Offset = Most_C_Offset;
+ 
+    if (*Most_Search_Str
+-       && ((row = most_search (Most_Beg + Most_C_Offset, 1, &col)) > 0))
++       && ((row = most_search (Most_Beg + Most_C_Offset, 1LL, &col)) > 0))
+      most_goto_line(row);
+    else
+      {
+@@ -455,13 +456,7 @@
+ 
+    SLtt_get_terminfo();
+ #if SLANG_VERSION >= 20000
+-#if 0
+-   Most_UTF8_Mode = SLutf8_enable (1);
+-   if (Most_UTF8_Mode)
+-     {
+-	fprintf (stderr, "UTF-8 Mode is in effect\n");
+-     }
+-#endif
++   Most_UTF8_Mode = SLutf8_enable (-1);
+ #endif
+    SLtt_Ignore_Beep = 1;
+    if (No_Colors) 
+--- most-4.10.2.orig/src/most.h
++++ most-4.10.2/src/most.h
+@@ -1,4 +1,5 @@
+ #include "config.h"
++#define SLANG_REGEXP
+ extern int Most_S_Opt;
+ extern int Most_A_Opt;             /* automatically choose -b if necessary */
+ extern int Most_V_Opt;             /* display control chars */
+--- most-4.10.2.orig/src/search.c
++++ most-4.10.2/src/search.c
+@@ -20,6 +20,7 @@
+ */
+ #include "config.h"
+ 
++#include <ctype.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <slang.h>
+@@ -31,18 +32,18 @@
+ #include "display.h"
+ #include "search.h"
+ 
+-/* Note!!!  The regular expression searches may not work.  I have not
+- * tested them.
+- * FIXME!!!
+- */
+-
+ int Most_Case_Sensitive = 0;
+-char Most_Search_Str[256];
++unsigned char Most_Search_Str[256];
+ int Most_Search_Dir = 1;
+ 
+ #include "jdmacros.h"
+ 
+-#define UPCASE(ch) ((!Most_Case_Sensitive && (ch <= 'z') && (ch >= 'a')) ? (ch - 32) : ch)
++#if SLANG_VERSION < 20000
++# define NORM_CHAR(ch) ((!Most_Case_Sensitive) ? toupper(ch) : ch)
++# define UPCASE(ch) NORM_CHAR(ch)
++#else
++# define NORM_CHAR(ch) (ch)
++#endif
+ 
+ #if	defined(HAVE_V8_REGCOMP) || defined(SLANG_REGEXP)
+ 
+@@ -78,7 +79,7 @@
+  * This function is called by the V8 regcomp to report
+  * errors in regular expressions.
+  */
+-static void regerror(char *s)
++static void regerror(const char *s)
+ {
+    char	string[256];
+ 
+@@ -95,13 +96,17 @@
+  *	      0	 error
+  *
+  */
+-static int do_regcomp(unsigned char *key)
++static int do_regcomp(const unsigned char *key)
+ {
+    static int old_Most_Case_Sensitive;
+-   unsigned char UpCaseKey[sizeof(savepattern)];
+ # ifndef HAVE_V8_REGCOMP
+    int	posn;			/* reg exp error at this offset */
+ # endif
++# if SLANG_VERSION < 20000
++   unsigned char UpCaseKey[sizeof(savepattern)];
++# else
++   int re_flags = 0;
++# endif
+ 
+    /*
+     *	Only recompile search string if it has changed
+@@ -124,6 +129,7 @@
+ 
+    old_Most_Case_Sensitive = Most_Case_Sensitive;
+ 
++# if SLANG_VERSION < 20000
+    if ( Most_Case_Sensitive == 0 )
+      {
+ 	register unsigned char	*p;		/* ptr to UpCaseKey */
+@@ -141,6 +147,7 @@
+ 
+ 	*p = '\0';
+      }
++# endif
+ 
+    strcpy((char *)savepattern, (char *)key);
+ 
+@@ -162,7 +169,12 @@
+ #  else
+    if (Regexp != NULL)
+      SLregexp_free (Regexp);
+-   if (NULL == (Regexp = SLregexp_compile ((char *)key, Most_Case_Sensitive ? 0 : SLREGEXP_CASELESS)))
++
++   if (!Most_Case_Sensitive)
++     re_flags |= SLREGEXP_CASELESS;
++   if (Most_UTF8_Mode)
++     re_flags |= SLREGEXP_UTF8;
++   if (NULL == (Regexp = SLregexp_compile ((char *)key, re_flags)))
+      posn = -1;
+    else
+      posn = 0;
+@@ -187,7 +199,7 @@
+  * Call the appropriate regular expression execute function
+  */
+ 
+-static unsigned char *do_regexec(unsigned char *string)
++static unsigned char *do_regexec(const unsigned char *string, size_t length)
+ {
+ # ifdef	HAVE_V8_REGCOMP
+    if ( regexec(regpattern, (char *)string) )
+@@ -196,40 +208,46 @@
+      return( NULL );
+ # else
+ #  if SLANG_VERSION < 20000
+-   return ( SLang_regexp_match(string, strlen((char *)string), &regdata) );
++   return ( SLang_regexp_match(string, length, &regdata) );
+ #  else
+-   return (unsigned char *)SLregexp_match (Regexp, (char *)string, strlen ((char *)string));
++   return (unsigned char *)SLregexp_match (Regexp, (char *)string, length);
+ #  endif
+ # endif	/* HAVE_V8_REGCOMP */
+ }
+ 
+ /*
+- *  Make a upper case copy of a string.	 Also changes any "c\b" character
+- *  strings into just "" so that highlighted and underlined characters
+- *  can be searched.
++ *  Changes any "c\b" character strings into just "" so that
++ *  highlighted and underlined characters can be searched.  Stores in
++ *  length the new size of the string, after the aforementioned
++ *  changes.
++ *
++ *  If using a version of S-Lang that does not support case
++ *  insensitive regular expressions, this function upper cases the
++ *  input string, as well.
+  *
+  *  Reuses malloced memory, so a copy cannot be retained between calls.
+  */
+ 
+-static unsigned char *StrUpCaseCopy(unsigned char *input)
++static const unsigned char *StrNormCopy(const unsigned char *input,
++					size_t *length)
+ {
+    static unsigned char *uppercase;	/* ptr to malloced area */
+    static size_t	  bufsize;	/* size of malloced area */
+-   unsigned char	 *src;		/* ptr to source */
++   const unsigned char	 *src;		/* ptr to source */
++   const unsigned char	 *end;		/* ptr to end of source */
+    register unsigned char *dest;	/* ptr to destination */
+    register int	  idx;	/* index into uppercase[] */
+-   register unsigned char c;		/* source character */
+-   size_t		  length;	/* size of string to copy */
+ 
+    src = input;
+-   length = strlen((char *)src) + 1;	/* len of line plus terminator */
++   end = input + *length;
+ 
+-   if ( length > bufsize )
++   if ( *length >= bufsize )
+      {
+ 	if ( uppercase != (unsigned char *)NULL )
+ 	  free(uppercase);
+ 
+-	bufsize = (length > 256 ) ? length : 256;	/* 256 byte default */
++	/* len of line plus terminator */
++	bufsize = (*length >= 256 ) ? *length + 1 : 256; /* 256 byte default */
+ 
+ 	uppercase = (unsigned char *)malloc(bufsize);
+ 	if ( uppercase == (unsigned char *)NULL )
+@@ -242,8 +260,9 @@
+ 
+    dest = uppercase;
+ 
+-   for ( idx = 0 ; (c = *src) != '\0' ; src++ )
++   for ( idx = 0 ; src < end ; src++ )
+      {
++	unsigned char c = *src;
+ 	if ( c == '\b' )		/* backspace */
+ 	  {
+ 	     if ( idx-- > 0 )
+@@ -252,54 +271,79 @@
+ 	else
+ 	  {
+ 	     if ( idx++ >= 0 )
+-	       *dest++ = UPCASE(c);
++	       *dest++ = NORM_CHAR(c);
+ 	  }
+      }
+ 
+    *dest = '\0';		/* add termination */
+ 
++   *length = dest - uppercase;
+    return(uppercase);
+ }
+ 
+ /*
+- *  Given an offset into a copy made by StrUpCaseCopy() and a pointer to the
++ *  Given an offset into a copy made by StrNormCopy() and a pointer to the
+  *  original string, returns a pointer into the original string corresponding
+  *  to this offset.
+  */
+ 
+-static unsigned char *GetOrigPtr(unsigned char *original, int offset)
++static const unsigned char *
++GetOrigPtr(const unsigned char *original, int offset,
++	   const unsigned char *end)
+ {
+-   register unsigned char *p = original;
++   const unsigned char *p = original;
+    register int	    j = offset;
+ 
+     /*
+      *	Step through, adjusting offset according to backspaces found
+      */
+-   while ( *p != '\0' )
++   while ( p < end )
+      {
++	const unsigned char *next;
++	if (Most_UTF8_Mode)
++	  next = SLutf8_skip_char((unsigned char*) p, (unsigned char*) end);
++	else
++	  next = p + 1;
++	size_t length_last = next - p;
++
+ 	if ( *p == '\b' )
+-	  j++;
++	  j += length_last;
+ 	else
+-	  j--;
++	  j -= length_last;
+ 
+ 	if ( j < 0 )
+ 	  break;
+ 	else
+-	  p++;
++ 	  p = next;
+      }
+ 
+    return(p);
+ }
+ #endif	/* HAVE_V8_REGCOMP || SLANG_REGEXP */
+ 
++/* Returns a pointer to the first occurrence of '\n' in string beg, or
++ * end if no '\n' can be found between inclusive beg and exclusive
++ * end.
++ */
++static const unsigned char *
++find_eol(const unsigned char *beg, const unsigned char *end)
++{
++   const unsigned char *p;
++   if ( (p = memchr(beg, '\n', end - beg)) != NULL)
++     return p;
++   else
++     return end;
++}
++
+ /* This routine returns the 1 + position of first match of key in str.
+    key is modified to match the case of str. */
+ /* We should try to optimize this routine */
+ /* searches from beg up to but not including end */
+ 
+-static unsigned char *forw_search_region(unsigned char *beg,
+-					 unsigned char *end,
+-					 unsigned char *key)
++static const unsigned char *
++forw_search_region(const unsigned char *beg,
++		   const unsigned char *end,
++		   const unsigned char *key)
+ {
+ #if	defined(HAVE_V8_REGCOMP) || defined(SLANG_REGEXP)
+     /*
+@@ -307,10 +351,11 @@
+      *	to be broken into lines.
+      *
+      */
+-   unsigned char	*p;		/* temp pointer */
+-   unsigned char	*linebeg;	/* beginning of working line */
+-   unsigned char	*copy;		/* ptr to upper case copy */
++   const unsigned char	*linebeg;	/* beginning of working line */
++   const unsigned char	*lineend;	/* end of working line */
++   const unsigned char	*norm_line;	/* ptr to normalized line */
+    unsigned char	*match;		/* ptr to matching string */
++   int			anchored_re;
+ 
+     /*
+      *	Compile "key" into an executable regular expression
+@@ -318,58 +363,35 @@
+    if ( do_regcomp(key) == 0 )
+      return(Most_Eob);
+ 
+-    /*
+-     *	For regular expression searches we need to do a line by line
+-     *	search, so it is necessary to temporarily replace '\n' with '\0'
+-     *	characters.
+-     */
+-   p = beg;
+-   linebeg = beg;
++   anchored_re = key[0] == '^';
+ 
+-   while (linebeg < end)
++   for ( linebeg = beg ; linebeg < end ; linebeg = lineend + 1 )
+      {
+-	while ((p < end) && (*p != '\n')) p++;
+-	if (p == end) break;
+-	*p = 0;
++	size_t length;
+ 
+-	if ( Most_Case_Sensitive == 0 )	/* i.e. case insensitive */
+-	  {
+-	     copy = StrUpCaseCopy(linebeg);
+-	     if ( copy == (unsigned char *)NULL )
+-	       return(Most_Eob);
+-	  }
++ 	lineend = find_eol(linebeg, end);
++
++	length = lineend - linebeg;
++	if (0 == length) continue; /* Skip empty lines. */
++
++	norm_line = StrNormCopy(linebeg, &length);
++	if ( norm_line == NULL )
++	  return(Most_Eob);
+ 
+ 	/*
+ 	 * Quick sanity check for beginning of line archored tests.
+-	 * If 1st char of key is "^", then the character before linebeg (which
+-	 * must be beyond the start of the window), must be a "\n",
+-	 * otherwise do_regexec() isn't called.
++	 * If 1st char of key is "^", then the character before
++	 * linebeg (which must be within the buffer), must be a "\n".
+ 	 */
+-	if ( 
+-# if 0
+-	     ((*key != '^') 
+-	      || (linebeg > Most_Win->beg_pos && linebeg[-1] == '\n'))
+-	     &&
+-#endif
+-	     (match = do_regexec(Most_Case_Sensitive ? linebeg : copy)))
++	if ( !(anchored_re && (linebeg <= Most_Beg || linebeg[-1] != '\n'))
++	     && (match = do_regexec(norm_line, length)) )
+ 	  {
+-	     *p = '\n';
+-	     if ( Most_Case_Sensitive == 0 )
+-	       {
+-		/*
+-		 *  Use offset into "copy" as idx to find point in
+-		 *  real line.
+-		 */
+-		  return( GetOrigPtr(linebeg, match - copy) );
+-	       }
+-	     else
+-	       {
+-		  return( match );
+-	       }
++	     /*
++	      *  Use offset into "norm_line" as idx to find point in
++	      *  real line.
++	      */
++	     return( GetOrigPtr(linebeg, match - norm_line, lineend) );
+ 	  }
+-
+-	*p++ = '\n';
+-	linebeg = p;
+      }
+ 
+    return(Most_Eob);
+@@ -475,23 +497,18 @@
+  *  pattern "key".
+  */
+ 
+-static unsigned char *back_search_region(unsigned char *beg,
+-					 unsigned char *end,
+-					 unsigned char *key)
++static const unsigned char *
++back_search_region(const unsigned char *beg,
++		   const unsigned char *end,
++		   const unsigned char *key)
+ {
+ #if	defined(HAVE_V8_REGCOMP) || defined(SLANG_REGEXP)
+-   register unsigned char	*p;
+-   unsigned char		*endp,		/* end of line */
+-   *lastmatch,	/* last match in line */
++   const unsigned char	*p;
++   const unsigned char	*endp,		/* end of line */
++   *lastmatch,		/* last match in line */
+    *endprevline,	/* end of line before this one */
+    *match;		/* ptr to matching string */
+-   unsigned char		savec;		/* last char on line */
+-
+-    /*
+-     *	Compile "key" into an executable regular expression
+-     */
+-   if ( do_regcomp(key) == 0 )
+-     return(Most_Eob);
++   int			anchored_re;
+ 
+     /*
+      *	Starting from the end of the buffer, break the buffer into lines
+@@ -501,84 +518,60 @@
+      *	and isn't that what we want to do in a reverse search.
+      */
+    endp = end;
+-   lastmatch = Most_Eob;
+-   while ( 1 )			/* forever loop */
+-     {
+-	if ( (endp < beg) )
+-	  return(Most_Eob);		/* Reach start of buffer, no match */
++   endprevline = end;
++   match = Most_Eob;
+ 
+-	/* Find the real end of current line */
+-	if ( (p = (unsigned char *)strchr((char *)endp, '\n')) != NULL )
+-	  endp = p;
+-
+-	savec = *endp;
+-	*endp = '\0';			/* terminate line with NULL */
++   /* Find out whether the regexp attempts to match a line boundary.
++    * In this case, only a match on the full line should be attempted.
++    */
++   anchored_re = key[strlen((const char *) key)-1] == '$';
+ 
++   while ( endp > beg )
++     {
+ 	/* Find the beginning of line */
+ 	for ( p = endp - 1 ; (p >= beg) && (*p != '\n') ; p-- )
+ 	  {
+ 	  }
+ 
++	if ( p < beg )
++	  break;
++
+ 	endprevline = p;
+ 
+-	p++;			/* point to 1st char after newline */
++	/*
++	 * Quick sanity check for end of line archored tests.  If last
++	 * char of key is "$", then the character after endp (which
++	 * must be within the buffer), must be a "\n".
++	 */
++	if ( anchored_re && endp < Most_Eob && endp[0] != '\n' )
++	  {
++	     endp = p;
++	     continue;
++	  }
+ 
+ 	/*
+ 	 *  Keep searching forward in this line till no more matches
+ 	 */
+-	if ( Most_Case_Sensitive == 0 )		/* i.e. case insensitive */
++	do
+ 	  {
+-	     unsigned char	*copy;		/* ptr to upper case copy */
+-	     unsigned char	*savecopy;	/* copy of "copy" */
+-
+-	     copy = StrUpCaseCopy(p);
+-	     if ( copy == (unsigned char *)NULL )
+-	       return(Most_Eob);
++	     lastmatch = match;
+ 
+-	     savecopy = copy;
+-
+-	    /*
+-	     * Quick sanity check for beginning of line archored tests.
+-	     * Must be at start of line.
+-	     */
+-	     while ( ((*key != '^') || (copy == savecopy))
+-		    && (match = do_regexec(copy)) )
+-	       {
+-		  if ( GetOrigPtr(p, match - savecopy) > end )
+-		    break;
+-		  lastmatch = match;
+-		  if ( *lastmatch == '\0' )	/* key must be "$" or "^" */
+-		    break;
+-		  copy = lastmatch + 1;		/* character after match */
+-	       }
++	     if (Most_UTF8_Mode)
++	       p = SLutf8_skip_char((unsigned char*) p, (unsigned char*) endp);
++	     else
++	       p++;
+ 
+-	     if ( lastmatch != Most_Eob )	/* found a match */
+-	       lastmatch = GetOrigPtr(p, lastmatch - savecopy);
+-	  }
+-	else
+-	  {
+-	    /*
+-	     * Quick sanity check for beginning of line archored tests.
+-	     * Must be at start of buffer or start of line
+-	     */
+-	     while ( ( (*key != '^') || (p == endprevline + 1) )
+-		    && (match = do_regexec(p)) )
+-	       {
+-		  if ( match > end )
+-		    break;
+-		  lastmatch = match;
+-		  if ( *lastmatch == '\0' )	/* key must be "$" or "^" */
+-		    break;
+-		  p = lastmatch + 1;		/* character after match */
+-	       }
++	     match = forw_search_region(p, endp, key);
+ 	  }
++	while ( match <= endp );
+ 
+-	*endp = savec;
+ 	if ( lastmatch != Most_Eob )	/* found a match */
+ 	  return(lastmatch);
+ 
+ 	endp = endprevline;
+      }
++
++   return(Most_Eob);		/* Reached start of buffer, no match */
+ #else
+    char ch, char1, work[256];
+    unsigned char *pos;
+@@ -670,15 +663,15 @@
+ #endif	/* HAVE_V8_REGCOMP || SLANG_REGEXP */
+ }
+ 
+-int most_search(unsigned char *from, int repeat, int *col)
++long long most_search(const unsigned char *from, int repeat, long long *col)
+ {
+     /* return the line match was found as well as line number,
+      * search from i on; assume that line_array match the i so we need
+      * no initial lookup */
+ 
+-   int test, save_line, the_col, row, s_len;
++   long long test, save_line, the_col, row, s_len;
+    char string[300];
+-   unsigned char *pos;
++   const unsigned char *pos;
+    unsigned int save_ofs;
+    unsigned int found_ofs;
+ 
+@@ -687,7 +680,10 @@
+    save_line = Most_C_Line;
+    found_ofs = Most_Eob - Most_Beg;
+    *col = 0;
+-   s_len = strlen (Most_Search_Str);
++   if (Most_UTF8_Mode)
++     s_len = SLutf8_strlen (Most_Search_Str, 0);
++   else
++     s_len = strlen ((char *) Most_Search_Str);
+    pos = from;
+ 
+    if (*Most_Search_Str)
+--- most-4.10.2.orig/src/search.h
++++ most-4.10.2/src/search.h
+@@ -6,7 +6,7 @@
+ extern int Most_Case_Sensitive;
+ extern int Most_Search_Dir;
+ #define MOST_SEARCH_BUF_LEN	256
+-extern char Most_Search_Str[MOST_SEARCH_BUF_LEN];
+-extern int most_search(unsigned char *, int, int *);
++extern unsigned char Most_Search_Str[MOST_SEARCH_BUF_LEN];
++extern long long most_search(const unsigned char *, int, long long *);
+ #endif
+ 
+--- most-4.10.2.orig/src/window.c
++++ most-4.10.2/src/window.c
+@@ -48,10 +48,11 @@
+ 
+ Most_Window_Type *Most_Win;
+ Most_Window_Type *Most_Top_Win;
+-int Most_Top_Line;		       /* row number of top window */
+-int Most_Curs_Row;
+-int Most_Curs_Col;
+-int Most_Column = 1;
++long long Most_Top_Line;		       /* row number of top window */
++long long Most_Curs_Row;
++long long Most_Curs_Col;
++/* The leftmost visible column. */
++long long Most_Column = 1;
+ int Most_Restore_Width_To = 0;
+ char Most_Mini_Buf[256];
+ unsigned long Most_Curs_Offset;
+@@ -156,7 +157,7 @@
+ 	SLsmg_write_nchars (buf + point, len - point);
+ 	if (col < SLtt_Screen_Cols)
+ 	  break;
+-	buf++; point--; len--;      /* FIXME for UTF-8 */
++	buf++; point--; len--;
+      }
+    SLsmg_erase_eol ();
+    SLsmg_gotorc (SLtt_Screen_Rows - 1, col);
+@@ -227,6 +228,8 @@
+ {
+    SLang_RLine_Info_Type *rli;
+    unsigned int flags = SL_RLINE_BLINK_MATCH;
++   if (Most_UTF8_Mode)
++     flags |= SL_RLINE_UTF8_MODE;
+    
+    if (NULL == (rli = SLrline_open (SLtt_Screen_Cols, flags)))
+      return NULL;
+@@ -258,7 +261,7 @@
+ 
+    /* do not use default.  The up arrow can always get it back. */
+    if ((what != NULL) 
+-       && (*what) && (what != Most_Search_Str))
++       && (*what) && (what != (char *) Most_Search_Str))
+      {
+ 	if (-1 == SLrline_set_line (Most_RLI, what))
+ 	  return -1;
+@@ -593,7 +596,8 @@
+    unsigned int num_chars;
+    unsigned int field_width, info_len;
+    unsigned char *eob;
+-   int r, x;
++   int r;
++   long long x;
+ 
+    eob = Most_Eob;
+ #if MOST_HAS_MMAP
+@@ -601,20 +605,20 @@
+      eob = Most_Beg + Most_Buf->mmap_size;
+ #endif
+    
+-   if (eob == Most_Beg) x = 100;
++   if (eob == Most_Beg) x = 100LL;
+    else
+      {
+-	x = Most_C_Offset * 100;
++	x = Most_C_Offset * 100LL;
+ 	x = x / (eob - Most_Beg);
+      }
+ 
+    if (Most_C_Line + (Most_Win->bot - Most_Win->top + 1) >= Most_Num_Lines)
+-     x = 100;
++     x = 100LL;
+ 
+    /* for files with end of file above the bottom row (due to window manipulations) */
+-   if (x > 100) x = 100;
++   if (x > 100LL) x = 100LL;
+ 
+-   sprintf (info, "(%d,%d) %d%%", Most_C_Line, Most_Column, x);
++   sprintf (info, "(%lld,%lld) %d%%", Most_C_Line, Most_Column, (int)x);
+ 
+    r = Most_Win->bot + 1;
+    most_goto_rc (r,1);
+--- most-4.10.2.orig/src/window.h
++++ most-4.10.2/src/window.h
+@@ -5,11 +5,11 @@
+ typedef struct _Most_Window_Type
+ {
+    unsigned long top_offset; /* offset of top line of window from bob */
+-   int beg_line;             /* line number of top */
+-   int curs_line;            /* line number of curs pos */
+-   int curs_col;             /* column number of curs pos */
++   long long beg_line;       /* line number of top */
++   long long curs_line;      /* line number of curs pos */
++   long long curs_col;       /* column number of curs pos */
+    unsigned long curs_offset;  /* pos of cursor from bob*/
+-   int col;                  /* column offset */
++   long long col;             /* column offset */
+    int n_lines;              /* number of lines of buffer (mode dependent) */
+    int top;                  /* screen location of top */
+    int bot;                  /* screen location of bot */
+@@ -29,9 +29,9 @@
+ extern Most_Window_Type *Most_Win;
+ extern Most_Window_Type *Most_Top_Win;
+ extern unsigned long Most_Curs_Offset;
+-extern int Most_Column;
+-extern int Most_Curs_Row;
+-extern int Most_Curs_Col;
++extern long long Most_Column;
++extern long long Most_Curs_Row;
++extern long long Most_Curs_Col;
+ #define MOST_MINI_BUF_LEN	256
+ extern char Most_Mini_Buf[MOST_MINI_BUF_LEN];
+ extern int Most_Selective_Display;
diff --git a/abs/extra/mpeg_stat/PKGBUILD b/abs/extra/mpeg_stat/PKGBUILD
new file mode 100644
index 0000000..37be249
--- /dev/null
+++ b/abs/extra/mpeg_stat/PKGBUILD
@@ -0,0 +1,19 @@
+# Contributor: Nick B <Shirakawasuna at gmail _dot_com>
+pkgname=mpeg_stat
+pkgver=2.2b
+pkgrel=2
+pkgdesc="A Berkely MPEG Tools bitstream analysis tool."
+arch=('i686' 'x86_64')
+url="http://bmrc.berkeley.edu/ftp/pub/multimedia/mpeg/"
+license=('custom')
+depends=('ffmpeg')
+source=(http://www.sfr-fresh.com/unix/misc/old/${pkgname}-${pkgver}-src.tar.gz)
+
+build() {
+
+cd $startdir/src/mpeg_stat
+make || return 1
+install -m755 -D $startdir/src/mpeg_stat/mpeg_stat $startdir/pkg/usr/bin/mpeg_stat
+install -m644 -D $startdir/src/mpeg_stat/COPYRIGHT $startdir/pkg/usr/share/licenses/mpeg_stat/COPYRIGHT
+}
+
diff --git a/abs/extra/mpgtx/PKGBUILD b/abs/extra/mpgtx/PKGBUILD
new file mode 100644
index 0000000..1181564
--- /dev/null
+++ b/abs/extra/mpgtx/PKGBUILD
@@ -0,0 +1,16 @@
+pkgname="mpgtx"
+pkgver="1.3.1"
+pkgrel=1
+arch=('i686')
+pkgdesc="mpgtx is a commandline MPEG audio/video/system file toolbox."
+url="http://mpgtx.sourceforge.net/"
+source=(http://downloads.sourceforge.net/project/mpgtx/mpgtx/$pkgver/mpgtx-$pkgver.tar.gz)
+md5sums=('d628060aa04ad3b40a175bf35f5167cf')
+
+build() {
+  cd $startdir/src/$pkgname-$pkgver
+  ./configure --prefix=/usr
+  make || return 1
+  make INSTALLDIR=$startdir/pkg/usr/bin MANDIR=$startdir/pkg/usr/man/man1 MANDIRDE=$startdir/usr/man/de/man1 install
+}
+
diff --git a/abs/extra/mupen64plus-svn/PKGBUILD b/abs/extra/mupen64plus-svn/PKGBUILD
new file mode 100644
index 0000000..5df794d
--- /dev/null
+++ b/abs/extra/mupen64plus-svn/PKGBUILD
@@ -0,0 +1,71 @@
+#!!! Due to a limitation in pacman's SVN package handling,
+# this package requires out-of-the-ordinary building. pacman checks 
+# the SVN repo for new revisions before scanning the PKGBUILD.
+#!!! So, when you run makepkg, if it asks you for a password for 'mupen64',
+# give it 'Dyson5632-kart' without the quotes. If it asks for a password
+# for _your_ username, hit Enter to make it ask for a new username, tell it
+# 'mupen64' without the quotes, and then give it the password above. When
+# it asks you to save the password unencrypted, you can say yes, because
+# it's just a read-only access login :P Once you do that, you shouldn't
+# need to do the above anymore.
+
+# Maintainer: Devin Cofer <ranguvar@archlinux.us>
+# Contributor: Rudy Matela <rudy.matela@gmail.com>
+# Contributor: Allan McRae <allan@archlinux.org>
+# Contributor: Zephyr
+
+pkgname=mupen64plus-svn
+pkgver=1416
+pkgrel=1
+pkgdesc="Nintendo64 emulator, SVN version"
+arch=('i686' 'x86_64')
+url="http://code.google.com/p/mupen64plus/"
+license=('GPL2')
+
+makedepends=('subversion' 'pkgconfig' 'libsamplerate' 'yasm' 'mesa')
+depends=('gtk2' 'sdl_ttf')
+optdepends=('libsamplerate: Higher quality audio')
+conflicts=('mupen64plus')
+provides=('mupen64plus')
+source=('install.patch'
+        'fix-gcc4.4-const-char.patch')
+md5sums=('f6a3bc6e59d4f2af9db1b3fce257eb43'
+         '7bb0182949bf043847ad7ff66097e66f')
+
+_svnuser=mupen64
+_svnpass=Dyson5632-kart
+_svntrunk=svn://$_svnuser:$_svnpass@fascination.homelinux.net:7684/mupen64plus/trunk
+_svnmod=mupen64plus
+
+build() {
+	if [ -d $_svnmod/.svn ]; then
+		(cd $_svnmod &&\
+		svn up --config-dir . -r $pkgver \
+		--non-interactive --username $_svnuser --password $_svnpass)
+	else
+		svn co $_svntrunk --config-dir . -r $pkgver $_svnmod \
+		--non-interactive --username $_svnuser --password $_svnpass
+	fi
+	msg "SVN checkout done or server timeout"
+
+	cp -r $_svnmod $_svnmod-build
+	patch -d $_svnmod-build < install.patch || return 1
+#	patch -p0 -d $_svnmod-build < fix-gcc4.4-const-char.patch || return 1
+	cd $_svnmod-build
+
+	make PREFIX="/usr" LIRC=1 all || return 1
+	make PREFIX="$pkgdir/usr" install || return 1
+
+	##### Qt 4 GUI build #####
+	#==> Currently broken
+	#make PREFIX="/usr" GUI=QT4 all || return 1
+	#install -m755 mupen64plus "$pkgdir/usr/bin/mupen64plus-qt"
+	#
+	#cd "$pkgdir/usr/share/applications"
+	#cp mupen64plus.desktop mupen64plus-qt.desktop
+	#sed -i "s#Name=Mupen64Plus#Name=Mupen64Plus (Qt)#" mupen64plus-qt.desktop || return 1
+	#sed -i "s#Exec=mupen64plus#Exec=mupen64plus-qt#" mupen64plus-qt.desktop || return 1
+	##### End Qt 4 GUI build #####
+
+	rm -r "$srcdir/$_svnmod-build"
+}
diff --git a/abs/extra/mupen64plus-svn/fix-gcc4.4-const-char.patch b/abs/extra/mupen64plus-svn/fix-gcc4.4-const-char.patch
new file mode 100644
index 0000000..fd1495d
--- /dev/null
+++ b/abs/extra/mupen64plus-svn/fix-gcc4.4-const-char.patch
@@ -0,0 +1,22 @@
+--- glide64/Combine.old.cpp     2009-06-19 17:59:20.191723065 -0400
++++ glide64/Combine.cpp 2009-06-19 18:43:46.955453868 -0400
+@@ -11873,7 +11873,7 @@
+   LOG ("InitCombine() ");
+   memset(&cmb, 0, sizeof(cmb));
+   const char *extensions = grGetString (GR_EXTENSION);
+-  if (char * extstr = strstr(extensions, "COMBINE")) {
++  if (const char * extstr = strstr(extensions, "COMBINE")) {
+     if (!strncmp(extstr, "COMBINE", 7)) {
+       LOG ("extensions ");
+       cmb.grColorCombineExt = (GRCOLORCOMBINEEXT) grGetProcAddress("grColorCombineExt");
+--- glide64/Main.old.cpp        2009-06-19 18:47:04.238930057 -0400
++++ glide64/Main.cpp    2009-06-19 18:47:18.018772876 -0400
+@@ -784,7 +784,7 @@
+   printf("bebefore2\n");
+   if (settings.fb_hires)
+   {
+-    if (char * extstr = strstr(extensions, "TEXTUREBUFFER")) 
++    if (const char * extstr = strstr(extensions, "TEXTUREBUFFER")) 
+     {
+       if (!strncmp(extstr, "TEXTUREBUFFER", 13)) 
+       {
diff --git a/abs/extra/mupen64plus-svn/install.patch b/abs/extra/mupen64plus-svn/install.patch
new file mode 100644
index 0000000..5e41460
--- /dev/null
+++ b/abs/extra/mupen64plus-svn/install.patch
@@ -0,0 +1,13 @@
+Index: install.sh
+===================================================================
+--- install.sh	(revision 1295)
++++ install.sh	(working copy)
+@@ -90,7 +90,7 @@
+ if [ -f mupen64plus.desktop ]
+ then
+     $INSTALL -d -v "${APPLICATIONSDIR}"
+-    $INSTALL -m 0644 mupen64plus.desktop "${APPLICATIONSDIR}"
++    $INSTALL -m 0644 mupen64plus.desktop "${APPLICATIONSDIR}/mupen64plus.desktop"
+ fi
+ if [ "x$(ls plugins/)" != "x" ]
+ then
diff --git a/abs/extra/mutt/PKGBUILD b/abs/extra/mutt/PKGBUILD
new file mode 100644
index 0000000..c481eec
--- /dev/null
+++ b/abs/extra/mutt/PKGBUILD
@@ -0,0 +1,39 @@
+# $Id: PKGBUILD 50055 2009-08-19 01:49:30Z thayer $
+# Maintainer: tobias [tobias [at] archlinux.org]
+pkgname=mutt
+pkgver=1.5.20
+pkgrel=2
+pkgdesc="A small but very powerful text-based mail client"
+arch=(i686 x86_64)
+license=('GPL')
+url="http://www.mutt.org/"
+depends=('slang' 'openssl>=0.9.8e' 'gdbm' 'mime-types' 'zlib' 'libsasl' 'gpgme')
+makedepends=('gnupg')
+install=${pkgname}.install
+source=(ftp://ftp.mutt.org/mutt/devel/${pkgname}-${pkgver}.tar.gz 
+        mutt-unmailbox.patch)
+url="http://www.mutt.org/"
+md5sums=('027cdd9959203de0c3c64149a7ee351c'
+         'fa8e03a49a2fa7b294dc8237d928cdb7')
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+
+  # patch a segfault bug in 1.5.20 -- remove for next release
+  patch -p1 < ${srcdir}/mutt-unmailbox.patch || return 1
+  #patch -Np1 -i ../mutt-unmailbox.patch || exit 1
+
+  ./configure --prefix=/usr --sysconfdir=/etc \
+    --enable-pop --enable-imap --enable-smtp \
+    --with-sasl --with-ssl=/usr --without-idn \
+    --enable-hcache --enable-pgp --enable-inodesort \
+	 --enable-compressed --with-regex \
+	 --enable-gpgme --with-slang=/usr
+  make || return 1
+  make DESTDIR=${pkgdir} install
+  rm -f ${pkgdir}/usr/bin/{flea,muttbug}
+  rm -f ${pkgdir}/usr/share/man/man1/{flea,muttbug}.1
+  rm -f ${pkgdir}/etc/mime.types*
+  install -Dm644 contrib/gpg.rc ${pkgdir}/etc/Muttrc.gpg.dist
+}
+
diff --git a/abs/extra/mutt/mutt-unmailbox.patch b/abs/extra/mutt/mutt-unmailbox.patch
new file mode 100644
index 0000000..cbb3210
--- /dev/null
+++ b/abs/extra/mutt/mutt-unmailbox.patch
@@ -0,0 +1,10 @@
+--- a/buffy.c	2009-08-10 08:23:12.731846990 -0400
++++ b/buffy.c	2009-08-10 08:23:50.541878087 -0400
+@@ -236,7 +236,6 @@
+     {
+       if(*tmp)
+       {
+-        FREE (&((*tmp)->path));
+         tmp1=(*tmp)->next;
+         FREE (tmp);		/* __FREE_CHECKED__ */
+         *tmp=tmp1;
diff --git a/abs/extra/mutt/mutt.install b/abs/extra/mutt/mutt.install
new file mode 100644
index 0000000..98ece96
--- /dev/null
+++ b/abs/extra/mutt/mutt.install
@@ -0,0 +1,15 @@
+# arg 1:  the new package version
+post_install() {
+  cat << EOM
+
+--> to support gpg, please use the following line in your ~/.muttrc
+
+source /etc/Muttrc.gpg.dist
+
+EOM
+}
+
+post_upgrade() {
+  post_install $1
+}
+
diff --git a/abs/extra/myt2xvid3/PKGBUILD b/abs/extra/myt2xvid3/PKGBUILD
index 9d88ce9..abd7cb5 100755
--- a/abs/extra/myt2xvid3/PKGBUILD
+++ b/abs/extra/myt2xvid3/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=myt2xvid3
 pkgver=0.1
-pkgrel=7
+pkgrel=9
 arch=("i686")
 pkgdesc="A multimedia framework based on the MPEG-4 Systems standard"
 url="http://www.knoppmythwiki.org/index.php?page=XvidEncoding"
diff --git a/abs/extra/myth2ipod/PKGBUILD b/abs/extra/myth2ipod/PKGBUILD
index 1942f2b..2c7540b 100755
--- a/abs/extra/myth2ipod/PKGBUILD
+++ b/abs/extra/myth2ipod/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=myth2ipod
 pkgver=0.2
-pkgrel=28
+pkgrel=29
 arch=("i686")
 pkgdesc="A multimedia framework based on the MPEG-4 Systems standard"
 url="myth2ipod.com"
diff --git a/abs/extra/myth2ipod/myth2ipod b/abs/extra/myth2ipod/myth2ipod
index 268a522..baf749e 100755
--- a/abs/extra/myth2ipod/myth2ipod
+++ b/abs/extra/myth2ipod/myth2ipod
@@ -248,7 +248,7 @@ sub PrepSQLRead{
                  '/usr/share/mythtv/mysql.txt',
                  '/etc/mythtv/mysql.txt',
                  '/usr/local/etc/mythtv/mysql.txt',
-                 "$ENV{HOME}/.mythtv/mysql.txt",
+                 '$ENV{HOME}/.mythtv/mysql.txt',
                  'mysql.txt'
 	);
     foreach my $file (@mysql) {
diff --git a/abs/extra/mythappletrailers/PKGBUILD b/abs/extra/mythappletrailers/PKGBUILD
index 9c12971..2f36a4d 100644
--- a/abs/extra/mythappletrailers/PKGBUILD
+++ b/abs/extra/mythappletrailers/PKGBUILD
@@ -3,7 +3,7 @@
 
 pkgname=mythappletrailers
 pkgver=0.04.3
-pkgrel=35
+pkgrel=41
 pkgdesc="Unofficial Add-on for MythTV to get Apple.com Movie Trailers."
 arch=('i686' 'x86_64')
 license=('GPL2')
@@ -28,3 +28,8 @@ build() {
   cp trailers $startdir/pkg/etc/cron.daily/
   install -m755 $srcdir/fix_aple_url.sh $pkgdir/usr/bin
 }
+md5sums=('336e68953d0e1e8a0c7a4990f8d43a2b'
+         'c7da92600afe2a3b1f564764500315a0'
+         '5fdd4aa17b9c1e77b272437ae42a1827'
+         'ece3c5f8a605b6e2270c6f7671705631'
+         'a2349f844e47fd95a672739177ca44ff')
diff --git a/abs/extra/mythappletrailers/appletrailer.xml b/abs/extra/mythappletrailers/appletrailer.xml
index dc0c938..9aa19f5 100644
--- a/abs/extra/mythappletrailers/appletrailer.xml
+++ b/abs/extra/mythappletrailers/appletrailer.xml
@@ -1,722 +1,602 @@
 <mythmenu name="TRAILERS">
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>2012</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony/2012/2012-tlr2_h640w.mov</action>
+		<text>Morning Glory</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/morningglory/morningglory-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>500 Days of Summer</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/500daysofsummer/500daysofsummer-tlr1_h640w.mov</action>
+		<text>Scott Pilgrim vs. The World</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/scottpilgrim/scottpilgrim-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>9</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/focus_features/9/9-tlr2_h640w.mov</action>
+		<text>Adjustment Bureau</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/adjustmentbureau/adjustmentbureau-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Adam</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/adam/adam-tlra_h640w.mov</action>
+		<text>Grease Sing-A-Long</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/greasesingalong/greasesingalong-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Alice In Wonderland</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/aliceinwonderland/aliceinwonderland-tsr1_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Aliens In the Attic</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/aliensintheattic/aliensintheattic-tlrg_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>All About Steve</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/allaboutsteve/allaboutsteve-tlrc_h640w.mov</action>
+		<text>Solitary Man</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/solitaryman/solitaryman-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Alvin and the Chipmunks: the Squeakquel</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/alvinandthechipmunks2/alvinsqueekquel-tlrd_h640w.mov</action>
+		<text>Racing Dreams</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/racingdreams/racingdreams-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Amelia</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/amelia/amelia-tlra_h640w.mov</action>
+		<text>Joan Rivers: A Piece of Work</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/joanriversapieceofwork/joanriversapieceofwork-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Amreeka</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/amreeka/amreeka_h640w.mov</action>
+		<text>The Killer Inside Me</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/ifc_films/killerinsideme/killerinsideme-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Answer Man</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/magnolia_pictures/theanswerman/theanswerman_h640w.mov</action>
+		<text>You Again</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/youagain/youagain-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Armored</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/armored/armored-tlr2_h640w.mov</action>
+		<text>Love Ranch</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/loveranch/loveranch-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Astro Boy</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/summit/astroboy/astroboy-tlr2_h640w.mov</action>
+		<text>Charlie St. Cloud</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/charliestcloud/charliestcloud-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Avatar</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/avatar/avatar2009aug0820a-tsr_h640w.mov</action>
+		<text>Step Up 3D</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/touchstone/stepup3d/stepup3d-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Bandslam</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/summit/bandslam/bandslam-tlr1_h640w.mov</action>
+		<text>Secretariat</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/secretariat/secretariat-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Beyond a Reasonable Doubt</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/beyondareasonabledoubt/beyondareasonabledoubt_h640w.mov</action>
+		<text>African Cats</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/africancats/africancats-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Big Fan</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/bigfan/bigfan_h640w.mov</action>
+		<text>Nowhere Boy</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/weinstein/nowhereboy/nowhereboy-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Blind Side</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/theblindside/theblindside-tlr1_h640w.mov</action>
+		<text>Jonah Hex</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/weinstein/jonahhex/jonahhex-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Blue Tooth Virgin</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/thebluetoothvirgin/thebluetoothvirgin_h640w.mov</action>
+		<text>Splice</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/wb/splice/splice-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Book of Eli</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/thebookofeli/thebookofeli-tlr1a_h640w.mov</action>
+		<text>Winter's Bone</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/wintersbone/wintersbone-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Box</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/thebox/thebox-tlr1a_h640w.mov</action>
+		<text>Super 8</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/super8/super8-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Bright Star</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/brightstar/brightstar_h640w.mov</action>
+		<text>Piranha 3D</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/weinstein/piranha3d/piranha3d-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Brothers</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/brothers/brothers-tlr1a_h640w.mov</action>
+		<text>Gangster Paradise: Jerusalema</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/gangsterparadise/gangsterparadise-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Burning Plain</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/magnolia_pictures/theburningplain/theburningplain_h640w.mov</action>
+		<text>Waiting for Superman</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount_vantage/waitingforsuperman/waitingforsuperman-tlr1a_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Capitalism: a Love Story</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/capitalismalovestory/capitalismalovestory-tlr1_h640w.mov</action>
+		<text>Survival of the Dead</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/survivalofthedead/survivalofthedead-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Carriers</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/paramount_vantage/carriers/carriers-tlr1_h640w.mov</action>
+		<text>Countdown to Zero</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/magnolia_pictures/countdowntozero/countdowntozero-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Casi Divas</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/casidivas/casidivas_h640w.mov</action>
+		<text>Nanny McPhee Returns</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/nannymcpheereturns/nannymcpheereturns-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Cloudy With a Chance of Meatballs</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/cloudywithachanceofmeatballs/cloudywithachance-tlr3_h640w.mov</action>
+		<text>I Spit On Your Grave</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/ispitonyourgrave/ispitonyourgrave-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Coco Before Chanel</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony/cocobeforechanel/cocobeforechanel_h640w.mov</action>
+		<text>Buried</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/lionsgate/buried/buried-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Cold Souls</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/samuel_goldwyn/coldsouls/coldsouls_h640w.mov</action>
+		<text>Lottery Ticket</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/wb/lotteryticket/lotteryticket-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Collector</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/thecollector/thecollector_h640w.mov</action>
+		<text>Get Low</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/getlow/getlow-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Couples Retreat</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/universal/couplesretreat/couplesretreat-tlr_h640w.mov</action>
+		<text>Princess Kaiulani</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/princesskaiulani/princesskaiulani-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Cove</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/thecove/thecove_h640w.mov</action>
+		<text>The Twilight Saga: Eclipse</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/summit/twilightsagaeclipse/twilightsagaeclipse-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Damned United</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony/thedamnedunited/thedamnedunited_h640w.mov</action>
+		<text>8: The Mormon Proposition</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/8themormonproposition/8themormonproposition_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Daybreakers</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/daybreakers/daybreakers-tlr1c_h640w.mov</action>
+		<text>Predators</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox/predators/predators-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Despicable Me</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/universal/despicableme/despicableme-tlr1_h640w.mov</action>
+		<text>Acts of Violence</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/actsofviolence/actsofviolence-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>District 9</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/district9/district9-tlr4_h640w.mov</action>
+		<text>The Disappearance of Alice Creed</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/thedisappearanceofalicecreed/disappearanceofalicecreed-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>An Education</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony/aneducation/aneducation_h640w.mov</action>
+		<text>The Expendables</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/lionsgate/theexpendables/expendables-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Extract</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/miramax/extract/extract-inttlr_h640w.mov</action>
+		<text>TiMER</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/timer/timer-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Fame</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/mgm/fame/fame-tlr2r_h640w.mov</action>
+		<text>Paper Man</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/paperman/paperman-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Fantastic Mr. Fox</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/fantasticmrfox/fantasticmrfox-tlra_h640w.mov</action>
+		<text>Holy Rollers</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/holyrollers/holyrollers-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Final Destination</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/newline/thefinaldestination/thefinaldestination-tlr1_h640w.mov</action>
+		<text>Ondine</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/magnolia_pictures/ondine/ondine-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Five Minutes of Heaven</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/ifc_films/fiveminutesofheaven/fiveminutesofheaven_h640w.mov</action>
+		<text>DCI 2010: The Countdown</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/dci2010thecountdown/dcicountdown-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Funny People</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/universal/funnypeople/funnypeople-tlr1r_h640w.mov</action>
+		<text>The Other Guys</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony_pictures/theotherguys/theotherguys-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>G-Force</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/gforce/gforce-tlr2_h640w.mov</action>
+		<text>The Kids Are All Right</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/focus_features/thekidsareallright/kidsarealright-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>G.I. Joe: Rise of Cobra</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/paramount/gijoe/gijoetheriseofcobra-tlr1_h640w.mov</action>
+		<text>Dinner for Schmucks</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/dinnerforschmucks/dinnerforschmucks-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Gamer</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/gamer/gamer-tlr2a_h640w.mov</action>
+		<text>Micmacs</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/micmacs/micmacs-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Gentlemen Broncos</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/gentlemenbroncos/gentlemenbroncos_h640w.mov</action>
+		<text>Coco Chanel and Igor Stravinsky</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/cocoandigor/cocoigor-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Grace</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/grace/grace_h640w.mov</action>
+		<text>Casino Jack and the United States of Money</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/magnolia_pictures/casinojack/casinojack-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Halloween 2</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/weinstein/halloween2/halloweenii-tlr2_h640w.mov</action>
+		<text>I Am Love</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/magnolia_pictures/iamlove/iamlove-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Hangover</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/thehangover/thehangover-tlr2_h640w.mov</action>
+		<text>Mother and Child</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/motherandchild/motherandchild-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Hurt Locker</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/summit/thehurtlocker/thehurtlocker_h640w.mov</action>
+		<text>Just Wright</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox_searchlight/justwright/justwright-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>I Can Do Bad All by Myself</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/icandobadallbymyself/icandobadallbymyself-tlr2a_h640w.mov</action>
+		<text>In My Sleep</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/inmysleep/inmysleep_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>I Sell the Dead</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/ifc_films/isellthedead/isellthedead_h640w.mov</action>
+		<text>My Girlfriend's Boyfriend</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/mygirlfriendsboyfriend/mygirlfriendsboyfriend-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Ice Age: Dawn of the Dinosaurs</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/ice_age_iii/iceage3-tlrn_h640w.mov</action>
+		<text>Wild Grass</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/wildgrass/wildgrass-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>In the Loop</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/ifc_films/intheloop/intheloop_h640w.mov</action>
+		<text>Eat Pray Love</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/eatpraylove/eatpraylove-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Informant!</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/theinformant/theinformant-tlr1_h640w.mov</action>
+		<text>The Secret In Their Eyes</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/thesecretintheireyes/thesecretintheireyes-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Inglourious Basterds</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/weinstein/inglouriousbasterds/inglouriousbasterds-tlr4_h640w.mov</action>
+		<text>The Switch</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/miramax/theswitch/theswitch-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Invention of Lying</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/theinventionoflying/theinventionoflying-tlr1_h640w.mov</action>
+		<text>Harry Brown</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/harrybrown/harrybrown-tlr1a_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>It Might Get Loud</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony/itmightgetloud/itmightgetloud_h640w.mov</action>
+		<text>Please Give</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony/pleasegive/pleasegive-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>It’s Complicated</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/universal/itscomplicated/itscomplicated_h640w.mov</action>
+		<text>Touching Home</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/touchinghome/touchinghome-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Jennifer’s Body</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/jennifersbody/jennifersbody-tlrc_h640w.mov</action>
+		<text>Hey Hey It's Esther Blueburger </text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/heyheyitsestherblueburger/heyhey-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Julie  Julia</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/julieandjulia/julieandjulia-tlr1_h640w.mov</action>
+		<text>The Good Heart</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/magnolia_pictures/thegoodheart/thegoodheart-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Last Airbender</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/paramount/thelastairbender/thelastairbender-tlr1_h640w.mov</action>
+		<text>Killers</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/lionsgate/killers/killers-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Law Abiding Citizen</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/lawabidingcitizen/lawabidingcitizen_h640w.mov</action>
+		<text>Get Him To The Greek</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/gethimtothegreek/gethimtothegreek-tlr_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Legion</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/legion/legion-tlr1_h640w.mov</action>
+		<text>The A-Team</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox/theateam/ateam-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Live Music</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/livemusic/livemusic_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Lorna’s Silence</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony/lornassilence/lornassilence_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Love Happens</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/universal/lovehappens/lovehappens-tlr1_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>The Lovely Bones</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/paramount/thelovelybones/thelovelybones_h640w.mov</action>
+		<text>Alice In Wonderland</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/aliceinwonderland/aliceinwonderland-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Men Who Stare At Goats</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/overture/themenwhostareatgoats/themenwhostareatgoats_h640w.mov</action>
+		<text>Avatar</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox/avatar/avatar-tlrf_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>More Than a Game</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/morethanagame/morethanagame-tlr1a_h640w.mov</action>
+		<text>Babies</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/focus_features/babies/babies-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>My One and Only</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/myoneandonly/myoneandonly_h640w.mov</action>
+		<text>The Back-up Plan</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/thebackupplan/backupplan-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>New York, I Love You</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/newyorkiloveyou/newyorkiloveyou_h640w.mov</action>
+		<text>Beastly</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/beastly/beastly-tlr1b_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Night At the Museum: Battle of the Smithsonian</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox/nightatthemuseum2/nightatthemuseum2-tlro_h640w.mov</action>
+		<text>Cats and Dogs: The Revenge of Kitty Galore 3D</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/wb/catsanddogs2/catsanddogs2-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Nine</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/weinstein/nine/nine-tlr1_h640w.mov</action>
+		<text>Cyrus</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox_searchlight/cyrus/cyrus-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Ninja Assassin</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/ninjaassassin/ninjaassassin-tlr1_h640w.mov</action>
+		<text>Date Night</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox/datenight/datenight-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Oceans</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/oceans/oceans-tsr1_h640w.mov</action>
+		<text>Despicable Me</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/despicableme/despicableme-tlr5i_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Old Dogs</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/olddogs/olddogs_h640w.mov</action>
+		<text>Furry Vengeance</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/summit/furryvengeance/furryvengeance-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Ong Bak 2</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/magnolia_pictures/ongbak2/ongbak2_h640w.mov</action>
+		<text>Grown Ups</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony_pictures/grownups/grownups-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Orphan</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/orphan/orphan-tlr2_h640w.mov</action>
+		<text>Hot Tub Time Machine</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/mgm/hottubtimemachine/hottubtimemachine-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Other Man</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/theotherman/theotherman_h640w.mov</action>
+		<text>How To Train Your Dragon</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/dreamworks/howtotrainyourdragon/howtotrainyourdragon-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Pandorum</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/pandorum/pandorum-tl1_h640w.mov</action>
+		<text>Hubble 3D</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/imax/hubble3d/hubble3d-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Paper Heart</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/paperheart/paperheart_h640w.mov</action>
+		<text>Inception</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/wb/inception/inception-tlr3_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Paris</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/ifc_films/paris/paris_h640w.mov</action>
+		<text>Iron Man 2</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/ironman2/ironman2-34rgrwt9-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>A Perfect Getaway</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/universal/aperfectgetaway/aperfectgetaway_h640w.mov</action>
+		<text>Karate Kid</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony_pictures/karatekid/karatekid-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Planet 51</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/planet51/planet51-tlr2_h640w.mov</action>
+		<text>Knight and Day</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox/knightandday/knightandday-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Play the Game</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/playthegame/playthegame_h640w.mov</action>
+		<text>The Last Airbender</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/thelastairbender/lastairbender-tlr3_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Ponyo</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/ponyo/ponyo_h640w.mov</action>
+		<text>Letters To Juliet</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/summit/letterstojuliet/letterstojuliet-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Post Grad</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/postgrad/postgrad-tlra_h640w.mov</action>
+		<text>The Losers</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/wb/thelosers/thelosers-tlr1b_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Precious</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/precious/precious-tlr2a_h640w.mov</action>
+		<text>MacGruber</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/macgruber/macgruber-tlr4_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Princess and the Frog</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/princessandthefrog/princessandthefrog-tsr2_h640w.mov</action>
+		<text>Multiple Sarcasms</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/independent/multiplesarcasms/multiplesarcasms-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Proposal</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/touchstone/theproposal/theproposal-tlr3_h640w.mov</action>
+		<text>A Nightmare On Elm Street</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/newline/anightmareonelmstreet/nightmareonelmstreet-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The Road</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/weinstein/theroad/theroad_h640w.mov</action>
+		<text>Oceans</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/oceans/oceans-tsr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Saw VI</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/saw6/sawvi_h640w.mov</action>
+		<text>Prince of Persia: the Sands of Time</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/princeofpersia/princeofpersia-tlr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>The September Issue</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/theseptemberissue/theseptemberissue_h640w.mov</action>
+		<text>Robin Hood</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/universal/robinhood/robinhood-tlr3_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Sherlock Holmes</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/sherlockholmes/sherlockholmes-tlr2_h640w.mov</action>
+		<text>Salt</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/sony_pictures/salt/salt-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Shorts</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/shorts/shorts-tlr3_h640w.mov</action>
+		<text>Sex and the City 2</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/wb/sexandthecity2/sexandthecity2-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Shrink</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/lionsgate/shrink/shrink-tlr1_h640w.mov</action>
+		<text>Shrek Forever After</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/dreamworks/shrekforeverafter/shrek4-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
 		<text>Shutter Island</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/paramount/shutterisland/shutterisland-tlr1r2_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Sorority Row</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/summit/sororityrow/sororityrow-tlr1_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Spread</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/spread/spread_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>St. Trinian’s</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/sttrinians/sttrinians_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>The Stepfather</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/thestepfather/thestepfather_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Surrogates</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/touchstone/surrogates/surrogates-tlr2_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Surviving Crooked Lake</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/survivingcrookedlake/survivingcrookedlake_h640w.mov</action>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/paramount/shutterisland/shutterisland-tlr1r2r_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Taking Woodstock</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/focus_features/takingwoodstock/takingwoodstock-tlr_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>The Time Traveler’s Wife</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/newline/timetravelerswife/timetravelerswife-tlr1_h640w.mov</action>
+		<text>The Sorcerer's Apprentice</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/thesorcerersapprentice/sorcerersapprentice-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
 		<text>Toy Story 3</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/toystory3/toystory3-tsr_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Transformers: Revenge of the Fallen</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/paramount/transformers2/transformersrevengeofthefallen-tlr2r_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>The Twilight Saga: New Moon</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/summit/newmoon/newmoon-tsr1_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>The Ugly Truth</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/theuglytruth/theuglytruth-tlr2_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Walt  El Grupo</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/waltandelgrupo/waltandelgrupo_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Where the Wild Things Are</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/wherethewildthingsare/wtwta-tlr2_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Whip It</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/fox_searchlight/whipit/whipit_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>White On Rice</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/independent/whiteonrice/whiteonrice_h640w.mov</action>
-	</button>
-
-	<button>
-		<type>VIDEO_BROWSER</type>
-		<text>Whiteout</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/wb/whiteout/whiteout-tlr1_h640w.mov</action>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/toystory3/toystory3-tlr3_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>World’s Greatest Dad</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/magnolia_pictures/worldsgreatestdad/worldsgreatestdad_h640w.mov</action>
+		<text>Tron Legacy</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/disney/tronlegacy/tronlegacy-tsr1_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>X Games 3D: the Movie</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/disney/xgames3d/xgames3d_h640w.mov</action>
+		<text>Tyler Perry's Why Did I Get Married Too</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/lionsgate/whydidigetmarriedtoo/whydidigetmarriedtoo-tlr2_h640w.mov</action>
 	</button>
 
 	<button>
 		<type>VIDEO_BROWSER</type>
-		<text>Zombieland</text>
-		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://apple.com/movies/sony_pictures/zombieland/zombieland-tlr1_h640w.mov</action>
+		<text>Wall Street: Money Never Sleeps</text>
+		<action>EXEC loading.sh &amp;&amp; mplayer-wrapper.pl -fs -zoom -really-quiet -user-agent "QuickTime/7.6.2" -cache 16000 http://trailers.apple.com/movies/fox/wallstreetmoneyneversleeps/wallstreet-tlrf_h640w.mov</action>
 	</button>
 
 </mythmenu>
diff --git a/abs/extra/mythappletrailers/loading.sh b/abs/extra/mythappletrailers/loading.sh
index d1ef680..e4e85fc 100755
--- a/abs/extra/mythappletrailers/loading.sh
+++ b/abs/extra/mythappletrailers/loading.sh
@@ -1,2 +1,12 @@
 #!/bin/bash
-echo -e "Loading . . . " | osd_cat -p middle -s 5 -f"-adobe-courier-bold-*-*-*-34-*-*-*-*-*" -d 10 -A centre
+
+. /etc/osd_cat.cfg || {
+    color=yellow
+    outline=2
+    outlinecolour=black
+    shadow=0
+    shadowcolour=black
+    font="-adobe-helvetica-bold-*-*-*-34-*-*-*-*-*-*-*"
+}
+
+echo -e "Loading . . . " | osd_cat --pos=middle --align=center --delay=10 --color=$color --outline=$outline --outlinecolour=$outlinecolour --shadow=$shadow --shadowcolour=$shadowcolour --font=$font
diff --git a/abs/extra/mythappletrailers/mythappletrailers.install b/abs/extra/mythappletrailers/mythappletrailers.install
index 0f6d8fa..96f6717 100644
--- a/abs/extra/mythappletrailers/mythappletrailers.install
+++ b/abs/extra/mythappletrailers/mythappletrailers.install
@@ -1,7 +1,7 @@
 # arg 1:  the new package version
 post_install() {
-  ln -s /home/mythtv/appletrailer.xml /usr/share/mythtv/appletrailer.xml
-  mv /usr/share/mythtv/is.xml /tmp
+  ln -s /home/mythtv/appletrailer.xml /usr/share/mythtv/themes/defaultmenu/appletrailer.xml
+  mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp
   grep -v -e /mythmenu /tmp/is.xml > /tmp/is.xml.tmp
   echo "<!--#MythAppleTrailers-->" >> /tmp/is.xml.tmp
   echo "   <button>" >> /tmp/is.xml.tmp
@@ -12,24 +12,24 @@ post_install() {
   echo "<!--#MythAppleTrailers-->" >> /tmp/is.xml.tmp
   echo "" >> /tmp/is.xml.tmp
   echo "</mythmenu>" >> /tmp/is.xml.tmp
-  mv /tmp/is.xml.tmp /usr/share/mythtv/is.xml
+  mv /tmp/is.xml.tmp /usr/share/mythtv/themes/defaultmenu/is.xml
 }
 # arg 1:  the new package version
 # arg 2:  the old package version
 post_upgrade() {
-  if [ -e /usr/share/mythtv/appletrailer.xml ]
+  if [ -e /usr/share/mythtv/themes/defaultmenu/appletrailer.xml ]
   then
   	exit
   else	
-  ln -s /home/mythtv/appletrailer.xml /usr/share/mythtv/appletrailer.xml
+  ln -s /home/mythtv/appletrailer.xml /usr/share/mythtv/themes/defaultmenu/appletrailer.xml
   fi
 }
 
 # arg 1:  the old package version
 post_remove() {
-	rm -fr /usr/share/mythtv/appletrailer.xml
-	mv /usr/share/mythtv/is.xml /tmp/is.xml.tmp
-	sed -e '/\#MythAp/,/\#MythAp/d' < /tmp/is.xml.tmp > /usr/share/mythtv/is.xml
+	rm -fr /usr/share/mythtv/appletrailer.xml /usr/share/mythtv/themes/defaulmenu/mythappletrailer.xml
+	mv /usr/share/mythtv/themes/defaultmenu/is.xml /tmp/is.xml.tmp
+	sed -e '/\#MythAp/,/\#MythAp/d' < /tmp/is.xml.tmp > /usr/share/mythtv/themes/defaultmenu/is.xml
 }
 
 op=$1
diff --git a/abs/extra/mythnuv2mkv/PKGBUILD b/abs/extra/mythnuv2mkv/PKGBUILD
index 9a61d9a..5df33a7 100644
--- a/abs/extra/mythnuv2mkv/PKGBUILD
+++ b/abs/extra/mythnuv2mkv/PKGBUILD
@@ -1,5 +1,5 @@
 pkgname=mythnuv2mkv
-pkgver=1.53
+pkgver=1.60
 pkgrel=1
 conflicts=()
 pkgdesc="Converts MythTV nuv or mpg files to mkv, mp4 or avi files. It can be run as a MythTV User Job or at command line to convert MythTV recordings or stand alone files."
@@ -8,9 +8,9 @@ arch=('i686')
 license=('GPL')
 source=(http://web.aanet.com.au/~auric/files2/V${pkgver}/mythnuv2mkv.sh)
 
-install=''
 build() {
+    patch -p0 <$startdir/mythnuv2mkv.patch || return 1
     mkdir -p $startdir/pkg/usr/bin
     install -m 0755 mythnuv2mkv.sh $startdir/pkg/usr/bin/mythnuv2mkv.sh
 }
-
+md5sums=('19a5c8bed9bd7d6a86d35e96afa4b3bb')
diff --git a/abs/extra/mythnuv2mkv/mythnuv2mkv.patch b/abs/extra/mythnuv2mkv/mythnuv2mkv.patch
new file mode 100644
index 0000000..5ca20ae
--- /dev/null
+++ b/abs/extra/mythnuv2mkv/mythnuv2mkv.patch
@@ -0,0 +1,36 @@
+--- mythnuv2mkv.sh.orig	2010-04-21 01:41:11.000000000 +0000
++++ mythnuv2mkv.sh	2010-04-21 01:43:04.000000000 +0000
+@@ -7,19 +7,19 @@
+ #
+ ######### Vars you may want to set for your environment ######################################################
+ # Default aspect for Myth Recording mpg files. It will try to work it out but if it can't will use this.
+-readonly DEFAULTMPEG2ASPECT="NA" # 4:3 or 16:9
++readonly DEFAULTMPEG2ASPECT="16:9" # 4:3 or 16:9
+ # Log directory
+-readonly LOGBASEDIR="/var/tmp" # Don't use a directory with spaces in it's name
++readonly LOGBASEDIR="/tmp" # Don't use a directory with spaces in it's name
+ # Number of errors reported by mplayer allowed in the transcoded file
+ readonly MPLAYER_ERROR_COUNT="8"
+ # Path to your mysql.txt file
+ readonly MYSQLTXT=""
+ # What to separate Title SeasonEpisode SubTitle with
+-readonly SEP=","
++readonly SEP="_"
+ # Chapter marks every X minutes
+-CHAPTERDURATION=0
++CHAPTERDURATION=5
+ # Crop input
+-CROP="ON" # ON | OFF, can also change with --crop argument
++CROP="OFF" # ON | OFF, can also change with --crop argument
+ CROPSIZE=8
+ # Delete recording after successful transcode. Only for transcode out of MythRecording. (Actually just sets to high priority autoexpire.)
+ DELETEREC="OFF" # ON | OFF, can also change with --deleterec argument
+@@ -29,7 +29,7 @@
+ DEBLOCK="OFF" # ON | OFF, can also change with --deblock argument
+ # Include deinterlace filter.
+ # SOURCENAME is ON for that source. Can have multiple. e.g. DEINTERLACE="Cabel,FTA1"
+-DEINTERLACE="ON" # ON | OFF | SOURCENAME,SOURCENAME can also change with --deinterlace argument.
++DEINTERLACE="OFF" # ON | OFF | SOURCENAME,SOURCENAME can also change with --deinterlace argument.
+ # Include inverse Telecine filter (Experimental. Can someone from NTSC/ATSC land try this?).
+ # invtelecine filter is never added if deinterlace has been added.
+ INVTELECINE="OFF" # ON | OFF, can also change with --invtelecine argument.
diff --git a/abs/extra/mythtv-contrib/6200ch.tar.gz b/abs/extra/mythtv-contrib/6200ch.tar.gz
new file mode 100644
index 0000000..53debf4
Binary files /dev/null and b/abs/extra/mythtv-contrib/6200ch.tar.gz differ
diff --git a/abs/extra/mythtv-contrib/PKGBUILD b/abs/extra/mythtv-contrib/PKGBUILD
new file mode 100644
index 0000000..7f73f9d
--- /dev/null
+++ b/abs/extra/mythtv-contrib/PKGBUILD
@@ -0,0 +1,150 @@
+# Contributor: Michael Hanson <hansonorders@verizon.net>
+# Maintainer: Michael Hanson <hansonorders@verizon.net>
+pkgname=mythtv-contrib
+pkgver=0.23
+pkgrel=7
+pkgdesc="User contributed scripts and utilities for mythtv."
+arch=('i686' 'x86_64')
+url="http://mythtv.org"
+license=('GPL')
+groups=('mythtv-extras')
+depends=('perl' 'mythtv')
+makedepends=('gcc' 'subversion' 'libavc1394' 'libraw1394' 'libiec61883')
+install='mythtv-contrib.install'
+source=('http://www.pdp8.net/directv/directv.pl' \
+        'http://stb-command.googlecode.com/files/stb-command1.2.tar.gz' \
+        'http://mythtv.mlaronson.com/myth-xbmc-connect/downloads/xbmc_mythlink.tgz' \
+        'mythchanger.10f.beta.tar' '6200ch.tar.gz' 'dct-channel_make.patch' \
+        'mythchanger_make.patch')
+patches=('dct-channel_make.patch' 'mythchanger_make.patch')
+_svntrunk=http://cvs.mythtv.org/svn/branches/release-0-23-fixes/mythtv/contrib
+_svnver=23566
+_svnmod=contrib
+
+build() {
+	# get clean copy from SVN repo
+	svn co $_svntrunk --config-dir ./ -r $_svnver $_svnmod
+	svn revert -R $_svnmod
+
+	cd $startdir/src/contrib
+
+	# build and install
+        echo "Building 6200ch..."
+        cd $srcdir
+        tar zxf 6200ch.tar.gz
+        cd $srcdir/6200ch
+        gcc -std=gnu99 -o 6200ch 6200ch.c -lavc1394 -lrom1394 -lraw1394 || return 1
+        install -D -m755 6200ch $startdir/pkg/usr/bin/6200ch || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.6200ch || return 1
+
+        echo "Building change-channel-lirc..."
+        cd $srcdir/contrib/channel_changers/change-channel-lirc || return 1
+        install -D -m755 *{.pl,.sh} $startdir/pkg/usr/bin || return 1
+
+        echo "Building d10control..."
+        cd $srcdir/contrib/channel_changers/d10control || return 1
+        install -D -m755 d10control.pl $startdir/pkg/usr/bin/d10control.pl  || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.d10control
+
+        echo "Building dct-channel..."
+        cd $srcdir/contrib/channel_changers/dct-channel
+        patch -p4 <$startdir/dct-channel_make.patch || return 1
+        cd $srcdir/contrib/channel_changers/dct-channel || return 1
+        make || return 1
+        install -D -m755 channel $startdir/pkg/usr/bin || return 1
+        install -D -m644 channel.1 $startdir/pkg/usr/man/man1/channel.1 || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.dct-channel
+        install -D -m644 COPYING $startdir/pkg/usr/share/licenses/mythtv-contrib/COPYING.dct-channel
+
+        echo "Building dct2000serial..."
+        cd $srcdir/contrib/channel_changers/dct2000serial || return 1
+        install -D -m755 *.py $startdir/pkg/usr/bin || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.dct2000serial
+
+        echo "Building redeye..."
+        cd $srcdir/contrib/channel_changers/red_eye || return 1
+        gcc -Wall -o red_eye red_eye.c || return 1
+        install -D -m755 red_eye $startdir/pkg/usr/bin/red_eye || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.red_eye
+
+        echo "Building sa3250ch..."
+        cd $srcdir/contrib/channel_changers/sa3250ch || return 1
+        gcc -Wall -o sa3250ch sa3250ch.c -lrom1394 -lavc1394 -lraw1394 || return 1
+        install -D -m755 sa3250ch $startdir/pkg/usr/bin/sa3250ch || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.sa3250ch
+
+        echo "Building firewire_tester..."
+        cd $srcdir/contrib/development/firewire_tester || return 1
+        gcc -Wall -o firewire_tester firewire_tester.c -liec61883 -lraw1394 || return 1
+        install -D -m755 firewire_tester $startdir/pkg/usr/bin || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.firewire_tester
+
+        echo "Building tsc-calibrate..."
+        cd $srcdir/contrib/development/tsc-calibrate || return 1
+        gcc -o tsc-calibrate tsc-calibrate.c || return 1
+        install -D -m755 tsc-calibrate $startdir/pkg/usr/bin || return 1
+
+        echo "Building mythname..."
+        cd $srcdir/contrib/info/mythname || return 1
+        install -D -m755 mythname.pl $startdir/pkg/usr/bin || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.mythname
+
+        echo "Building misc_status_info..."
+        cd $srcdir/contrib/info/misc_status_info || return 1
+        install -D -m755 *{.sh,.pl} $startdir/pkg/usr/bin || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.misc_status_info
+
+        echo "Building maintenance..."
+        cd $srcdir/contrib/maintenance || return 1
+        install -D -m755 *.pl $startdir/pkg/usr/bin || return 1
+
+        echo "Building mythmail..."
+        cd $srcdir/contrib/mythmail || return 1
+        install -D -m755 *.pl $startdir/pkg/usr/bin || return 1
+
+        echo "Building recovery..."
+        cd $srcdir/contrib/recovery || return 1
+        install -D -m755 *.pl $startdir/pkg/usr/bin || return 1
+
+        echo "Building user_jobs..."
+        cd $srcdir/contrib/user_jobs || return 1
+        install -D -m755 *.pl $startdir/pkg/usr/bin || return 1
+        install -D -m755 setbookmark $startdir/pkg/usr/bin/setbookmark.pl || return 1
+
+        echo "Building directv.pl..."
+        cd $srcdir || return 1
+        install -D -m755 directv.pl $startdir/pkg/usr/bin || return 1
+
+        echo "Building stb-command..."
+        cd $srcdir
+        tar zxf stb-command1.0.tar.gz || return 1
+        cd $srcdir/stb-command
+        make || return 1
+	install -D -m755 stb-command $startdir/pkg/usr/bin || return 1
+        install -D -m755 sa3250_ch_guid  $startdir/pkg/usr/bin || return 1
+        install -D -m755 stb_cmd_guid  $startdir/pkg/usr/bin || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.stb-command || return 1
+
+        echo "Building mythchanger..."
+        cd $srcdir
+        tar xf mythchanger.10f.beta.tar || return 1
+        cd $srcdir/mythchanger.10f.beta
+        patch -p1 <$startdir/mythchanger_make.patch || return 1
+        make || return 1
+        install -D -m755 mythchanger $pkgdir/usr/bin || return 1
+        install -D -m644 README $startdir/pkg/usr/share/doc/mythtv-contrib/README.mythchanger
+
+        echo "Building xbmc mythlink..."
+        cd $srcdir
+        tar zxf xbmc_mythlink.tgz || return 1
+        install -D -m755 tvdb_get.sh $startdir/pkg/usr/bin || return 1
+        install -D -m755 xbmc_cleanup.sh $startdir/pkg/usr/bin || return 1
+        install -D -m755 xbmc_mythlink.py $startdir/pkg/usr/bin || return 1
+}
+md5sums=('89cfc17883a41e365e85e0a4ac20994f'
+         '8067175170add2c4d8aa333e43c9387c'
+         '2ee7eafc3804f0bd48ede0ad05e718f1'
+         '34d148795f832f12973a08d59e9a0ef3'
+         '9029957cad36d5867a070da373d2bc2a'
+         '309342034f20d85dce3270a21320fb4c'
+         'c5996437bef4448acbee300bd6659dad')
diff --git a/abs/extra/mythtv-contrib/dct-channel_make.patch b/abs/extra/mythtv-contrib/dct-channel_make.patch
new file mode 100644
index 0000000..9d9dc53
--- /dev/null
+++ b/abs/extra/mythtv-contrib/dct-channel_make.patch
@@ -0,0 +1,16 @@
+--- src/contrib/channel_changers/dct-channel/Makefile.orig	2010-03-23 00:56:51.000000000 +0000
++++ src/contrib/channel_changers/dct-channel/Makefile	2010-03-23 00:57:47.000000000 +0000
+@@ -1,5 +1,5 @@
+ CFLAGS = -Wall
+-PREFIX = /usr/local
++PREFIX = /data/LinHES-PKGBUILD/abs/extra-testing/community/mythtv-contrib/pkg/usr
+ MANPATH = ${PREFIX}/man/man1
+ BINPATH = ${PREFIX}/bin
+ 
+@@ -44,4 +44,4 @@
+ 	rm -f *.o channel core
+ 
+ veryclean: clean
+-	rm -f channel.1
+\ No newline at end of file
++	rm -f channel.1
diff --git a/abs/extra/mythtv-contrib/mythchanger.10f.beta.tar b/abs/extra/mythtv-contrib/mythchanger.10f.beta.tar
new file mode 100644
index 0000000..e848866
Binary files /dev/null and b/abs/extra/mythtv-contrib/mythchanger.10f.beta.tar differ
diff --git a/abs/extra/mythtv-contrib/mythchanger_make.patch b/abs/extra/mythtv-contrib/mythchanger_make.patch
new file mode 100644
index 0000000..facd9e6
--- /dev/null
+++ b/abs/extra/mythtv-contrib/mythchanger_make.patch
@@ -0,0 +1,8 @@
+--- mythchanger.10f.beta/Makefile.orig	2010-03-23 01:35:27.000000000 +0000
++++ mythchanger.10f.beta/Makefile	2010-03-23 01:36:16.000000000 +0000
+@@ -1,4 +1,4 @@
+-prefix = /usr
++prefix = /data/LinHES-PKGBUILD/abs/extra-testing/community/mythtv-contrib/pkg/usr
+ 
+ CC = gcc
+ 
diff --git a/abs/extra/mythtv-contrib/mythtv-contrib.install b/abs/extra/mythtv-contrib/mythtv-contrib.install
new file mode 100644
index 0000000..bb7b801
--- /dev/null
+++ b/abs/extra/mythtv-contrib/mythtv-contrib.install
@@ -0,0 +1,7 @@
+post_install() {
+     echo ">>> AS IS WITHOUT WARRANTY."
+     echo ">>> DO NOT FILE BUG REPORTS ON COMPONENTS OF THIS PACKAGE."
+     echo ">>> ANY ISSUES WITH SHOULD BE TAKEN UP WITH THE COMPONENT'S"
+     echo ">>> AUTHOR."
+     echo ">>> See README's in /usr/share/doc/mythtv-contrib"
+}
diff --git a/abs/extra/mythtv-contrib/xbmc_mythlink.tgz b/abs/extra/mythtv-contrib/xbmc_mythlink.tgz
new file mode 100644
index 0000000..be3f2ef
Binary files /dev/null and b/abs/extra/mythtv-contrib/xbmc_mythlink.tgz differ
diff --git a/abs/extra/netkit-bsd-finger/LICENSE b/abs/extra/netkit-bsd-finger/LICENSE
new file mode 100644
index 0000000..7825451
--- /dev/null
+++ b/abs/extra/netkit-bsd-finger/LICENSE
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 1989 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Tony Nardo of the Johns Hopkins University/Applied Physics Lab.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by the University of
+ *      California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
diff --git a/abs/extra/netkit-bsd-finger/PKGBUILD b/abs/extra/netkit-bsd-finger/PKGBUILD
new file mode 100644
index 0000000..06a45cc
--- /dev/null
+++ b/abs/extra/netkit-bsd-finger/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 35715 2009-04-16 03:28:17Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=netkit-bsd-finger
+pkgver=0.17
+pkgrel=4
+pkgdesc="bsd-finger ported to Linux"
+arch=('i686' 'x86_64')
+url="ftp://ftp.uk.linux.org/pub/linux/Networking/netkit"
+license=('BSD')
+depends=('glibc' 'xinetd')
+backup=('etc/xinetd.d/finger')
+source=(ftp://ftp.uk.linux.org/pub/linux/Networking/netkit/bsd-finger-$pkgver.tar.gz finger.xinetd LICENSE)
+md5sums=('52bf281aac8814bf56cdc92f7661ee75' 'a8682004dc8dee356065162bde892b47'\
+         '5fc568418a0379fc3a358ed1c2523b44')
+
+build() {
+   cd $srcdir/bsd-finger-$pkgver
+   install -d $pkgdir/usr/{bin,sbin} $pkgdir/usr/share/man/{man1,man8}
+   ./configure --prefix=/usr || return 1
+   sed -i 's@include <sys/time.h>@include <time.h>@' finger/lprint.c || return 1
+   sed -i 's@include <sys/time.h>@include <time.h>@' finger/sprint.c || return 1
+   make || return 1
+   make INSTALLROOT=$pkgdir MANDIR=/usr/share/man install || return 1
+   install -D -m644 $srcdir/finger.xinetd $pkgdir/etc/xinetd.d/finger || return 1
+   install -D -m644 ../LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/extra/netkit-bsd-finger/finger.xinetd b/abs/extra/netkit-bsd-finger/finger.xinetd
new file mode 100644
index 0000000..cc9a8b1
--- /dev/null
+++ b/abs/extra/netkit-bsd-finger/finger.xinetd
@@ -0,0 +1,8 @@
+service finger
+{
+	socket_type		= stream
+	wait			= no
+	user			= nobody
+	server			= /usr/sbin/in.fingerd
+	disable			= yes
+}
diff --git a/abs/extra/numlockx/PKGBUILD b/abs/extra/numlockx/PKGBUILD
new file mode 100644
index 0000000..172cceb
--- /dev/null
+++ b/abs/extra/numlockx/PKGBUILD
@@ -0,0 +1,26 @@
+# $Id: PKGBUILD 19225 2008-11-17 22:12:15Z thayer $
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+# Contributor: Travis Willard <travisw@wmpub.ca> 
+# Maintainer: Thayer Williams <thayer@archlinux.org> 
+
+pkgname=numlockx
+pkgver=1.1
+pkgrel=4
+pkgdesc="Turns on the numlock key in X11"
+arch=('i686' 'x86_64')
+license=('MIT')
+url="http://ktown.kde.org/~seli/numlockx/"
+depends=('libxtst')
+source=(http://ktown.kde.org/~seli/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('127d9dfbbbe6dbec62cc78db340f913c')
+
+build() {
+	cd $srcdir/$pkgname-$pkgver
+	./configure --prefix=/usr x_includes=/usr/include/X11 \
+		x_libraries=/usr/lib || return 1
+	make || return 1
+	make prefix=$pkgdir/usr install || return 1
+
+    # Install the custom MIT license
+    install -D LICENSE $pkgdir/usr/share/licenses/$pkgname/LICENSE || return 1
+}
diff --git a/abs/extra/nvram-wakup/PKGBUILD b/abs/extra/nvram-wakup/PKGBUILD
new file mode 100755
index 0000000..057606b
--- /dev/null
+++ b/abs/extra/nvram-wakup/PKGBUILD
@@ -0,0 +1,15 @@
+pkgname=nvram-wakup
+pkgver=1.1
+pkgrel=1
+pkgdesc="set the wakeup time of the localpc"
+license="GPL"
+arch=(i686)
+url="http://sourceforge.net/projects/nvram-wakeup/"
+source=("http://downloads.sourceforge.net/project/nvram-wakeup/nvram-wakup-1.1.tar.gz?use_mirror=kent")
+
+build() {
+	cd $startdir/src/$pkgname-$pkgver
+	make || return 1
+	make prefix=$startdir/pkg/usr install
+}
+
diff --git a/abs/extra/p7zip/PKGBUILD b/abs/extra/p7zip/PKGBUILD
new file mode 100644
index 0000000..9ae5122
--- /dev/null
+++ b/abs/extra/p7zip/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 70413 2010-02-26 18:54:59Z thayer $
+# Maintainer: Thayer Williams <thayer@archlinux.org>
+# Contributor: Hugo Doria <hugo@archlinux.org>
+# Contributor: TuxSpirit<tuxspirit@archlinux.fr>  2007/11/17 21:22:36 UTC
+
+pkgname=p7zip
+pkgver=9.04
+pkgrel=2
+pkgdesc="A command-line port of the 7zip compression utility"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://p7zip.sourceforge.net"
+depends=('gcc-libs' 'bash')
+source=(http://downloads.sourceforge.net/sourceforge/$pkgname/${pkgname}_${pkgver}_src_all.tar.bz2)
+options=(!emptydirs)
+
+build() {
+  cd ${srcdir}/${pkgname}_${pkgver}
+
+  #Arch64 fix
+  if [ "$CARCH" == "x86_64" ]; then
+      cp makefile.linux_amd64 makefile.machine
+  else
+      cp makefile.linux_x86_ppc_alpha_gcc_4.X makefile.machine
+  fi
+
+  sed -i "s|usr/local|usr|g" makefile
+
+  make all3 OPTFLAGS="${CXXFLAGS}" || return 1
+  make install DEST_HOME="${pkgdir}/usr" \
+	DEST_MAN="${pkgdir}/usr/share/man" \
+	DEST_SHARE_DOC="http://www.bugaco.com/7zip"
+
+  mkdir -p ${pkgdir}/usr/share/doc/p7zip/DOCS
+  install -m555 bin/7z.so ${pkgdir}/usr/lib/p7zip/
+
+  sed -i "s|${pkgdir}/usr|/usr|g" ${pkgdir}/usr/bin/7z
+  sed -i "s|${pkgdir}/usr|/usr|g" ${pkgdir}/usr/bin/7za
+  sed -i "s|${pkgdir}/usr|/usr|g" ${pkgdir}/usr/bin/7zr
+
+  # Install mc's virtual filesystem
+  install -m755 -D contrib/VirtualFileSystemForMidnightCommander/u7z \
+    ${pkgdir}/usr/share/mc/extfs/u7z
+}
+md5sums=('9194ebf9a2b3735d236aed001de5f6f8')
diff --git a/abs/extra/postfix/PKGBUILD b/abs/extra/postfix/PKGBUILD
new file mode 100644
index 0000000..1b2fa06
--- /dev/null
+++ b/abs/extra/postfix/PKGBUILD
@@ -0,0 +1,52 @@
+# $Id: PKGBUILD 70372 2010-02-26 13:35:23Z paul $
+# Contributor: Jeff Brodnax <tullyarcher@bellsouth.net>
+# Maintainer: Paul Mattal <paul@archlinux.org>
+pkgname=postfix
+pkgver=2.7.0
+pkgrel=1
+pkgdesc="Secure, fast, easy to administer drop in replacement for Sendmail (MTA)"
+arch=('i686' 'x86_64')
+license=('custom')
+depends=('pcre' 'libsasl'   'db>=4.7')
+backup=(etc/postfix/aliases etc/postfix/virtual etc/postfix/relocated \
+	etc/postfix/access etc/postfix/header_checks etc/postfix/transport \
+	etc/postfix/generic etc/postfix/canonical \
+	etc/postfix/main.cf etc/postfix/master.cf)
+install="${pkgname}.install"
+provides=('smtp-server' 'smtp-forwarder')
+replaces=('postfix-mysql' 'postfix-pgsql')
+conflicts=('postfix-mysql' 'postfix-pgsql' 'smtp-server' 'smtp-forwarder')
+url="http://www.postfix.org/"
+source=(ftp://ftp.porcupine.org/mirrors/postfix-release/official/${pkgname}-${pkgver}.tar.gz \
+        ${pkgname}.patch.bz2 \
+	${pkgname})
+md5sums=('df648f59421604e895cce56325f00bae'
+         'a3c45ff23ef036143711793fcf2478c3'
+         'c847b96f08925f08b0f610468a8e21f6')
+
+build() {
+	cd ${srcdir}/${pkgname}-${pkgver}
+	
+	make makefiles \
+	        CCARGS="-DUSE_SASL_AUTH -I/usr/include/sasl \
+			-DUSE_CYRUS_SASL \
+			-DUSE_TLS" \
+	        AUXLIBS="-lsasl2 -lssl -lcrypto  -llber -lz -lm "
+	make OPT="${CFLAGS}" || return 1
+
+	sh postfix-install -non-interactive \
+		install_root="${pkgdir}" \
+		daemon_directory="/usr/lib/${pkgname}" \
+		sample_directory="/etc/${pkgname}/sample" \
+		manpage_directory="/usr/share/man"
+
+	cd ${pkgdir}
+	cat ${srcdir}/${pkgname}.patch |patch -Np0 || return 1
+	rm -f etc/${pkgname}/main.cf~
+
+	cd ${pkgdir}
+	mkdir etc/rc.d
+	install -m 0755 ${srcdir}/${pkgname} etc/rc.d/${pkgname}
+
+	install -Dm644 ${srcdir}/${pkgname}-${pkgver}/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/extra/postfix/__changelog b/abs/extra/postfix/__changelog
new file mode 100644
index 0000000..25ca6b4
--- /dev/null
+++ b/abs/extra/postfix/__changelog
@@ -0,0 +1 @@
+remove ldap/mysql/pg support
diff --git a/abs/extra/postfix/postfix b/abs/extra/postfix/postfix
new file mode 100755
index 0000000..37dd6a8
--- /dev/null
+++ b/abs/extra/postfix/postfix
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pgrep -f /usr/lib/postfix/master`
+
+start() {
+  stat_busy "Starting Postfix"
+  [ -z "$PID" ] && /usr/sbin/postfix start &> /dev/null
+  if [ $? -gt 0 ]; then
+    stat_fail
+  else
+    add_daemon postfix
+    stat_done
+  fi
+}
+
+stop() {
+  stat_busy "Stopping Postfix"
+  [ ! -z "$PID" ]  && /usr/sbin/postfix stop &> /dev/null
+  if [ $? -gt 0 ]; then
+    stat_fail
+  else
+    rm_daemon postfix
+    stat_done
+  fi
+}
+
+reload() {
+  stat_busy "Reloading Postfix"
+  [ ! -z "$PID" ] && kill -HUP $PID &> /dev/null
+  if [ $? -gt 0 ]; then
+    stat_fail
+  else
+    stat_done
+  fi
+}
+
+case "$1" in
+  start)
+    start
+    ;;
+  stop)
+    stop
+    ;;
+  restart)
+    # calling 'stop' and 'start' without the $0 fails...
+    $0 stop
+    $0 start
+    ;;
+  reload)
+    reload
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart|reload}"
+esac
+exit 0
diff --git a/abs/extra/postfix/postfix.install b/abs/extra/postfix/postfix.install
new file mode 100644
index 0000000..bac3e1d
--- /dev/null
+++ b/abs/extra/postfix/postfix.install
@@ -0,0 +1,38 @@
+# arg 1:  the new package version
+post_install() {
+    if [ -z "`grep '^postdrop::' /etc/group`" ]; then
+	groupadd -g 75 postdrop >& /dev/null
+    fi
+    if [ -z "`grep '^postfix::' /etc/group`" ]; then
+	groupadd -g 73 postfix >& /dev/null
+    fi
+    if [ -z "`grep '^postfix:' /etc/passwd`" ]; then
+	useradd -u 73 -d /var/spool/postfix -g postfix -s /bin/false postfix
+    else
+	# fix a packaging bug from before (postfix should have no shell)
+	usermod -s /bin/false postfix
+    fi
+
+    chown postfix var/spool/postfix/{active,bounce,corrupt,defer,deferred,\
+flush,hold,incoming,private,public,maildrop,trace,saved}
+    chown postfix var/lib/postfix
+    chgrp postdrop var/spool/postfix/{public,maildrop}
+    chgrp postdrop usr/sbin/postqueue
+    chgrp postdrop usr/sbin/postdrop
+    chmod g+s usr/sbin/{postqueue,postdrop}
+
+    newaliases
+}
+
+# arg 1:  the new package version
+# arg 2:  the old package version
+post_upgrade() {
+    post_install $1
+}
+
+# arg 1:  the old package version
+pre_remove() {
+    userdel postfix &> /dev/null
+    groupdel postfix &> /dev/null
+    groupdel postdrop &> /dev/null
+}
diff --git a/abs/extra/postfix/postfix.patch.bz2 b/abs/extra/postfix/postfix.patch.bz2
new file mode 100644
index 0000000..dbc0950
Binary files /dev/null and b/abs/extra/postfix/postfix.patch.bz2 differ
diff --git a/abs/extra/procmail/PKGBUILD b/abs/extra/procmail/PKGBUILD
new file mode 100644
index 0000000..356a147
--- /dev/null
+++ b/abs/extra/procmail/PKGBUILD
@@ -0,0 +1,21 @@
+# $Id: PKGBUILD 35774 2009-04-17 03:11:54Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=procmail
+pkgver=3.22
+pkgrel=2
+pkgdesc="Highly configurable auto mail processing."
+arch=(i686 x86_64)
+url="http://www.procmail.org"
+license=('GPL' 'custom:Artistic')
+depends=('glibc')
+source=(http://www.procmail.org/${pkgname}-${pkgver}.tar.gz)
+source=(ftp://ftp.psg.com/pub/unix/procmail/procmail-3.22.tar.gz)
+md5sums=('1678ea99b973eb77eda4ecf6acae53f1')
+
+build() {
+  cd $srcdir/$pkgname-$pkgver
+  yes n | make LOCKINGTEST="/tmp ." || return 1
+  make BASENAME=$pkgdir/usr MANDIR=$pkgdir/usr/share/man install || return 1
+  install -D -m644 Artistic ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/abs/extra/pth/PKGBUILD b/abs/extra/pth/PKGBUILD
new file mode 100644
index 0000000..2e0f66b
--- /dev/null
+++ b/abs/extra/pth/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 35785 2009-04-17 05:07:12Z eric $
+# Maintainer: damir <damir@archlinux.org>
+
+pkgname=pth
+pkgver=2.0.7
+pkgrel=2
+pkgdesc="The GNU Portable Threads."
+arch=('i686' 'x86_64')
+url="http://www.gnu.org/software/pth/"
+license=('LGPL')
+depends=('glibc')
+options=('!libtool' '!makeflags')
+source=(ftp://ftp.gnu.org/gnu/pth/${pkgname}-${pkgver}.tar.gz)
+md5sums=('9cb4a25331a4c4db866a31cbe507c793')
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+  ./configure --prefix=/usr --sysconfdir=/etc \
+              --localstatedir=/var --mandir=/usr/share/man || return 1
+  make || return 1
+  make DESTDIR=${pkgdir} install || return 1
+}
diff --git a/abs/extra/pyqt/ChangeLog b/abs/extra/pyqt/ChangeLog
new file mode 100644
index 0000000..e20b55a
--- /dev/null
+++ b/abs/extra/pyqt/ChangeLog
@@ -0,0 +1,21 @@
+
+2009-04-11  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Fixing the rpath issue, thanks Gerardo
+
+2008-11-22  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 4.4.4
+
+2008-10-22  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Rebuilt for python 2.6
+
+2008-08-09  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 4.4.3
+
+2008-07-06  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 4.4.2
+
diff --git a/abs/extra/pyqt/PKGBUILD b/abs/extra/pyqt/PKGBUILD
new file mode 100644
index 0000000..f6645c7
--- /dev/null
+++ b/abs/extra/pyqt/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 47994 2009-07-30 10:33:54Z pierre $
+# Maintainer: Douglas Soares de Andrade <douglas@archlinux.org>
+# Contributor: riai <riai@bigfoot.com> Ben <ben@benmazer.net>
+
+pkgname=pyqt
+pkgver=4.6
+pkgrel=1
+pkgdesc="A set of Python bindings for the Qt toolkit."
+arch=(i686 x86_64)
+url="http://riverbankcomputing.co.uk/software/pyqt/intro"
+depends=('sip>=4.8.2' 'qscintilla>=2.4.0' 'qt>=4.5.2' 'dbus-python' 'openssl')
+license=('GPL')
+provides=('pyqt4')
+replaces=('pyqt4')
+conflicts=('pyqt4')
+source=(http://riverbankcomputing.com/static/Downloads/PyQt4/PyQt-x11-gpl-$pkgver.tar.gz)
+
+build() {
+  cd ${srcdir}/PyQt-x11-gpl-${pkgver}
+
+  python configure.py --confirm-license -b /usr/bin \
+  -d /usr/lib/python2.6/site-packages \
+  -v /usr/share/sip
+
+  # Thanks Gerardo for the rpath fix
+  find -name 'Makefile' | xargs sed -i 's|-Wl,-rpath,/usr/lib||g;s|-Wl,-rpath,.* ||g'
+
+  make || return 1
+  make DESTDIR=${pkgdir} install
+} 
diff --git a/abs/extra/python-geoip/PKGBUILD b/abs/extra/python-geoip/PKGBUILD
new file mode 100644
index 0000000..9def348
--- /dev/null
+++ b/abs/extra/python-geoip/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 29760 2009-03-12 10:07:44Z douglas $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=python-geoip
+pkgver=1.2.4
+pkgrel=1
+pkgdesc="Python bindings for the GeoIP IP-to-country resolver library."
+arch=(i686 x86_64)
+url="http://www.maxmind.com/app/python"
+license=('LGPL')
+depends=('python>=2.5' 'geoip')
+source=(http://www.maxmind.com/download/geoip/api/python/GeoIP-Python-${pkgver}.tar.gz)
+replaces=('geoip-python')
+provides=('geoip-python')
+
+build() {
+  cd ${startdir}/src/GeoIP-Python-${pkgver}
+  python setup.py build install --root=${startdir}/pkg
+}
+md5sums=('50f820d854476efaf3b7af733ffe4236')
diff --git a/abs/extra/python-lxml/PKGBUILD b/abs/extra/python-lxml/PKGBUILD
new file mode 100644
index 0000000..c6fda1c
--- /dev/null
+++ b/abs/extra/python-lxml/PKGBUILD
@@ -0,0 +1,34 @@
+# $Id: $
+# Maintainer: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: Jaroslav Lichtblau <dragonlord@aur.archlinux.org>
+# Contributor: Angel 'angvp' Velasquez <angvp[at]archlinux.com.ve>
+# Contributor: William Rea <sillywilly@gmail.com>
+# Contributor: Guillem Rieu <guillemr@gmx.net>
+
+pkgname=python-lxml
+pkgver=2.2.6
+pkgrel=1
+pkgdesc="Python binding for the libxml2 and libxslt libraries"
+arch=('i686' 'x86_64')
+license=('BSD' 'GPL' 'custom')
+url="http://codespeak.net/lxml"
+depends=('python' 'libxslt')
+optdepends=("beautiful-soup: support for parsing not well formed HTML")
+conflicts=('lxml')
+replaces=('lxml')
+source=(http://codespeak.net/lxml/lxml-$pkgver.tgz)
+md5sums=('b1f700fb22d7ee9b977ee3eceb65b20c')
+
+build() {
+  /bin/true
+}
+
+package() {
+  cd ${srcdir}/lxml-$pkgver
+
+  python setup.py install --root=${pkgdir} || return 1
+
+  install -D -m644 LICENSES.txt ${pkgdir}/usr/share/licenses/$pkgname/LICENSE || return 1
+  install -D -m644 doc/licenses/BSD.txt ${pkgdir}/usr/share/licenses/$pkgname/BSD.txt || return 1
+  install -D -m644 doc/licenses/elementtree.txt ${pkgdir}/usr/share/licenses/$pkgname/elementtree.txt || return 1
+}
diff --git a/abs/extra/python-pybluez/PKGBUILD b/abs/extra/python-pybluez/PKGBUILD
index 8cdbaf4..27b9b61 100644
--- a/abs/extra/python-pybluez/PKGBUILD
+++ b/abs/extra/python-pybluez/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: cs-cam - me.at.camdaniel.com
 
 pkgname=python-pybluez
-pkgver=0.16
+pkgver=0.18
 pkgrel=1
 pkgdesc="Python wrapper for the BlueZ Bluetooth stack"
 arch=('i686' 'x86_64')
@@ -14,10 +14,11 @@ conflicts=('pybluez')
 replaces=('pybluez')
 depends=('python' 'bluez')
 source=(http://pybluez.googlecode.com/files/PyBluez-$pkgver.tar.gz)
-md5sums=('2ce8ff0dbb94c6be14e92e9968f4c914')
 
 build() {
   cd $srcdir/PyBluez-$pkgver
   python setup.py install --root=$pkgdir && \
   ln -s bluetooth/_bluetooth.so $pkgdir/usr/lib/python2.6/site-packages/_bluetooth.so
 }
+
+md5sums=('be8c8ce615c3189fda1aaf3d568314b2')
diff --git a/abs/extra/python-pyserial/PKGBUILD b/abs/extra/python-pyserial/PKGBUILD
new file mode 100644
index 0000000..d90ee2d
--- /dev/null
+++ b/abs/extra/python-pyserial/PKGBUILD
@@ -0,0 +1,20 @@
+# $Id: PKGBUILD 82 2009-07-17 19:56:55Z aaron $
+# Maintainer: Douglas Soares de Andrade <dsandrade@gmail.com>
+# Contributor: Douglas Soares de Andrade <dsandrade@gmail.com>
+
+pkgname=python-pyserial
+pkgver=2.4
+pkgrel=1
+pkgdesc="Multiplatform Serial Port Module for Python"
+arch=('i686' 'x86_64')
+url="http://pyserial.sf.net"
+license=('custom:PYTHON')
+depends=('python')
+source=(http://downloads.sourceforge.net/sourceforge/pyserial/pyserial-$pkgver.tar.gz)
+
+build() {
+	cd $startdir/src/pyserial-$pkgver
+    python setup.py install --root=$startdir/pkg
+	install -D -m644 LICENSE.txt $startdir/pkg/usr/share/licenses/$pkgname/LICENSE.txt
+}
+md5sums=('eec19df59fd75ba5a136992897f8e468')
diff --git a/abs/extra/qscintilla/ChangeLog b/abs/extra/qscintilla/ChangeLog
new file mode 100644
index 0000000..8e78889
--- /dev/null
+++ b/abs/extra/qscintilla/ChangeLog
@@ -0,0 +1,13 @@
+
+2008-11-22  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 2.3.2
+
+2008-10-15  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 2.3
+
+2008-07-06  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 2.2
+
diff --git a/abs/extra/qscintilla/PKGBUILD b/abs/extra/qscintilla/PKGBUILD
new file mode 100644
index 0000000..9b3bf94
--- /dev/null
+++ b/abs/extra/qscintilla/PKGBUILD
@@ -0,0 +1,55 @@
+# $Id: PKGBUILD 46926 2009-07-22 04:56:17Z pierre $
+# Maintainer: Douglas Soares de Andrade <dsa@aur.archlinux.org>
+# Contributor: Michal Krenek <mikos@sg1.cz>
+# Bug #8577 Modifications made by DaNiMoTh <jjdanimoth.aur@gmail.com>
+
+pkgname=qscintilla
+pkgver=2.4.0
+_pkgver=2.4
+pkgrel=1
+license=('GPL')
+pkgdesc="A port to Qt4 of Neil Hodgson's Scintilla C++ editor class."
+arch=('i686' 'x86_64')
+url="http://www.riverbankcomputing.co.uk/software/qscintilla/download"
+depends=('qt')
+provides=('qscintilla2')
+conflicts=('qscintilla2')
+replaces=('qscintilla2')
+source=(http://riverbankcomputing.com/static/Downloads/QScintilla2/QScintilla-gpl-$_pkgver.tar.gz)
+md5sums=('dd69520ec91f1acb97a4eb74ddde37c9')
+
+build() {
+    cd $srcdir/QScintilla-gpl-$_pkgver/Qt4
+    sed -i "s|DESTDIR = .*|DESTDIR = $pkgdir/usr/lib|g" qscintilla.pro
+    sed -i "s|header.path = .*|header.path = $pkgdir/usr/include|g" qscintilla.pro
+    sed -i "s|trans.path = .*|trans.path = $pkgdir/usr/share/qt/translations|g" qscintilla.pro
+    sed -i "s|qsci.path = .*|qsci.path = $pkgdir/usr/share/qt/translations|g" qscintilla.pro
+
+    qmake qscintilla.pro
+    sed -i 's|$(MOVE) $(TARGET)|$(COPY) $(TARGET)|g' Makefile
+    make || return 1
+    make DESTDIR=$pkgdir install
+    
+    cd ../designer-Qt4
+
+    # Qt4 designer qscintilla2 plugin
+    mkdir -p $pkgdir/usr/lib/qt/plugins/designer
+
+    echo "INCPATH += ../Qt4" >> designer.pro
+    sed -i "s|LIBS.*|LIBS += -L../Qt4 -lqscintilla2|g" designer.pro
+    qmake designer.pro
+    make || return 1
+    cp libqscintillaplugin.so $pkgdir/usr/lib/qt/plugins/designer/ || return 1
+
+    msg "Installing the libs to the right place"
+
+    cd ../Qt4
+
+    cp libqscintilla2.so.5.1.0 $pkgdir/usr/lib/ || return 1
+
+    pushd $pkgdir/usr/lib/
+        ln -s libqscintilla2.so.5.1.0 libqscintilla2.so
+        ln -s libqscintilla2.so.5.1.0 libqscintilla2.so.5
+        ln -s libqscintilla2.so.5.1.0 libqscintilla2.so.5.1
+    popd
+}
diff --git a/abs/extra/recstat/PKGBUILD b/abs/extra/recstat/PKGBUILD
new file mode 100644
index 0000000..023a0ed
--- /dev/null
+++ b/abs/extra/recstat/PKGBUILD
@@ -0,0 +1,19 @@
+pkgname=recstat
+pkgver=1
+pkgrel=20
+pkgdesc="pkg to help use the  System LEDs for Recording Status"
+arch=('i686' 'x86_64')
+url=""
+depends=('python' 'python-pyserial')
+license=('GPL')
+source=(recstat recstat.py run)
+md5sums=('626acb8cdd9e5cdb3a502bc12b828067')
+install=recstat.install
+build () {
+#  install -D $startdir/src/recstat $startdir/pkg/etc/rc.d/recstat
+  install -D $startdir/src/recstat.py $startdir/pkg/usr/bin/recstat.py
+  install -D $startdir/src/run $startdir/pkg/etc/sv/recstat/run
+}
+md5sums=('7f4ba41b65ed4d693d60d5ea00e8411b'
+         '7bc206d78a096e6ee80b9bb346619ed4'
+         '3a7cd3382212650e9233b910ed28d046')
diff --git a/abs/extra/recstat/recstat b/abs/extra/recstat/recstat
new file mode 100644
index 0000000..2d72c61
--- /dev/null
+++ b/abs/extra/recstat/recstat
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+set -e
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+DESC="serial port encoder status script"
+NAME=recstat
+DAEMON=/usr/bin/$NAME.py
+PIDFILE=/var/run/$NAME.pid
+SCRIPTNAME=/etc/init.d/$NAME
+
+# Gracefully exit if the package has been removed.
+test -x $DAEMON || exit 0
+
+#
+#       Function that starts the daemon/service.
+#
+d_start() {
+        start-stop-daemon --start --quiet --make-pidfile --pidfile $PIDFILE \
+                --exec $DAEMON &
+}
+
+#
+#       Function that stops the daemon/service.
+#
+d_stop() {
+        kill -9 `cat $PIDFILE`
+}
+
+case "$1" in
+  start)
+        echo -n "Starting $DESC: $NAME"
+        d_start
+        echo "."
+        ;;
+  stop)
+        echo -n "Stopping $DESC: $NAME"
+        d_stop
+        echo "."
+        ;;
+  restart|force-reload)
+        echo -n "Stopping $DESC: $NAME"
+        d_stop
+        sleep 1
+        echo "."
+        echo -n "Starting $DESC: $NAME"
+        d_start
+        echo "."
+        ;;
+  *)
+        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
+        exit 1
+        ;;
+esac
+
+exit 0 
\ No newline at end of file
diff --git a/abs/extra/recstat/recstat.install b/abs/extra/recstat/recstat.install
new file mode 100644
index 0000000..ecd58f0
--- /dev/null
+++ b/abs/extra/recstat/recstat.install
@@ -0,0 +1,13 @@
+# arg 1:  the new package version
+post_install() {
+    echo ""
+    echo ""
+    echo ""
+    echo " Edit /usr/bin/recstat.py  to fit your tuner setup"
+    echo " http://linhes.org/bugs/projects/lin-hes/wiki/_Using_System_LEDs_for_Recording_Status_"
+    echo " To start this program at boot run  add_service.sh recstat    "
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/extra/recstat/recstat.py b/abs/extra/recstat/recstat.py
new file mode 100644
index 0000000..8def041
--- /dev/null
+++ b/abs/extra/recstat/recstat.py
@@ -0,0 +1,38 @@
+#!/usr/bin/python 
+
+import httplib 
+import serial,time 
+
+mythStatus = "127.0.0.1:6544" 
+encoder1 = "Encoder 1 " 
+encoder2 = "Encoder 2 " 
+recording = "is local on mythtv and is recording" 
+watching = "is local on mythtv and is watching" 
+
+#Open COM2 
+s = serial.Serial(1) 
+#Turn off all lights 
+s.setDTR(0) 
+s.setRTS(0) 
+
+while(True): 
+    conn = httplib.HTTPConnection(mythStatus) 
+    conn.request("GET", "/") 
+    r1 = conn.getresponse() 
+    results = r1.read() 
+
+    if(results.find(encoder1+recording)!=-1): 
+        s.setDTR(1) 
+    elif (results.find(encoder1+watching) !=-1): 
+        s.setDTR(1) 
+    else: 
+        s.setDTR(0) 
+       
+    if(results.find(encoder2+recording)!=-1): 
+        s.setRTS(1) 
+    elif (results.find(encoder2+watching) !=-1): 
+        s.setRTS(1) 
+    else: 
+        s.setRTS(0) 
+
+    time.sleep(1)
diff --git a/abs/extra/recstat/run b/abs/extra/recstat/run
new file mode 100755
index 0000000..150fdb4
--- /dev/null
+++ b/abs/extra/recstat/run
@@ -0,0 +1,7 @@
+#!/bin/sh
+exec 2>&1
+export TERM=linux
+. /etc/rc.conf
+. /etc/rc.d/functions
+stat_runit "Starting recstat"
+exec /usr/bin/recstat.py
diff --git a/abs/extra/rrd_stats/PKGBUILD b/abs/extra/rrd_stats/PKGBUILD
index 40f0536..1f987e4 100644
--- a/abs/extra/rrd_stats/PKGBUILD
+++ b/abs/extra/rrd_stats/PKGBUILD
@@ -1,6 +1,6 @@
 pkgname=rrd_stats
 pkgver=1
-pkgrel=16
+pkgrel=18
 pkgdesc="graph system stats"
 arch=('i686' 'x86_64')
 url=""
@@ -18,3 +18,4 @@ build() {
   chown -R http:users $startdir/pkg/data/srv/httpd
   chmod -R 755 $startdir/pkg/data/srv/httpd
 }
+md5sums=('e3d5f7d56fd1a3f26af0226ddcc53bfa')
diff --git a/abs/extra/rrd_stats/rrd_stats.tgz b/abs/extra/rrd_stats/rrd_stats.tgz
index c141ffa..4f1f3f5 100644
Binary files a/abs/extra/rrd_stats/rrd_stats.tgz and b/abs/extra/rrd_stats/rrd_stats.tgz differ
diff --git a/abs/extra/sdlmame/PKGBUILD b/abs/extra/sdlmame/PKGBUILD
index cb9d65b..2718a57 100644
--- a/abs/extra/sdlmame/PKGBUILD
+++ b/abs/extra/sdlmame/PKGBUILD
@@ -1,65 +1,89 @@
-# $Id: PKGBUILD,v 1.19 2009/04/24 15:05:30 sergej Exp $
+# $Id: PKGBUILD 12909 2010-03-15 11:46:58Z spupykin $
 # Contributor: robb_force <robb_force@holybuffalo.net>
 # Maintainer: JJDaNiMoTh <jjdanimoth@gmail.com>
 
 pkgname=sdlmame
-pkgver=0.131
-pkgrel=1
+pkgver=0.137
+_basever=0137
+pkgrel=3
 pkgdesc="A port of the popular Multiple Arcade Machine Emulator using SDL with OpenGL support."
-url="http://rbelmont.mameworld.info/?page_id=163"
+url="http://mamedev.org/"
 license=('custom:MAME License')
 arch=('i686' 'x86_64')
 depends=('sdl>=1.2.11' 'libxinerama' 'gconf')
 makedepends=('unzip' 'nasm' 'mesa')
-DLAGENTS=('http::/usr/bin/wget -U "" -c -t 3 --waitretry=3')
-options=('!makeflags' 'force')
+DLAGENTS=('http::/usr/bin/wget -U "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090804 Shiretoko/3.5.2" -c -t 3 --waitretry=3')
+options=('force')
 install=sdlmame.install
-source=(http://rbelmont.mameworld.info/${pkgname}${pkgver%.*}${pkgver#*.}.zip \
-	sdlmame.sh \
-	extras.tar.gz)
-md5sums=('d4891999ec2ee11cb0d75a1596e17060'
-         '3119ccfa1e970eba4467df31208adaf0'
-         '420b61240bf5ae11615ba7c6100ee00d')
+source=("http://aarongiles.com/mirror/releases/mame0137s.zip"
+#"mame${_basever}s.zip::http://mamedev.org/downloader.php?&file=mame${_basever}s.zip"
+#	"http://mamedev.org/updates/0136u1_diff.zip"
+#	"http://mamedev.org/updates/0136u2_diff.zip"
+#	"http://mamedev.org/updates/0136u3_diff.zip"
+	"sdlmame.sh"
+	"extras.tar.gz"
+	"mame-0137-wiimote.diff")
 
 build() {
-  cd ${startdir}/src/${pkgname}${pkgver%.*}${pkgver#*.}
+  cd $srcdir/
 
-  sed -i 's/-Werror//' makefile || return 1
+  if [ $NOEXTRACT -eq 0 ]; then
+    unzip mame.zip
+#    find . -type f -not -name uismall.png | xargs perl -pi -e 's/\r\n?/\n/g'
+#    patch -p0 -E <0136u1.diff
+#    patch -p0 -E <0136u2.diff
+#    patch -p0 -E <0136u3.diff
+    patch -p1 < ../mame-0137-wiimote.diff || return 1
+    sed -i 's/-Werror//' makefile || return 1
+  fi
 
   # Modify the make options based on the user's architecture
   if [ "$CARCH" == "x86_64" ]; then
     echo "Compiling for AMD64..."
     make AMD64=1 PTR64=1 || return 1
+    make tools AMD64=1 PTR64=1 || return 1
   elif [ "$CARCH" == "i686" ]; then
     make I686=1 || return 1
+    make tools I686=1 || return 1
   else
     echo "Compiling for i386..."
     make PM=1 || return 1
+    make tools PM=1 || return 1
   fi
 
   # Install the sdlmame script
-  install -Dm755 ${startdir}/src/${pkgname}.sh ${startdir}/pkg/usr/bin/${pkgname} || return 1
+  install -Dm755 $srcdir/${pkgname}.sh $pkgdir/usr/bin/${pkgname} || return 1
 
   # Install the applications and the UI font in /usr/share
-  install -Dm755 mame* ${startdir}/pkg/usr/share/${pkgname}/${pkgname} && \
-  install -m755 chdman ${startdir}/pkg/usr/share/${pkgname}/chdman && \
-  install -m755 jedutil ${startdir}/pkg/usr/share/${pkgname}/jedutil && \
-#  install -m755 makemeta ${startdir}/pkg/usr/share/${pkgname}/makemeta && \
-  install -m755 regrep ${startdir}/pkg/usr/share/${pkgname}/regrep && \
-  install -m755 romcmp ${startdir}/pkg/usr/share/${pkgname}/romcmp && \
-  install -m755 runtest ${startdir}/pkg/usr/share/${pkgname}/runtest && \
-  install -m755 testkeys ${startdir}/pkg/usr/share/${pkgname}/testkeys && \
-  install -m755 src2html ${startdir}/pkg/usr/share/${pkgname}/src2html && \
-  install -m755 srcclean ${startdir}/pkg/usr/share/${pkgname}/srcclean && \
-  install -m755 ldverify ${startdir}/pkg/usr/share/${pkgname}/ldverify && \
-  install -m644 ui.bdf ${startdir}/pkg/usr/share/${pkgname}/ui.bdf || return 1
+  install -Dm755 mame $pkgdir/usr/share/${pkgname}/${pkgname} || \
+  install -Dm755 mame64 $pkgdir/usr/share/${pkgname}/${pkgname} || return 1
+
+  install -m755 chdman $pkgdir/usr/share/${pkgname}/chdman && \
+  install -m755 jedutil $pkgdir/usr/share/${pkgname}/jedutil && \
+  install -m755 regrep $pkgdir/usr/share/${pkgname}/regrep && \
+  install -m755 romcmp $pkgdir/usr/share/${pkgname}/romcmp && \
+  install -m755 testkeys $pkgdir/usr/share/${pkgname}/testkeys && \
+  install -m755 src2html $pkgdir/usr/share/${pkgname}/src2html && \
+  install -m755 srcclean $pkgdir/usr/share/${pkgname}/srcclean && \
+  install -m755 ldverify $pkgdir/usr/share/${pkgname}/ldverify && \
+  install -m755 ldresample $pkgdir/usr/share/${pkgname}/ldresample || return 1
+
+#  install -m755 makemeta $pkgdir/usr/share/${pkgname}/makemeta && \
+#  install -m755 runtest $pkgdir/usr/share/${pkgname}/runtest && \
+#  install -m644 ui.bdf $pkgdir/usr/share/${pkgname}/ui.bdf || return 1
 
   # Install the extra bits
-  install -d ${startdir}/pkg/usr/share/${pkgname}/{artwork,ctrlr,keymaps} && \
-  install -m644 ${startdir}/src/artwork/* ${startdir}/pkg/usr/share/${pkgname}/artwork/ && \
-  install -m644 ${startdir}/src/ctrlr/* ${startdir}/pkg/usr/share/${pkgname}/ctrlr/ && \
-  install -m644 keymaps/* ${startdir}/pkg/usr/share/${pkgname}/keymaps/ || return 1
+  install -d $pkgdir/usr/share/${pkgname}/{artwork,ctrlr,keymaps} && \
+  install -m644 $srcdir/artwork/* $pkgdir/usr/share/${pkgname}/artwork/ && \
+  install -m644 $srcdir/ctrlr/* $pkgdir/usr/share/${pkgname}/ctrlr/ || return 1
+  install -m644 src/osd/sdl/keymaps/* $pkgdir/usr/share/${pkgname}/keymaps/ || return 1
 
   # Include the license
-  install -Dm644 docs/license.txt $startdir/pkg/usr/share/licenses/${pkgname}/license.txt
+  install -Dm644 docs/license.txt $startdir/pkg/usr/share/licenses/${pkgname}/license.txt || return 1
+
+  find $pkgdir -type f -exec strip {} \;
 }
+md5sums=('ce9e5359e882d5a8219821e39bd4f27a'
+         '3119ccfa1e970eba4467df31208adaf0'
+         '420b61240bf5ae11615ba7c6100ee00d'
+         '07ba30c6054bf864f7c1300bfef03b81')
diff --git a/abs/extra/sdlmame/mame-0137-wiimote.diff b/abs/extra/sdlmame/mame-0137-wiimote.diff
new file mode 100644
index 0000000..8f29b8e
--- /dev/null
+++ b/abs/extra/sdlmame/mame-0137-wiimote.diff
@@ -0,0 +1,424 @@
+diff -BNburp mame-org/makefile mame-wiimote/makefile
+diff -BNburp mame-org/src/osd/sdl/input.c mame-wiimote/src/osd/sdl/input.c
+--- mame-org/src/osd/sdl/input.c	2010-02-28 04:16:40.000000000 +0100
++++ mame-wiimote/src/osd/sdl/input.c	2010-05-07 13:53:59.000000000 +0200
+@@ -17,6 +17,12 @@
+ #include <ctype.h>
+ #include <stddef.h>
+ 
++// for xinput
++#include <X11/Xlib.h>
++#include <X11/extensions/XInput.h>
++#include <X11/Xutil.h>
++
++
+ // MAME headers
+ #include "emu.h"
+ #include "ui.h"
+@@ -53,6 +59,16 @@ enum
+ #define MAX_POV				4
+ #define MAX_DEVMAP_ENTRIES	16
+ 
++//For xinput
++#define INVALID_EVENT_TYPE	-1
++static int           motion_type = INVALID_EVENT_TYPE;
++static int           button_press_type = INVALID_EVENT_TYPE;
++static int           button_release_type = INVALID_EVENT_TYPE;
++static int           key_press_type = INVALID_EVENT_TYPE;
++static int           key_release_type = INVALID_EVENT_TYPE;
++static int           proximity_in_type = INVALID_EVENT_TYPE;
++static int           proximity_out_type = INVALID_EVENT_TYPE;
++
+ //============================================================
+ //  MACROS
+ //============================================================
+@@ -86,6 +102,16 @@ struct _mouse_state
+ 	INT32 buttons[MAX_BUTTONS];
+ };
+ 
++// state information for a lightgun
++typedef struct _lightgun_state lightgun_state;
++struct _lightgun_state
++{
++	INT32 lX, lY;
++	INT32 buttons[MAX_BUTTONS];
++	XID deviceid; //Xinput device id
++	INT32 maxx,maxy;
++	INT32 minx,miny;
++};
+ 
+ // state information for a joystick; DirectInput state must be first element
+ typedef struct _joystick_state joystick_state;
+@@ -115,6 +141,7 @@ struct _device_info
+ 		keyboard_state		keyboard;
+ 		mouse_state		mouse;
+ 		joystick_state		joystick;
++		lightgun_state		lightgun;
+ 	};
+ };
+ 
+@@ -164,10 +191,13 @@ struct _device_map_t
+ 
+ static device_map_t joy_map;
+ static device_map_t mouse_map;
++static device_map_t lightgun_map;
+ static device_map_t keyboard_map;
+ 
+ static int sixaxis_mode;
+ 
++Display *XDisplay;
++
+ 
+ //============================================================
+ //  PROTOTYPES
+@@ -671,6 +703,244 @@ static device_info *devmap_class_registe
+ 	return devinfo;
+ }
+ 
++//============================================================
++//  WiiMote lightgun stuff
++//============================================================
++
++//Copypasted from xinfo
++XDeviceInfo*
++find_device_info(Display	*display,
++		 char		*name,
++		 Bool		only_extended)
++{
++    XDeviceInfo	*devices;
++    XDeviceInfo *found = NULL;
++    int		loop;
++    int		num_devices;
++    int		len = strlen(name);
++    Bool	is_id = True;
++    XID		id=0;
++
++    for(loop=0; loop<len; loop++) {
++	if (!isdigit(name[loop])) {
++	    is_id = False;
++	    break;
++	}
++    }
++
++    if (is_id) {
++	id = atoi(name);
++    }
++
++    devices = XListInputDevices(display, &num_devices);
++
++    for(loop=0; loop<num_devices; loop++) {
++	if ((!only_extended || (devices[loop].use >= IsXExtensionDevice)) &&
++	    ((!is_id && strcmp(devices[loop].name, name) == 0) ||
++	     (is_id && devices[loop].id == id))) {
++	    if (found) {
++	        fprintf(stderr,
++	                "Warning: There are multiple devices named \"%s\".\n"
++	                "To ensure the correct one is selected, please use "
++	                "the device ID instead.\n\n", name);
++	    } else {
++		found = &devices[loop];
++	    }
++	}
++    }
++    return found;
++}
++
++//Copypasted from xinfo
++static int
++register_events(Display		*dpy,
++		XDeviceInfo	*info,
++		char		*dev_name,
++		Bool		handle_proximity)
++{
++    int			number = 0;	/* number of events registered */
++    XEventClass		event_list[7];
++    int			i;
++    XDevice		*device;
++    Window		root_win;
++    unsigned long	screen;
++    XInputClassInfo	*ip;
++
++    screen = DefaultScreen(dpy);
++    root_win = RootWindow(dpy, screen);
++
++    device = XOpenDevice(dpy, info->id);
++
++    if (!device) {
++	fprintf(stderr, "unable to open device %s\n", dev_name);
++	return 0;
++    }
++
++    if (device->num_classes > 0) {
++	for (ip = device->classes, i=0; i<info->num_classes; ip++, i++) {
++	    switch (ip->input_class) {
++	    case KeyClass:
++		DeviceKeyPress(device, key_press_type, event_list[number]); number++;
++		DeviceKeyRelease(device, key_release_type, event_list[number]); number++;
++		break;
++
++	    case ButtonClass:
++		DeviceButtonPress(device, button_press_type, event_list[number]); number++;
++		DeviceButtonRelease(device, button_release_type, event_list[number]); number++;
++		break;
++
++	    case ValuatorClass:
++		DeviceMotionNotify(device, motion_type, event_list[number]); number++;
++		fprintf(stderr, "Motion = %i\n",motion_type);
++		if (handle_proximity) {
++		    ProximityIn(device, proximity_in_type, event_list[number]); number++;
++		    ProximityOut(device, proximity_out_type, event_list[number]); number++;
++		}
++		break;
++
++	    default:
++		fprintf(stderr, "unknown class\n");
++		break;
++	    }
++	}
++
++	if (XSelectExtensionEvent(dpy, root_win, event_list, number)) {
++	    fprintf(stderr, "error selecting extended events\n");
++	    return 0;
++	}
++    }
++    return number;
++}
++
++
++
++static void sdlinput_register_lightguns(running_machine *machine)
++{
++	int index;
++	XExtensionVersion	*version;
++	
++	lightgun_enabled = options_get_bool(mame_options(), OPTION_LIGHTGUN);
++	devmap_init(machine, &lightgun_map, SDLOPTION_LIGHTGUNINDEX, 8, "Lightgun mapping");
++	
++	XDisplay = XOpenDisplay(NULL);
++
++	if (XDisplay == NULL) {
++	    fprintf(stderr, "Unable to connect to X server\n");
++	    return;
++	}
++
++	version = XGetExtensionVersion(XDisplay, INAME);
++
++	if (!version || (version == (XExtensionVersion*) NoSuchExtension)) {
++	    fprintf(stderr, "xinput extension not available!\n");
++	    return;
++	}
++
++
++	for (index=0; index<8; index++) {
++	    XDeviceInfo *info;
++	    if (strlen(lightgun_map.map[index].name)!=0) {
++		device_info *devinfo;
++		char *name=lightgun_map.map[index].name;
++		char defname[512];
++		devinfo = devmap_class_register(machine, &lightgun_map, index, &lightgun_list, DEVICE_CLASS_LIGHTGUN);
++		fprintf(stderr, "%i: %s\n",index, name);
++		info=find_device_info(XDisplay, name, 0);
++		if (!info) continue;
++
++		//Grab device info and translate to stuff mame can use
++		if (info->num_classes > 0) {
++		    XAnyClassPtr any = (XAnyClassPtr) (info->inputclassinfo);
++		    int i;
++		    for (i=0; i<info->num_classes; i++) {
++			int button;
++			XValuatorInfoPtr v;
++			XAxisInfoPtr a;
++			int j;
++			XButtonInfoPtr b;
++			switch (any->c_class) {
++			case ButtonClass:
++			    b = (XButtonInfoPtr) any;
++			    for (button = 0; button < b->num_buttons; button++)
++			    {
++				input_item_id itemid;
++				sprintf(defname, "B%d", button + 1);
++				itemid=(input_item_id) (ITEM_ID_BUTTON1+button);
++				input_device_item_add(devinfo->device, defname, &devinfo->lightgun.buttons[button], itemid, generic_button_get_state);
++			    }
++			    break;
++			case ValuatorClass:
++			    v = (XValuatorInfoPtr) any;
++			    a = (XAxisInfoPtr) ((char *) v + sizeof (XValuatorInfo));
++			    for (j=0; j<v->num_axes; j++, a++) {
++				if (j==0) {
++				    devinfo->lightgun.maxx=a->max_value;
++				    devinfo->lightgun.minx=a->min_value;
++				}
++				if (j==1) {
++				    devinfo->lightgun.maxy=a->max_value;
++				    devinfo->lightgun.miny=a->min_value;
++				}
++			    }
++			    break;
++			}
++		    any = (XAnyClassPtr) ((char *) any + any->length);
++		    }
++		}
++
++
++		sprintf(defname, "X %s", devinfo->name);
++		input_device_item_add(devinfo->device, defname, &devinfo->lightgun.lX, ITEM_ID_XAXIS, generic_axis_get_state);
++		sprintf(defname, "Y %s", devinfo->name);
++		input_device_item_add(devinfo->device, defname, &devinfo->lightgun.lY, ITEM_ID_YAXIS, generic_axis_get_state);
++
++
++		devinfo->lightgun.deviceid=info->id;
++		if (!info) {
++		    fprintf(stderr, "Can't find device %s!\n", lightgun_map.map[index].name);
++		} else {
++		    fprintf(stderr, "Device %i: Registered %i events.\n",(int)info->id, register_events(XDisplay, info, lightgun_map.map[index].name, 0));
++		}
++	    }
++	}
++	mame_printf_verbose("Lightgun: End initialization\n");
++}
++
++device_info *get_lightgun_info_for_deviceid(XID deviceid) {
++    device_info *devinfo;
++    int index;
++    //Find lightgun according to device id
++    for (index=0; ; index++) {
++	devinfo = generic_device_find_index(lightgun_list, index);
++	if (devinfo==NULL) break;
++	if (devinfo->lightgun.deviceid==deviceid) break;
++    }
++    return devinfo;
++}
++
++int normalize_absolute_axis(int raw, int rawmin, int rawmax)
++{
++	int center = (rawmax + rawmin) / 2;
++
++	// make sure we have valid data
++	if (rawmin >= rawmax)
++		return raw;
++
++	// above center
++	if (raw >= center)
++	{
++		int result = (long)(raw - center) * (long)INPUT_ABSOLUTE_MAX / (long)(rawmax - center);
++		return MIN(result, INPUT_ABSOLUTE_MAX);
++	}
++
++	// below center
++	else
++	{
++		int result = -((long)(center - raw) * (long)-INPUT_ABSOLUTE_MIN / (long)(center - rawmin));
++		return MAX(result, INPUT_ABSOLUTE_MIN);
++	}
++}
++
+ 
+ //============================================================
+ //  sdlinput_register_joysticks
+@@ -1115,6 +1385,9 @@ void sdlinput_init(running_machine *mach
+ 	// register the mice
+ 	sdlinput_register_mice(machine);
+ 
++	// register the lightguns
++	sdlinput_register_lightguns(machine);
++
+ 	if (machine->debug_flags & DEBUG_FLAG_OSD_ENABLED)
+ 	{
+ 		mame_printf_warning("Debug Build: Disabling input grab for -debug\n");
+@@ -1131,6 +1404,7 @@ void sdlinput_init(running_machine *mach
+ 	device_list_reset_devices(keyboard_list);
+ 	device_list_reset_devices(mouse_list);
+ 	device_list_reset_devices(joystick_list);
++	device_list_reset_devices(lightgun_list);
+ 
+ }
+ 
+@@ -1248,6 +1522,7 @@ void sdlinput_poll(running_machine *mach
+ 	device_info *devinfo;
+ 	SDL_Event event;
+ 	int index;
++	XEvent xevent;
+ 
+ 	// only for SDLMAME_EVENTS_IN_WORKER_THREAD
+ 	SDL_Event			loc_event_buf[MAX_BUF_EVENTS];
+@@ -1263,6 +1538,21 @@ void sdlinput_poll(running_machine *mach
+ 		devinfo->mouse.lY = 0;
+ 	}
+ 
++	//Get XInput events
++	while (XPending(XDisplay)!=0) {
++	    XNextEvent(XDisplay, &xevent);
++	    if (xevent.type==motion_type) {
++		XDeviceMotionEvent *motion = (XDeviceMotionEvent *) &xevent;
++		devinfo=get_lightgun_info_for_deviceid(motion->deviceid);
++		devinfo->lightgun.lX=normalize_absolute_axis(motion->axis_data[0], devinfo->lightgun.minx, devinfo->lightgun.maxx);
++		devinfo->lightgun.lY=normalize_absolute_axis(motion->axis_data[1], devinfo->lightgun.miny, devinfo->lightgun.maxy);
++	    } else if (xevent.type==button_press_type || xevent.type==button_release_type) {
++		XDeviceButtonEvent *button = (XDeviceButtonEvent *) &xevent;
++		devinfo=get_lightgun_info_for_deviceid(button->deviceid);
++		devinfo->lightgun.buttons[button->button]=(xevent.type==button_press_type)?0x80:0;
++	    }
++	}
++
+ 	if (SDLMAME_EVENTS_IN_WORKER_THREAD)
+ 	{
+ 		osd_lock_acquire(input_lock);
+diff -BNburp mame-org/src/osd/sdl/osdsdl.h mame-wiimote/src/osd/sdl/osdsdl.h
+--- mame-org/src/osd/sdl/osdsdl.h	2010-02-12 14:42:32.000000000 +0100
++++ mame-wiimote/src/osd/sdl/osdsdl.h	2010-05-07 08:53:34.000000000 +0200
+@@ -130,3 +130,4 @@ void sdlaudio_init(running_machine *mach
+ extern int sdl_num_processors;
+ 
+ #endif
++#define SDLOPTION_LIGHTGUNINDEX			"lightgun_index"  
+diff -BNburp mame-org/src/osd/sdl/sdlmain.c mame-wiimote/src/osd/sdl/sdlmain.c
+--- mame-org/src/osd/sdl/sdlmain.c	2010-02-13 12:19:16.000000000 +0100
++++ mame-wiimote/src/osd/sdl/sdlmain.c	2010-05-07 08:54:03.000000000 +0200
+@@ -190,6 +190,17 @@ static const options_entry mame_sdl_opti
+ 	{ SDLOPTION_JOYINDEX "8",                SDLOPTVAL_AUTO, 0,         "name of joystick mapped to joystick #8" },
+ 	{ SDLOPTION_SIXAXIS,			         "0",	 OPTION_BOOLEAN,    "Use special handling for PS3 Sixaxis controllers" },
+ 
++	{ NULL, 		                         NULL,   OPTION_HEADER,     "SDL LIGHTGUN MAPPING" },
++	{ SDLOPTION_LIGHTGUNINDEX "1",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #1" },
++	{ SDLOPTION_LIGHTGUNINDEX "2",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #2" },
++	{ SDLOPTION_LIGHTGUNINDEX "3",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #3" },
++	{ SDLOPTION_LIGHTGUNINDEX "4",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #4" },
++	{ SDLOPTION_LIGHTGUNINDEX "5",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #5" },
++	{ SDLOPTION_LIGHTGUNINDEX "6",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #6" },
++	{ SDLOPTION_LIGHTGUNINDEX "7",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #7" },
++	{ SDLOPTION_LIGHTGUNINDEX "8",              SDLOPTVAL_AUTO, 0,         "name of lightgun mapped to lightgun #8" },
++
++
+ #if (SDL_VERSION_ATLEAST(1,3,0))
+ 	{ NULL, 		                         NULL,   OPTION_HEADER,     "SDL MOUSE MAPPING" },
+ 	{ SDLOPTION_MOUSEINDEX "1",              SDLOPTVAL_AUTO, 0,         "name of mouse mapped to mouse #1" },
+diff -BNburp mame-org/src/osd/sdl/window.c mame-wiimote/src/osd/sdl/window.c
+--- mame-org/src/osd/sdl/window.c	2010-02-12 07:40:12.000000000 +0100
++++ mame-wiimote/src/osd/sdl/window.c	2010-05-07 08:54:54.000000000 +0200
+@@ -659,8 +659,17 @@ static void sdlwindow_update_cursor_stat
+ 	}
+ 
+ #else
++	//Hack for wii-lightguns: they stop working with a grabbed mouse; even a ShowCursor(SDL_DISABLE) already
++	//does this. To make the cursor disappear, we'll just set an empty cursor image.
++	unsigned char data[]={0,0,0,0,0,0,0,0};
++	SDL_Cursor *c;
++	c=SDL_CreateCursor(data, data, 8, 8, 0, 0);
++	SDL_SetCursor(c);
++
++
+ 	// do not do mouse capture if the debugger's enabled to avoid
+ 	// the possibility of losing control
++/*
+ 	if (!(machine->debug_flags & DEBUG_FLAG_OSD_ENABLED))
+ 	{
+ 		if ( window->fullscreen || sdlinput_should_hide_mouse(machine) )
+@@ -680,6 +689,7 @@ static void sdlwindow_update_cursor_stat
+ 			}
+ 		}
+ 	}
++*/
+ #endif
+ }
+ 
diff --git a/abs/extra/sdlmame/sdlmame.install b/abs/extra/sdlmame/sdlmame.install
index eedae49..6103018 100644
--- a/abs/extra/sdlmame/sdlmame.install
+++ b/abs/extra/sdlmame/sdlmame.install
@@ -27,6 +27,3 @@ post_upgrade()
   echo ""
 }
 
-op=$1
-shift
-$op $*
diff --git a/abs/extra/sip/ChangeLog b/abs/extra/sip/ChangeLog
new file mode 100644
index 0000000..bb87e31
--- /dev/null
+++ b/abs/extra/sip/ChangeLog
@@ -0,0 +1,17 @@
+
+2008-11-22  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updating for i686: 4.7.9
+
+2008-10-06  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updating source_urls
+
+2008-08-09  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 4.7.7
+
+2008-07-06  Douglas Soares de Andrade  <douglas@archlinux.org>
+
+	* Updated for i686: 4.7.6
+	
diff --git a/abs/extra/sip/PKGBUILD b/abs/extra/sip/PKGBUILD
new file mode 100644
index 0000000..e3486f4
--- /dev/null
+++ b/abs/extra/sip/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 47992 2009-07-30 10:16:59Z pierre $
+# Maintainer: Douglas Soares de Andrade <douglas@archlinux.org>
+# Contributor: riai <riai@bigfoot.com>, Ben <ben@benmazer.net>
+
+pkgname=sip
+pkgver=4.9
+pkgrel=1
+pkgdesc="A tool that makes it easy to create Python bindings for C and C++ libraries."
+arch=(i686 x86_64)
+url="http://www.riverbankcomputing.com/software/sip/"
+license=('custom:"sip"')
+depends=('python>=2.6' 'gcc-libs')
+source=(http://riverbankcomputing.com/static/Downloads/sip4/${pkgname}-${pkgver}.tar.gz)
+
+build() {
+  cd ${srcdir}/${pkgname}-${pkgver}
+
+  python configure.py -b /usr/bin \
+    -d /usr/lib/python2.6/site-packages \
+    -e /usr/include/python2.6 \
+    -v /usr/share/sip
+
+  make || return 1
+  make DESTDIR=${pkgdir} install
+  # fix permissions
+  chmod 644 ${pkgdir}/usr/lib/python2.6/site-packages/sipdistutils.py
+
+  install -m 644 -D LICENSE  ${pkgdir}/usr/share/licenses/sip/LICENSE
+} 
diff --git a/abs/extra/tablet-encode/PKGBUILD b/abs/extra/tablet-encode/PKGBUILD
index 0163f45..e547e82 100644
--- a/abs/extra/tablet-encode/PKGBUILD
+++ b/abs/extra/tablet-encode/PKGBUILD
@@ -2,14 +2,14 @@
 # Maintainer: Cecil Watson<knoppmyth@gmail.com>
 
 pkgname=tablet-encode
-pkgver=2.20
+pkgver=2.30
 pkgrel=1
 pkgdesc="Transcodes videos for playback on a Nokia Internet Tablet"
 arch=('i686' 'x86_64')
 license=('ARTISTIC')
 depends=(mplayer)
 url="http://mediautils.garage.maemo.org/tablet-encode.html"
-source=(https://garage.maemo.org/frs/download.php/4547/tablet-encode-2.20.tar.gz)
+source=(https://garage.maemo.org/frs/download.php/6892/tablet-encode-2.30.tar.gz)
 
 build() {
   cd ${srcdir}/$pkgname-$pkgver
diff --git a/abs/extra/terminus-font/PKGBUILD b/abs/extra/terminus-font/PKGBUILD
new file mode 100644
index 0000000..c3be90c
--- /dev/null
+++ b/abs/extra/terminus-font/PKGBUILD
@@ -0,0 +1,20 @@
+# Maintainer: Vesa Kaihlavirta <vegai@iki.fi>
+# Contributor: Kristoffer Fossg�rd <kfs1@online.no>
+pkgname=terminus-font
+pkgver=4.30
+pkgrel=1
+pkgdesc="A superb, monospace bitmap font (for X11 and console)"
+depends=(xorg-fonts-encodings xorg-fonts-alias xorg-font-utils fontconfig)
+replaces=(xserver-terminus-fonts)
+arch=(i686 x86_64)
+source=(http://www.is-vn.bg/hamster/$pkgname-$pkgver.tar.gz)
+url="http://www.is-vn.bg/hamster/jimmy-en.html"
+install=terminus-font.install
+license=('GPL-2')
+
+build() { 
+  cd $startdir/src/$pkgname-$pkgver
+  ./configure --prefix=/usr --x11dir=/usr/share/fonts/local/ --psfdir=/usr/share/kbd/consolefonts/
+  make DESTDIR=$startdir/pkg install
+}
+md5sums=('6f8bd95b593851f9f5c210a9d33cbbf1')
diff --git a/abs/extra/terminus-font/install.proto b/abs/extra/terminus-font/install.proto
new file mode 100644
index 0000000..37f0b55
--- /dev/null
+++ b/abs/extra/terminus-font/install.proto
@@ -0,0 +1,27 @@
+# arg 1: the new package version 
+ post_install() {
+ echo -n "Updating font cache... " 
+ /usr/bin/fc-cache
+ cd /usr/share/fonts/local
+ /usr/bin/mkfontdir
+ /usr/bin/mkfontscale
+# cp ../encodings/encodings.dir ./encodings.dir
+ echo "done."
+ echo "Note that local fonts are now (with xorg-7.0) in /usr/share/fonts/local/"
+ }
+
+# # arg 1: the new package version 
+# # arg 2: the old package version 
+ post_upgrade() { 
+ post_install $1 
+ } 
+#
+# # arg 1: the old package version 
+ post_remove() { 
+ /usr/bin/fc-cache
+ } 
+
+op=$1 
+shift 
+
+$op $*
diff --git a/abs/extra/terminus-font/terminus-font.install b/abs/extra/terminus-font/terminus-font.install
new file mode 100644
index 0000000..e17fb4f
--- /dev/null
+++ b/abs/extra/terminus-font/terminus-font.install
@@ -0,0 +1,21 @@
+# arg 1: the new package version
+post_install() {
+  echo -n "Updating font cache... "
+  fc-cache -f > /dev/null
+  mkfontscale /usr/share/fonts/local
+  mkfontdir /usr/share/fonts/local
+  echo "done."
+  echo "Note: terminus-font is in /usr/share/fonts/local/"
+}
+
+# # arg 1: the new package version
+# # arg 2: the old package version
+post_upgrade() {
+  post_install $1
+}
+#
+# # arg 1: the old package version
+post_remove() {
+  post_install $1
+}
+
diff --git a/abs/extra/tightvnc/PKGBUILD b/abs/extra/tightvnc/PKGBUILD
index a9d5efe..ef3ea3e 100644
--- a/abs/extra/tightvnc/PKGBUILD
+++ b/abs/extra/tightvnc/PKGBUILD
@@ -1,7 +1,7 @@
 
 pkgname=tightvnc
-pkgver=1.3.9
-pkgrel=302
+pkgver=1.3.10
+pkgrel=1
 pkgdesc="VNC Unix server && viewer"
 arch=(i686 x86_64)
 license=('GPL')
@@ -33,3 +33,5 @@ build() {
   install -D -m644 $startdir/src/vnc_unixsrc/classes/* \
   	$startdir/pkg/usr/share/vnc/classes || return 1
 }
+md5sums=('397b35faad32d5246b6d44b142f8304f'
+         '0bf967f2cdb94b432f9c7e1c121f7fbd')
diff --git a/abs/extra/tightvnc/tightvnc-fontpath-xcolors.patch b/abs/extra/tightvnc/tightvnc-fontpath-xcolors.patch
index 9e44835..76c52a0 100644
--- a/abs/extra/tightvnc/tightvnc-fontpath-xcolors.patch
+++ b/abs/extra/tightvnc/tightvnc-fontpath-xcolors.patch
@@ -1,21 +1,14 @@
-diff -urN vnc_unixsrc/vncserver vnc_unixsrc.fixed/vncserver
---- vnc_unixsrc/vncserver	2007-04-26 06:57:06.000000000 -0400
-+++ vnc_unixsrc.fixed/vncserver	2007-06-17 19:08:02.000000000 -0400
-@@ -38,14 +38,14 @@
+--- vnc_unixsrc/vncserver.orig	2010-03-26 22:11:23.000000000 +0000
++++ vnc_unixsrc/vncserver	2010-03-26 22:14:58.000000000 +0000
+@@ -34,9 +34,9 @@
  $desktopName = "X";
  $vncClasses = "/usr/local/vnc/classes";
  $vncUserDir = "$ENV{HOME}/.vnc";
 -$fontPath = "unix/:7100";
-+#$fontPath = "unix/:7100";
- $authType = "-rfbauth $vncUserDir/passwd";
- 
- # Here is another example of setting the font path:
--# $fontPath = "/usr/lib/X11/fonts/misc/,/usr/lib/X11/fonts/75dpi/";
 +$fontPath = "/usr/share/fonts/misc/,/usr/share/fonts/75dpi/,/usr/share/fonts/100dpi/,/usr/share/fonts/Type1/";
- 
- # X colors database path is optional, uncomment and edit to use:
--# $colorPath = "/usr/lib/X11/rgb";
 +$colorPath = "/usr/share/X11/rgb";
+ $authType = "-rfbauth $vncUserDir/passwd";
+-
+ # Read configuration from the system-wide and user files if present.
  
- # You might wish to make your vnc directory under /tmp, to make sure
- # passwords are always kept on the local filesystem. To do that, just
+ $configFile = "/etc/tightvncserver.conf";
diff --git a/abs/extra/unetbootin/PKGBUILD b/abs/extra/unetbootin/PKGBUILD
new file mode 100644
index 0000000..f676000
--- /dev/null
+++ b/abs/extra/unetbootin/PKGBUILD
@@ -0,0 +1,28 @@
+# Contributor: Godane aka Christopher Rogers <slaxemulator@gmail.com>
+pkgname=unetbootin
+pkgver=408
+pkgrel=1
+pkgdesc="UNetbootin allows for the installation of various Linux/BSD livecd distributions to a partition or USB drive."
+url="http://unetbootin.sourceforge.net/"
+license="GPL"
+arch=('i686' 'x86_64')
+depends=('syslinux' 'p7zip' 'qt')
+source=(http://downloads.sourceforge.net/$pkgname/$pkgname-source-$pkgver.tar.gz)
+md5sums=('f248706e979a39d8799621e393912906')
+
+build() {
+	cd $startdir/src/
+	sed -i '/^RESOURCES/d' unetbootin.pro
+	lupdate unetbootin.pro
+	lrelease unetbootin.pro
+	qmake "DEFINES += NOSTATIC" "RESOURCES -= unetbootin.qrc"
+	make
+	mkdir -p $pkgdir/usr/sbin
+	install -m 744 $pkgname $pkgdir/usr/sbin/$pkgname
+	mkdir -p $pkgdir/usr/share/$pkgname
+	install -m 644 unetbootin_*.qm $pkgdir/usr/share/$pkgname
+	mkdir -p $pkgdir/usr/share/applications/
+	install -m 644 $pkgname.desktop $pkgdir/usr/share/applications/
+	sed -i 's|Exec=/usr/bin/unetbootin|Exec=su -c /usr/sbin/unetbootin|g' $pkgdir/usr/share/applications/$pkgname.desktop
+	sed -i 's|Terminal=false|Terminal=true|g' $pkgdir/usr/share/applications/$pkgname.desktop
+}
diff --git a/abs/extra/windowmaker/PKGBUILD b/abs/extra/windowmaker/PKGBUILD
index 5422f87..c67bfda 100644
--- a/abs/extra/windowmaker/PKGBUILD
+++ b/abs/extra/windowmaker/PKGBUILD
@@ -3,7 +3,7 @@
 # Contributor: Judd Vinet <jvinet@zeroflux.org>
 pkgname=windowmaker
 pkgver=0.92.0
-pkgrel=5
+pkgrel=7
 pkgdesc="An X11 window manager with a NEXTSTEP look and feel"
 arch=(i686 x86_64)
 url="http://www.windowmaker.info/"
diff --git a/abs/extra/wxgtk/ChangeLog b/abs/extra/wxgtk/ChangeLog
index 03e9f96..ac2030d 100644
--- a/abs/extra/wxgtk/ChangeLog
+++ b/abs/extra/wxgtk/ChangeLog
@@ -1,3 +1,25 @@
+2009-10-20  Eric Belanger  <eric@archlinux.org>
+
+	* wxgtk 2.8.10.1-5
+	* Added mediactrl support (close FS#15377)
+	* Added glib2 build patch
+	* Improved description
+
+2009-07-11  Eric Belanger  <eric@archlinux.org>
+
+	* wxgtk 2.8.10.1-4
+	* Added security fix (close FS#15469)
+
+2009-05-21  Eric Belanger  <eric@archlinux.org>
+
+	* wxgtk 2.8.10.1-1
+	* Upstream update
+
+2009-05-05  Eric Belanger  <eric@archlinux.org>
+
+	* wxgtk 2.8.10-1
+	* Upstream update
+
 2009-03-06  Eric Belanger  <eric@archlinux.org>
 
 	* wxgtk 2.8.9.2-1
diff --git a/abs/extra/wxgtk/PKGBUILD b/abs/extra/wxgtk/PKGBUILD
index d98ac43..c4a16be 100644
--- a/abs/extra/wxgtk/PKGBUILD
+++ b/abs/extra/wxgtk/PKGBUILD
@@ -1,32 +1,39 @@
-# $Id: PKGBUILD 29177 2009-03-06 09:02:47Z eric $
+# $Id: PKGBUILD 63766 2010-01-18 14:31:06Z pierre $
 # Maintainer: Eric Belanger <eric@archlinux.org>
 # Original Contributor: Tom Newsom <Jeepster@gmx.co.uk>
 # New Version - Contributor: Bob Finch <w9ya@arrl.net>
 # with help from J. Santiago Hirschfeld <jsantiagoh@yahoo.com.ar> aka Angelus
 
 pkgname=wxgtk
-pkgver=2.8.9.2
-pkgrel=2
-pkgdesc="wxGTK - GTK+ implementation of wxWidgets API for GUI"
+pkgver=2.8.10.1
+pkgrel=6
+pkgdesc="GTK+ implementation of wxWidgets API for GUI"
 arch=('i686' 'x86_64')
 url="http://wxwidgets.org"
 license=('custom:wxWindows')
-depends=('gtk2>=2.12.11' 'mesa' 'libjpeg')
-#makedepends=('libgnomeprintui')
+depends=('gtk2' 'mesa' 'gstreamer0.10-base')
+makedepends=('gstreamer0.10-base-plugins' 'gconf' 'ccache')
+options=('ccache') # required to build libwx_gtk2u_mmedia
 #source=(http://downloads.sourceforge.net/wxwindows/wxGTK-${pkgver}.tar.bz2)
-source=(http://downloads.sourceforge.net/wxpython/wxPython-src-${pkgver}.tar.bz2)
-md5sums=('e3d89746af98b9279e4ff39a57f6dc63')
-sha1sums=('a0d58d8b9606d04a35b9853da15eb7dfb08d5637')
+source=(http://downloads.sourceforge.net/wxpython/wxPython-src-${pkgver}.tar.bz2 \
+        overflow.patch gsocket.patch)
+md5sums=('65d5ef166f23fe8b4c67f58df164f93e' '325dba65152bc0cfbc1400a2bf54508e'\
+         'b56113a94125e4f9a3cc2680052bdfde')
+sha1sums=('6598fbafd979a91f20100171fa23a91779f6dc62' '7c4d1d507aad0b7c25a0de55234be42ea3e3f55f'\
+         '5b0e985afd77153e8e4b9e14987d4b1a9de53acc')
 
 build() {
-  cd ${srcdir}/wxPython-src-${pkgver}
+  cd "${srcdir}/wxPython-src-${pkgver}"
+#  cd "${srcdir}/wxGTK-${pkgver}"
+  patch -p4 < ../overflow.patch || return 1
+  patch -p1 < ../gsocket.patch || return 1
   ./configure --prefix=/usr --libdir=/usr/lib --with-gtk=2 --with-opengl --enable-unicode \
-	  --enable-graphics_ctx --without-gnomeprint --disable-optimize || return 1
+    --enable-graphics_ctx  --disable-optimize --enable-mediactrl || return 1
   make || return 1
   make -C locale allmo || return 1
-  make DESTDIR=${pkgdir} install || return 1
+  make DESTDIR="${pkgdir}" install || return 1
   cd contrib/src
   make || return 1
-  make DESTDIR=${pkgdir} install || return 1
-  install -D -m644 ../../docs/licence.txt ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE || return 1
+  make DESTDIR="${pkgdir}" install || return 1
+  install -D -m644 ../../docs/licence.txt "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" || return 1
 }
diff --git a/abs/extra/wxgtk/gsocket.patch b/abs/extra/wxgtk/gsocket.patch
new file mode 100644
index 0000000..0f1fc7b
--- /dev/null
+++ b/abs/extra/wxgtk/gsocket.patch
@@ -0,0 +1,18 @@
+Index: 2.8/src/gtk/gsockgtk.cpp
+===================================================================
+--- 2.8/src/gtk/gsockgtk.cpp (revision 60599)
++++ 2.8/src/gtk/gsockgtk.cpp (working copy)
+@@ -15,8 +15,13 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+
++// newer versions of glib define its own GSocket but we unfortunately use this
++// name in our own (semi-)public header and so can't change it -- rename glib
++// one instead
++#define GSocket GlibGSocket
+ #include <gdk/gdk.h>
+ #include <glib.h>
++#undef GSocket
+
+ #include "wx/gsocket.h"
+ #include "wx/unix/gsockunx.h"
diff --git a/abs/extra/wxgtk/overflow.patch b/abs/extra/wxgtk/overflow.patch
new file mode 100644
index 0000000..543bdff
--- /dev/null
+++ b/abs/extra/wxgtk/overflow.patch
@@ -0,0 +1,66 @@
+Index: /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagpng.cpp
+===================================================================
+--- /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagpng.cpp (revision 53479)
++++ /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagpng.cpp (revision 60875)
+@@ -569,5 +569,7 @@
+         goto error;
+ 
+-    lines = (unsigned char **)malloc( (size_t)(height * sizeof(unsigned char *)) );
++    // initialize all line pointers to NULL to ensure that they can be safely
++    // free()d if an error occurs before all of them could be allocated
++    lines = (unsigned char **)calloc(height, sizeof(unsigned char *));
+     if ( !lines )
+         goto error;
+@@ -576,9 +578,5 @@
+     {
+         if ((lines[i] = (unsigned char *)malloc( (size_t)(width * (sizeof(unsigned char) * 4)))) == NULL)
+-        {
+-            for ( unsigned int n = 0; n < i; n++ )
+-                free( lines[n] );
+             goto error;
+-        }
+     }
+ 
+Index: /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagtiff.cpp
+===================================================================
+--- /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagtiff.cpp (revision 48694)
++++ /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagtiff.cpp (revision 60876)
+@@ -262,5 +262,4 @@
+ 
+     uint32 w, h;
+-    uint32 npixels;
+     uint32 *raster;
+ 
+@@ -276,7 +275,18 @@
+                             samplesInfo[0] == EXTRASAMPLE_UNASSALPHA));
+ 
+-    npixels = w * h;
+-
+-    raster = (uint32*) _TIFFmalloc( npixels * sizeof(uint32) );
++    // guard against integer overflow during multiplication which could result
++    // in allocating a too small buffer and then overflowing it
++    const double bytesNeeded = w * h * sizeof(uint32);
++    if ( bytesNeeded >= 4294967295U /* UINT32_MAX */ )
++    {
++        if ( verbose )
++            wxLogError( _("TIFF: Image size is abnormally big.") );
++
++        TIFFClose(tif);
++
++        return false;
++    }
++
++    raster = (uint32*) _TIFFmalloc( bytesNeeded );
+ 
+     if (!raster)
+Index: /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagtiff.cpp
+===================================================================
+--- /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagtiff.cpp (revision 60876)
++++ /wxWidgets/branches/WX_2_8_BRANCH/src/common/imagtiff.cpp (revision 60897)
+@@ -277,5 +277,5 @@
+     // guard against integer overflow during multiplication which could result
+     // in allocating a too small buffer and then overflowing it
+-    const double bytesNeeded = w * h * sizeof(uint32);
++    const double bytesNeeded = (double)w * (double)h * sizeof(uint32);
+     if ( bytesNeeded >= 4294967295U /* UINT32_MAX */ )
+     {
diff --git a/abs/extra/x11vnc/PKGBUILD b/abs/extra/x11vnc/PKGBUILD
index 650f81e..543a7ab 100644
--- a/abs/extra/x11vnc/PKGBUILD
+++ b/abs/extra/x11vnc/PKGBUILD
@@ -2,14 +2,14 @@
 # Maintainer: damir <damir@archlinux.org>
 
 pkgname=x11vnc
-pkgver=0.9.7
-pkgrel=2
+pkgver=0.9.9
+pkgrel=1
 pkgdesc="a VNC server for real X displays"
 arch=("i686" "x86_64")
 license=("GPL2")
 #source=(http://dl.sourceforge.net/sourceforge/libvncserver/$pkgname-$pkgver.tar.gz)
 url="http://www.karlrunge.com/x11vnc/"
-source=("http://x11vnc.sourceforge.net/dev/x11vnc-0.9.7.tar.gz")
+source=("http://x11vnc.sourceforge.net/dev/$pkgname-$pkgver.tar.gz")
 depends=('openssl' 'libjpeg' 'zlib' 'libx11' 'libxtst' 'libxinerama' 'libxdamage' 'libxrandr' 'avahi')
 
 build() {
@@ -18,5 +18,4 @@ build() {
   make || return 1
   make prefix=$startdir/pkg/usr install || return 1
 }
-
-md5sums=('30a167577f657909b3355421e14e2ddb')
+md5sums=('874008821a0588a73ec7fbe09b747bb0')
diff --git a/abs/extra/xbmc-svn/CHANGELOG b/abs/extra/xbmc-svn/CHANGELOG
new file mode 100644
index 0000000..ddcbd53
--- /dev/null
+++ b/abs/extra/xbmc-svn/CHANGELOG
@@ -0,0 +1,110 @@
+xbmc-svn Change log:
+--------------------
+2nd July 2009
+21333   haggy: updated to current svn head which has media flagging support if your skin
+               supports it (the shipped PM3HD does already, also Aeon and MediaStream redux)
+
+3rd June 2009
+20896   haggy: enabled external libs for every lib supported despite python and ffmpeg
+               enabling external python breaks python support in xbmc due to Arch's python
+               compiled with UCS2 support whereas xbmc expects UCS4. Enabling external ffmpeg
+               disables VDPAU and we don't want that for sure.
+
+               IMPORTANT NOTE: If compilation breaks at configure step with some message about
+               not being able to compute the size of int or size_t, try running makepkg as root
+               with 'sudo makepkg --asroot'. This is a known issue and happens only on systems
+               linked to nvidia's libgl which causes binaries to segfault within a fakeroot
+               environment. pacman 3.3 will fix this by splitting configure and installation steps.
+
+1st June 2009
+20818   haggy: this is the last revision before external-libs-support got patched
+               in. Unfortunately this will not compile with fakeroot. waiting for
+               pacman 3.3 which can split up configure and make install steps.
+
+30th May 2009
+20793   haggy: removed gcc44-fixes.patch - got merged into svn
+
+29th May 2009
+20755   haggy: pushed rev as requested
+
+27th May 2009
+20705   haggy: added a patch which fixed compilation with GCC 4.4.
+
+21th May 2009
+20509   haggy: xbmc got updates on goom due to the jaunty build system update. i
+               i wiped all goom specific hacks from the PKGBUILD and it compiled
+               fine, so let's see what you guys achieve.
+
+19th May 2009
+20449-1 richy: 1. Removed the autoreconf line as it didn't seem to help
+               2. Added !makeflags
+               3. Rev push :-)
+
+16th May 2009
+20343-1 richy: 1. added python as a depenency and removed x-server (namcap advised),
+               2. added autoreconf to goom before aclocal - another pot-shot at the goom compile prob.
+               3. added flax and bison to makedepends - I thought they were implicitely provided, but
+                    some users didn't have them.
+               4. Rev push to 20343
+               5. Removed the --quiet flag form SVN for now as sourcforge was timing out and
+                    failing silently.
+ 
+               Note: namcap advised a number of other changes which I ignored for now.
+
+15th May 2009
+20231-3 - haggy: added libsamplerate as a dependency, it is needed for the recent smoothvideo patches
+
+14th May 2009
+20231-2 - haggy: another shot in the dark to fix that damn goom compilation error
+
+13th May 2009
+20231 - haggy: smoothvideo!
+
+12th May 2009
+20172 - haggy: a shot in the dark: try another autoreconf inside goom and see if it helps.
+
+11th May 2009
+20149 - haggy: pushed rev, removed 'hitting-o-breaks...'-patch - it got fixed in svn
+
+9th May 2009
+20101 - haggy: an updated PM3 skin made it into xbmc. added conflicts hint to this PKGBUILD
+
+8th May 2009
+20059 - haggy: minor push past 9.04, removed copying the source tree to a build tree which wastes space,
+               takes ages and stresses the hdd for no reason. instead we now use svn to revert to a 
+               clean build dir.
+
+5th May 2009
+19941 - rich: heaps more tickets closed, Mexican translation
+
+30th April 2009
+19841 - haggy: lots of closed tickets worth a release, removed xsession patch
+
+27th April 2009
+19753 - haggy: added patch for xsession file breaking installation into fakeroot.
+
+22nd April 2009
+19602 - richy: version bump to address problem with python scripts and plugins
+
+20th April 2009
+19550 - haggy: pushed rev, some .mov fixes and better i18n in xbmc
+
+17th April 2009
+19517 - haggy: pushed rev, re-added installfile
+19516-2- richy: Added back autoreconf -vif in libdvdcss - still required for some folk (me)
+19516 - haggy: pushed rev, moved patches to patchfiles, added 'safe fullscreen patch', several cleanups
+
+15th April 2009
+19484 - haggy: pushed rev, re-enabled MAKEFLAGS to allow a more streamlined package
+
+14th April 2009
+19463 - haggy: added install file 
+19463 - richy: moved _svn* back inside build() on Haggy's suggestion. Let's try and avoid broken releases!
+19463 - richy: makedepends 'subversion' instead of 'svn' because that's what's in the guidelines
+19463 - richy: changed licens from ('GPL' 'custom') to ('GPL', 'LGPL') - See: http://xbmc.org/about/
+
+13th April 2009 - initial upload to AUR, tested on 32bit and 64bit.
+19444 - richy: Moved _svn* outside of build so that users get the latest SVN.
+19444 - richy: Added a symlink for XBMCtex to usr/bin/XBMCtex
+19444 - richy: Moved libcdio into depends from opt-depends - right now it is a dependency.
+
diff --git a/abs/extra/xbmc-svn/Lircmap.xml b/abs/extra/xbmc-svn/Lircmap.xml
new file mode 100644
index 0000000..600567f
--- /dev/null
+++ b/abs/extra/xbmc-svn/Lircmap.xml
@@ -0,0 +1,233 @@
+<!-- This file contains the mapping of LIRC keys to XBMC keys used in Keymap.xml  -->
+<!--                                                                              -->
+<!-- How to add remotes                                                           -->
+<!-- <remote device="name_Lirc_calls_the_remote">                                 -->
+<!--                                                                              -->
+<!-- For the commands the layout following layout is used                         -->
+<!-- <XBMC_COMMAND>LircButtonName</XBMC_COMMAND>                                  -->
+<!--                                                                              -->
+<!-- For a list of XBMC_COMMAND's check out the <remote> sections of keymap.xml   -->
+
+<lircmap>
+	<remote device="mceusb">
+		<pause>Pause</pause>
+		<stop>Stop</stop>
+		<forward>Forward</forward>
+		<reverse>Rewind</reverse>
+		<left>Left</left>
+		<right>Right</right>
+		<up>Up</up>
+		<down>Down</down>
+		<select>OK</select>
+		<pageplus>ChanUp</pageplus>
+		<pageminus>ChanDown</pageminus>
+		<back>Back</back>
+		<menu>PreviousMenu</menu>
+		<title>Play</title>
+		<info>More</info>
+		<skipplus>Skip</skipplus>
+		<skipminus>Replay</skipminus>
+		<display>Teletext</display>
+		<start>Home</start>
+		<record>Record</record>
+		<volumeplus>VolUp</volumeplus>
+		<volumeminus>VolDown</volumeminus>
+		<mute>Mute</mute>
+		<power>Power</power>
+		<myvideo>Videos</myvideo>
+		<mymusic>Music</mymusic>
+		<mypictures>Pictures</mypictures>
+		<mytv>TV</mytv>
+		<one>One</one>
+		<two>Two</two>
+		<three>Three</three>
+		<four>Four</four>
+		<five>Five</five>
+		<six>Six</six>
+		<seven>Seven</seven>
+		<eight>Eight</eight>
+		<nine>Nine</nine>
+		<zero>Zero</zero>
+		<mytv>Red</mytv>
+		<mymusic>Green</mymusic>
+		<mypictures>Yellow</mypictures>
+		<myvideo>Blue</myvideo>
+	</remote>
+	
+	<remote device="mceusb2">
+		<pause>Pause</pause>
+		<stop>Stop</stop>
+		<forward>Forward</forward>
+		<reverse>Rewind</reverse>
+		<left>Left</left>
+		<right>Right</right>
+		<up>Up</up>
+		<down>Down</down>
+		<select>OK</select>
+		<pageplus>ChanUp</pageplus>
+		<pageminus>ChanDown</pageminus>
+		<back>Back</back>
+		<menu>PreviousMenu</menu>
+		<title>Play</title>
+		<info>More</info>
+		<skipplus>Skip</skipplus>
+		<skipminus>Replay</skipminus>
+		<display>Teletext</display>
+		<start>Home</start>
+		<record>Record</record>
+		<volumeplus>VolUp</volumeplus>
+		<volumeminus>VolDown</volumeminus>
+		<mute>Mute</mute>
+		<power>Power</power>
+		<myvideo>Videos</myvideo>
+		<mymusic>Music</mymusic>
+		<mypictures>Pictures</mypictures>
+		<mytv>TV</mytv>
+		<one>One</one>
+		<two>Two</two>
+		<three>Three</three>
+		<four>Four</four>
+		<five>Five</five>
+		<six>Six</six>
+		<seven>Seven</seven>
+		<eight>Eight</eight>
+		<nine>Nine</nine>
+		<zero>Zero</zero>
+		<mytv>Red</mytv>
+		<mymusic>Green</mymusic>
+		<mypictures>Yellow</mypictures>
+		<myvideo>Blue</myvideo>
+	</remote>
+	
+	<remote device="XboxDVDDongle">
+		<play>PLAY</play>
+		<pause>PAUSE</pause>
+		<stop>STOP</stop>
+		<forward>FORWARD</forward>
+		<reverse>REVERSE</reverse>
+		<left>LEFT</left>
+		<right>RIGHT</right>
+		<up>UP</up>
+		<down>DOWN</down>
+		<select>SELECT</select>
+		<back>BACK</back>
+		<menu>MENU</menu>
+		<title>TITLE</title>
+		<info>INFO</info>
+		<skipplus>SKIP+</skipplus>
+		<skipminus>SKIP-</skipminus>
+		<display>DISPLAY</display>
+		<one>1</one>
+		<two>2</two>
+		<three>3</three>
+		<four>4</four>
+		<five>5</five>
+		<six>6</six>
+		<seven>7</seven>
+		<eight>8</eight>
+		<nine>9</nine>
+		<zero>0</zero>
+	</remote>
+
+	<remote device="Microsoft_Xbox">
+		<play>PLAY</play>
+		<pause>PAUSE</pause>
+		<stop>STOP</stop>
+		<forward>FORWARD</forward>
+		<reverse>REVERSE</reverse>
+		<left>LEFT</left>
+		<right>RIGHT</right>
+		<up>UP</up>
+		<down>DOWN</down>
+		<select>SELECT</select>
+		<back>BACK</back>
+		<menu>MENU</menu>
+		<title>TITLE</title>
+		<info>INFO</info>
+		<skipplus>SKIP+</skipplus>
+		<skipminus>SKIP-</skipminus>
+		<display>DISPLAY</display>
+		<one>1</one>
+		<two>2</two>
+		<three>3</three>
+		<four>4</four>
+		<five>5</five>
+		<six>6</six>
+		<seven>7</seven>
+		<eight>8</eight>
+		<nine>9</nine>
+		<zero>0</zero>
+	</remote>
+
+	<remote device="PinnacleSysPCTVRemote">
+		<play>Play</play>
+		<pause>pause</pause>
+		<stop>Stop</stop>
+		<forward>FForward</forward>
+		<reverse>Rewind</reverse>
+		<left>Vol-Rew</left>
+		<right>Vol+FF</right>
+		<up>Chan+Play</up>
+		<down>Chan-Stop</down>
+		<pageplus>channel+</pageplus>
+		<pageminus>channel-</pageminus>
+		<select>middle</select>
+		<back>undo</back>
+		<menu>Menu</menu>
+		<title>L</title>
+		<info>Info</info>
+		<skipplus>next</skipplus>
+		<display>Fullscreen</display>
+		<record>Record</record>
+		<volumeplus>vol+</volumeplus>
+		<volumeminus>vol-</volumeminus>
+		<mute>Mute</mute>
+		<power>Power</power>
+		<one>1</one>
+		<two>2</two>
+		<three>3</three>
+		<four>4</four>
+		<five>5</five>
+		<six>6</six>
+		<seven>7</seven>
+		<eight>8</eight>
+		<nine>9</nine>
+		<zero>0</zero>
+	</remote>
+
+        <remote device="Streamzap_PC_Remote">
+                <play>PLAY</play>
+                <pause>PAUSE</pause>
+                <stop>STOP</stop>
+                <forward>&gt;&gt;</forward>
+                <reverse>&lt;&lt;</reverse>
+                <left>LEFT</left>
+                <right>RIGHT</right>
+                <up>UP</up>
+                <down>DOWN</down>
+                <pageplus>CH_UP</pageplus>
+                <pageminus>CH_DOWN</pageminus>
+                <select>OK</select>
+                <back>EXIT</back>
+                <menu>MENU</menu>
+                <title>RED</title>
+                <info>GREEN</info>
+                <skipplus>&gt;&gt;|</skipplus>
+                <display>YELLOW</display>
+                <record>RECORD</record>
+                <volumeplus>VOL_UP</volumeplus>
+                <volumeminus>VOL_DOWN</volumeminus>
+                <mute>MUTE</mute>
+                <power>POWER</power>
+                <one>1</one>
+                <two>2</two>
+                <three>3</three>
+                <four>4</four>
+                <five>5</five>
+                <six>6</six>
+                <seven>7</seven>
+                <eight>8</eight>
+                <nine>9</nine>
+                <zero>0</zero>
+        </remote>
+</lircmap>
diff --git a/abs/extra/xbmc-svn/PKGBUILD b/abs/extra/xbmc-svn/PKGBUILD
new file mode 100644
index 0000000..d7debbe
--- /dev/null
+++ b/abs/extra/xbmc-svn/PKGBUILD
@@ -0,0 +1,97 @@
+# Contributors : Ralf Barth <archlinux dot org at haggy dot org>
+#                Richard Atkinson atkinsonr-at-gmail 
+#
+# Original credits go to Edgar Hucek <gimli at dark-green dot com>
+# for his xbmc-vdpau-vdr PKGBUILD at https://archvdr.svn.sourceforge.net/svnroot/archvdr/trunk/archvdr/xbmc-vdpau-vdr/PKGBUILD
+
+pkgname=xbmc-svn
+pkgver=25089
+pkgrel=1
+pkgdesc="XBMC Media Center from SVN"
+provides=('xbmc')
+conflicts=('xbmc')
+arch=('i686' 'x86_64')
+url="http://xbmc.org"
+license=('GPL' 'LGPL')
+depends=('alsa-lib' 'curl' 'enca' 'faac' 'freetype2' 'fribidi' 'gawk' 'glew'
+         'hal' 'jasper' 'libgl' 'libmad' 'libmysqlclient' 'libjpeg'
+         'libxinerama' 'libxrandr' 'lzo2' 'sdl_image' 'sdl_mixer' 'sqlite3'
+         'tre' 'unzip' 'libcdio' 'libsamplerate' 'python' 'avahi' 'libmad' 
+         'a52dec' 'libdca' 'faad2' 'libmpeg2' 'libvorbis' 'libogg' 'libmms'
+         'libmpcdec' 'flac' 'wavpack' 'xorg-utils' 'smbclient' 'libvdpau')
+makedepends=('subversion' 'autoconf' 'automake' 'boost' 'cmake' 'gcc' 'gperf' 
+             'libtool>=2.2.6a-1' 'make' 'nasm' 'patch' 'pkgconfig' 'zip' 'flex' 'bison')
+optdepends=('lirc: remote controller support'
+            'pmount: mount removable devices as normal user'
+            'unrar: access compressed files without unpacking them')
+install=("${pkgname}.install")
+source=(Lircmap.xml)
+noextract=()
+md5sums=()
+options=(makeflags)
+
+_svnmod=XBMC
+_prefix=/usr
+
+build() {
+
+    _svntrunk=http://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk
+
+    cd ${srcdir}/
+    if [ -d $_svnmod/.svn ]; then
+        msg "SVN tree found, reverting changes and updating to -r$pkgver"
+        (cd $_svnmod && svn revert -R . && svn up -r $pkgver) || return 1
+    else
+        msg "Checking out SVN tree of -r$pkgver"
+        svn co $_svntrunk --config-dir ./ -r $pkgver $_svnmod || return 1
+    fi
+
+    # Configure XBMC
+    #
+    # Note on external-libs:
+    #   - We cannot use external python because Arch's python was built with
+    #     UCS2 unicode support, whereas xbmc expects UCS4 support
+    #   - We cannot use Arch's libass because it's incompatible with XBMC's
+    #     subtitle rendering
+    #   - We cannot use external ffmpeg because we would loose VDPAU functionality
+    cd "$srcdir/$_svnmod" 
+    msg "Configuring XBMC" 
+    ./bootstrap
+    ./configure --prefix=${_prefix} \
+                --enable-external-liba52 \
+                --enable-external-libdts \
+                --enable-external-libmpeg2 \
+                --enable-external-libogg \
+                --enable-external-libwavpack \
+                --disable-external-libass \
+                --disable-external-ffmpeg \
+                --disable-external-python \
+                --disable-debug || return 1
+  
+    # Now (finally) build
+    msg "Running make" 
+    make || return 1
+
+    cd "$srcdir/$_svnmod"
+    msg "Running make install" 
+    make prefix=${pkgdir}${_prefix} install || return 1
+
+    # Install 
+    install -Dm755 ${srcdir}/$_svnmod/xbmc-xrandr \
+                   ${pkgdir}${_prefix}/share/xbmc/xbmc-xrandr || return 1
+
+    install -Dm644 ${srcdir}/$_svnmod/tools/Linux/xbmc.desktop \
+                   ${pkgdir}${_prefix}/share/applications/xbmc.desktop || return 1
+
+    install -Dm644 ${srcdir}/$_svnmod/tools/Linux/xbmc.png \
+                   ${pkgdir}${_prefix}/share/pixmaps/xbmc.png || return 1
+
+    install -dm755 ${pkgdir}${_prefix}/share/licenses/${pkgname}
+    for licensef in LICENSE.GPL README.linux copying.txt; do
+        mv ${pkgdir}${_prefix}/share/xbmc/${licensef} \
+           ${pkgdir}${_prefix}/share/licenses/${pkgname} || return 1
+    done
+
+    # Use custom Lircmap to support StreamZap remote
+    cp ${srcdir}/Lircmap.xml ${pkgdir}${_prefix}/share/xbmc/system/Lircmap.xml
+}
diff --git a/abs/extra/xbmc-svn/__changelog b/abs/extra/xbmc-svn/__changelog
new file mode 100644
index 0000000..bbf1705
--- /dev/null
+++ b/abs/extra/xbmc-svn/__changelog
@@ -0,0 +1 @@
+Added Lircmap.xml to PKGBUILD to support MCE2 and StreamZap remotes
diff --git a/abs/extra/xbmc-svn/xbmc-svn.install b/abs/extra/xbmc-svn/xbmc-svn.install
new file mode 100644
index 0000000..acf409c
--- /dev/null
+++ b/abs/extra/xbmc-svn/xbmc-svn.install
@@ -0,0 +1,13 @@
+post_install() {
+  echo ">> If XBMC won't start, but just segfaults, double check your X.Org config"
+  echo ">> so that your display depth is at least 24-bit. Eg: change "
+  echo ">> \"DefaultDepth 16\" under the \"Screen\" section so it says 24 instead"
+  echo ">> of 16."
+  echo ">> If you have problems or suggestions for this PKGBUILD, have a look at its"
+  echo ">> dedicated forum thread: http://bbs.archlinux.org/viewtopic.php?pid=559107"
+  echo ">> or the wiki: http://xbmc.org/wiki/?title=XBMC_on_Arch_Linux_(Unofficial)"
+  echo
+  /bin/true
+}
+
+# vim:set ts=2 sw=2 et:
diff --git a/abs/extra/xbmc/FEH.sh b/abs/extra/xbmc/FEH.sh
new file mode 100644
index 0000000..9cbec63
--- /dev/null
+++ b/abs/extra/xbmc/FEH.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+function directRendering() {
+out=$(glxinfo | grep "direct rendering")
+direct=${out#"direct rendering: "}
+if [ "$direct" = "Yes" ]; then
+  return 0
+else
+  return 1
+fi
+}
+
+function colorDepth() {
+out=$(xdpyinfo | grep "depth of root")
+color=${out:27:2}
+if [ "$color" = "24" ]; then
+  return 0
+else
+  return 1
+fi
+}
+
+directRendering
+direct_ok=$?
+
+colorDepth
+color_ok=$?
+
+exit_val=0
+
+if [ $direct_ok -ne 0 ]; then
+  echo "XBMC needs hardware accelerated OpenGL rendering."
+  echo "Install an appropriate graphics driver."
+  echo " "
+  echo "Please consult XBMC Wiki for supported hardware"
+  echo "http://xbmc.org/wiki/?title=Supported_hardware"
+  exit_val=1
+fi
+
+if [ $color_ok -ne 0 ]; then
+  echo "XBMC cannot run unless the"
+  echo "screen color depth is atleast 24 bit."
+  echo " "
+  echo "Please reconfigure your screen."
+  exit_val=1
+fi
+
+exit $exit_val
diff --git a/abs/extra/xbmc/Lircmap.xml b/abs/extra/xbmc/Lircmap.xml
new file mode 100644
index 0000000..600567f
--- /dev/null
+++ b/abs/extra/xbmc/Lircmap.xml
@@ -0,0 +1,233 @@
+<!-- This file contains the mapping of LIRC keys to XBMC keys used in Keymap.xml  -->
+<!--                                                                              -->
+<!-- How to add remotes                                                           -->
+<!-- <remote device="name_Lirc_calls_the_remote">                                 -->
+<!--                                                                              -->
+<!-- For the commands the layout following layout is used                         -->
+<!-- <XBMC_COMMAND>LircButtonName</XBMC_COMMAND>                                  -->
+<!--                                                                              -->
+<!-- For a list of XBMC_COMMAND's check out the <remote> sections of keymap.xml   -->
+
+<lircmap>
+	<remote device="mceusb">
+		<pause>Pause</pause>
+		<stop>Stop</stop>
+		<forward>Forward</forward>
+		<reverse>Rewind</reverse>
+		<left>Left</left>
+		<right>Right</right>
+		<up>Up</up>
+		<down>Down</down>
+		<select>OK</select>
+		<pageplus>ChanUp</pageplus>
+		<pageminus>ChanDown</pageminus>
+		<back>Back</back>
+		<menu>PreviousMenu</menu>
+		<title>Play</title>
+		<info>More</info>
+		<skipplus>Skip</skipplus>
+		<skipminus>Replay</skipminus>
+		<display>Teletext</display>
+		<start>Home</start>
+		<record>Record</record>
+		<volumeplus>VolUp</volumeplus>
+		<volumeminus>VolDown</volumeminus>
+		<mute>Mute</mute>
+		<power>Power</power>
+		<myvideo>Videos</myvideo>
+		<mymusic>Music</mymusic>
+		<mypictures>Pictures</mypictures>
+		<mytv>TV</mytv>
+		<one>One</one>
+		<two>Two</two>
+		<three>Three</three>
+		<four>Four</four>
+		<five>Five</five>
+		<six>Six</six>
+		<seven>Seven</seven>
+		<eight>Eight</eight>
+		<nine>Nine</nine>
+		<zero>Zero</zero>
+		<mytv>Red</mytv>
+		<mymusic>Green</mymusic>
+		<mypictures>Yellow</mypictures>
+		<myvideo>Blue</myvideo>
+	</remote>
+	
+	<remote device="mceusb2">
+		<pause>Pause</pause>
+		<stop>Stop</stop>
+		<forward>Forward</forward>
+		<reverse>Rewind</reverse>
+		<left>Left</left>
+		<right>Right</right>
+		<up>Up</up>
+		<down>Down</down>
+		<select>OK</select>
+		<pageplus>ChanUp</pageplus>
+		<pageminus>ChanDown</pageminus>
+		<back>Back</back>
+		<menu>PreviousMenu</menu>
+		<title>Play</title>
+		<info>More</info>
+		<skipplus>Skip</skipplus>
+		<skipminus>Replay</skipminus>
+		<display>Teletext</display>
+		<start>Home</start>
+		<record>Record</record>
+		<volumeplus>VolUp</volumeplus>
+		<volumeminus>VolDown</volumeminus>
+		<mute>Mute</mute>
+		<power>Power</power>
+		<myvideo>Videos</myvideo>
+		<mymusic>Music</mymusic>
+		<mypictures>Pictures</mypictures>
+		<mytv>TV</mytv>
+		<one>One</one>
+		<two>Two</two>
+		<three>Three</three>
+		<four>Four</four>
+		<five>Five</five>
+		<six>Six</six>
+		<seven>Seven</seven>
+		<eight>Eight</eight>
+		<nine>Nine</nine>
+		<zero>Zero</zero>
+		<mytv>Red</mytv>
+		<mymusic>Green</mymusic>
+		<mypictures>Yellow</mypictures>
+		<myvideo>Blue</myvideo>
+	</remote>
+	
+	<remote device="XboxDVDDongle">
+		<play>PLAY</play>
+		<pause>PAUSE</pause>
+		<stop>STOP</stop>
+		<forward>FORWARD</forward>
+		<reverse>REVERSE</reverse>
+		<left>LEFT</left>
+		<right>RIGHT</right>
+		<up>UP</up>
+		<down>DOWN</down>
+		<select>SELECT</select>
+		<back>BACK</back>
+		<menu>MENU</menu>
+		<title>TITLE</title>
+		<info>INFO</info>
+		<skipplus>SKIP+</skipplus>
+		<skipminus>SKIP-</skipminus>
+		<display>DISPLAY</display>
+		<one>1</one>
+		<two>2</two>
+		<three>3</three>
+		<four>4</four>
+		<five>5</five>
+		<six>6</six>
+		<seven>7</seven>
+		<eight>8</eight>
+		<nine>9</nine>
+		<zero>0</zero>
+	</remote>
+
+	<remote device="Microsoft_Xbox">
+		<play>PLAY</play>
+		<pause>PAUSE</pause>
+		<stop>STOP</stop>
+		<forward>FORWARD</forward>
+		<reverse>REVERSE</reverse>
+		<left>LEFT</left>
+		<right>RIGHT</right>
+		<up>UP</up>
+		<down>DOWN</down>
+		<select>SELECT</select>
+		<back>BACK</back>
+		<menu>MENU</menu>
+		<title>TITLE</title>
+		<info>INFO</info>
+		<skipplus>SKIP+</skipplus>
+		<skipminus>SKIP-</skipminus>
+		<display>DISPLAY</display>
+		<one>1</one>
+		<two>2</two>
+		<three>3</three>
+		<four>4</four>
+		<five>5</five>
+		<six>6</six>
+		<seven>7</seven>
+		<eight>8</eight>
+		<nine>9</nine>
+		<zero>0</zero>
+	</remote>
+
+	<remote device="PinnacleSysPCTVRemote">
+		<play>Play</play>
+		<pause>pause</pause>
+		<stop>Stop</stop>
+		<forward>FForward</forward>
+		<reverse>Rewind</reverse>
+		<left>Vol-Rew</left>
+		<right>Vol+FF</right>
+		<up>Chan+Play</up>
+		<down>Chan-Stop</down>
+		<pageplus>channel+</pageplus>
+		<pageminus>channel-</pageminus>
+		<select>middle</select>
+		<back>undo</back>
+		<menu>Menu</menu>
+		<title>L</title>
+		<info>Info</info>
+		<skipplus>next</skipplus>
+		<display>Fullscreen</display>
+		<record>Record</record>
+		<volumeplus>vol+</volumeplus>
+		<volumeminus>vol-</volumeminus>
+		<mute>Mute</mute>
+		<power>Power</power>
+		<one>1</one>
+		<two>2</two>
+		<three>3</three>
+		<four>4</four>
+		<five>5</five>
+		<six>6</six>
+		<seven>7</seven>
+		<eight>8</eight>
+		<nine>9</nine>
+		<zero>0</zero>
+	</remote>
+
+        <remote device="Streamzap_PC_Remote">
+                <play>PLAY</play>
+                <pause>PAUSE</pause>
+                <stop>STOP</stop>
+                <forward>&gt;&gt;</forward>
+                <reverse>&lt;&lt;</reverse>
+                <left>LEFT</left>
+                <right>RIGHT</right>
+                <up>UP</up>
+                <down>DOWN</down>
+                <pageplus>CH_UP</pageplus>
+                <pageminus>CH_DOWN</pageminus>
+                <select>OK</select>
+                <back>EXIT</back>
+                <menu>MENU</menu>
+                <title>RED</title>
+                <info>GREEN</info>
+                <skipplus>&gt;&gt;|</skipplus>
+                <display>YELLOW</display>
+                <record>RECORD</record>
+                <volumeplus>VOL_UP</volumeplus>
+                <volumeminus>VOL_DOWN</volumeminus>
+                <mute>MUTE</mute>
+                <power>POWER</power>
+                <one>1</one>
+                <two>2</two>
+                <three>3</three>
+                <four>4</four>
+                <five>5</five>
+                <six>6</six>
+                <seven>7</seven>
+                <eight>8</eight>
+                <nine>9</nine>
+                <zero>0</zero>
+        </remote>
+</lircmap>
diff --git a/abs/extra/xbmc/PKGBUILD b/abs/extra/xbmc/PKGBUILD
new file mode 100644
index 0000000..fc068d4
--- /dev/null
+++ b/abs/extra/xbmc/PKGBUILD
@@ -0,0 +1,116 @@
+# Contributor: [vEX] <niechift.dot.vex.at.gmail.dot.com>
+# Contributor: Zeqadious <zeqadious.at.gmail.dot.com>
+# Contributor: BlackEagle < ike DOT devolder AT herecura DOT be >
+
+# python dependency or not
+_ext_python="disable"
+
+pkgname=xbmc
+pkgver=9.11
+pkgrel=5
+pkgdesc="XBMC Media Center"
+arch=('i686' 'x86_64')
+url="http://xbmc.org"
+license=('GPL' 'custom')
+conflicts=('xbmc-svn')
+depends=('alsa-lib' 'curl' 'enca' 'faac' 'freetype2' 'fribidi' 'gawk' 'glew'
+         'hal' 'jasper' 'libgl' 'libjpeg' 'libmad' 'libmysqlclient'
+         'libxinerama' 'libxrandr' 'lzo2' 'sdl_image' 'sdl_mixer' 'sqlite3'
+         'tre' 'unzip' 'x-server' 'libcdio' 'wavpack' 'libmpeg2' 'a52dec'
+         'libdca' 'smbclient' 'faad2' 'libsamplerate' 'libmms' 'xorg-utils')
+if [ "$_ext_python" != "disable" ]; then
+  depends=( '${depends[@]}' 'python' )
+fi
+makedepends=('autoconf' 'automake' 'boost' 'cmake' 'gcc' 'gperf'
+            'libtool>=2.2.6a-1' 'make' 'nasm' 'patch' 'pkgconfig' 'zip'
+            'libvdpau')
+optdepends=('lirc: remote controller support'
+            'smbclient: access windows shares'
+            'unrar: access compressed files without unpacking them')
+install=${pkgname}.install
+options=(force)
+source=(http://downloads.sourceforge.net/project/xbmc/XBMC%20Source%20Code/Camelot%20-%20$pkgver/xbmc-${pkgver/_/-}.tar.gz
+        use_cdio_system_headers_on_non_win32.patch
+        FEH.sh
+	Lircmap.xml)
+
+build() {
+  cd "${srcdir}/xbmc-${pkgver/_/-}"
+  _xbmcprefix=/usr
+
+  patch -N -p1 -i  ../use_cdio_system_headers_on_non_win32.patch || return 1
+  # fix lsb_release dependency
+  sed -i -e 's:/usr/bin/lsb_release -d:cat /etc/arch-release:' xbmc/utils/SystemInfo.cpp || return 1
+  # fix faulty declaration in DllLaoder wrapper
+  sed -i 's: ftell64: dll_ftell64:' xbmc/cores/DllLoader/exports/wrapper.c || return 1
+  # fix libjpeg7 delays
+  sed -i 's|cinfo.scale_denom = GetJpegScale();|cinfo.scale_denom = GetJpegScale(); cinfo.scale_num = 1;|' xbmc/lib/cximage-6.0/CxImage/ximajpg.cpp || return 1
+
+  if [ $NOEXTRACT -ne 1 ]; then
+    # Archlinux Branding by SVN_REV
+    export SVN_REV="-ARCH"
+
+    ./bootstrap
+    ./configure --prefix=${_xbmcprefix} \
+    --enable-vdpau \
+    --disable-pulse \
+    --disable-avahi \
+    --enable-external-liba52 \
+    --enable-external-libdts \
+    --enable-external-libmpeg2 \
+    --enable-external-libogg \
+    --enable-external-libwavpack \
+    --disable-external-libass \
+    --disable-external-ffmpeg \
+    --${_ext_python}-external-python \
+    --disable-debug || return 1
+  fi
+
+  make || return 1
+  make prefix=${pkgdir}${_xbmcprefix} install || return 1
+
+  # Fix the shell script
+  sed -i '3iexport SDL_AUDIODRIVER=alsa' ${pkgdir}${_xbmcprefix}/bin/xbmc
+
+  # if disabled external python install bash script and fix startup script
+  if [ "$_ext_python" = "disable" ]; then
+    install -Dm755 ${srcdir}/FEH.sh \
+    ${pkgdir}${_xbmcprefix}/share/xbmc/FEH.sh || return 1
+    sed -i -e "s/python \\${_xbmcprefix}\/share\/xbmc\/FEH.py \"\$@\"/\\${_xbmcprefix}\/share\/xbmc\/FEH.sh/g" ${pkgdir}${_xbmcprefix}/bin/xbmc || return 1
+  fi
+
+  # bin/xbmc lsb_release fix in xmbc startup script
+  sed -i -e 's/which lsb_release &> \/dev\/null/\[ -f \/etc\/arch-release ]/g' ${pkgdir}${_xbmcprefix}/bin/xbmc || return 1
+  sed -i -e "s/lsb_release -a 2> \/dev\/null | sed -e 's\/\^\/    \/'/cat \/etc\/arch-release/g" ${pkgdir}${_xbmcprefix}/bin/xbmc || return 1
+
+  # Menu item
+  install -Dm644 ${srcdir}/xbmc-${pkgver/_/-}/tools/Linux/xbmc.desktop \
+  ${pkgdir}/usr/share/applications/xbmc.desktop || return 1
+  install -Dm644 ${srcdir}/xbmc-${pkgver/_/-}/tools/Linux/xbmc.png \
+  ${pkgdir}/usr/share/pixmaps/xbmc.png || return 1
+
+  # XBMCTex
+  #    install -Dm755 ${srcdir}/xbmc-${pkgver/_/-}/tools/XBMCTex/XBMCTex \
+  #                   ${pkgdir}${_xbmcprefix}/share/xbmc/tools/xbmctex || return 1
+
+  # License(s)
+  install -dm755 ${pkgdir}/usr/share/licenses/${pkgname}
+  for licensef in LICENSE.GPL README.linux copying.txt; do
+    mv ${pkgdir}${_xbmcprefix}/share/xbmc/${licensef} \
+    ${pkgdir}/usr/share/licenses/${pkgname} || return 1
+  done
+
+  # profile.d
+  mkdir -p $pkgdir/etc/profile.d/ && \
+  echo "export PATH=\$PATH:${_xbmcprefix}/bin" >$pkgdir/etc/profile.d/xbmc.sh && \
+  chmod 0755 $pkgdir/etc/profile.d/xbmc.sh || return 1
+
+  # fix .desktop
+  sed -i "s#Exec=xbmc#Exec=${_xbmcprefix}/bin/xbmc#" $pkgdir/usr/share/xsessions/XBMC.desktop $pkgdir/usr/share/applications/xbmc.desktop
+
+  # Use custom Lircmap to support StreamZap remote
+  cp ${srcdir}/Lircmap.xml ${pkgdir}${_xbmcprefix}/share/xbmc/system/Lircmap.xml
+}
+md5sums=('9a68ac1e2f44a54cc3803fcdb1265767'
+        '7b7403cdde791330b5ab70697d2054f2'
+        '0aa669eebaaf2a9f6e000e1f43869a7b')
diff --git a/abs/extra/xbmc/__changelog b/abs/extra/xbmc/__changelog
new file mode 100644
index 0000000..bbf1705
--- /dev/null
+++ b/abs/extra/xbmc/__changelog
@@ -0,0 +1 @@
+Added Lircmap.xml to PKGBUILD to support MCE2 and StreamZap remotes
diff --git a/abs/extra/xbmc/use_cdio_system_headers_on_non_win32.patch b/abs/extra/xbmc/use_cdio_system_headers_on_non_win32.patch
new file mode 100644
index 0000000..71f3885
--- /dev/null
+++ b/abs/extra/xbmc/use_cdio_system_headers_on_non_win32.patch
@@ -0,0 +1,130 @@
+diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp
+index 9097519..9b6418d 100644
+--- a/xbmc/Application.cpp
++++ b/xbmc/Application.cpp
+@@ -236,7 +236,11 @@
+ #endif
+ 
+ #ifdef HAS_DVD_DRIVE
++#ifdef _WIN32
+ #include "lib/libcdio/logging.h"
++#else
++#include <cdio/logging.h>
++#endif
+ #endif
+ 
+ #ifdef HAS_HAL
+diff --git a/xbmc/FileSystem/Makefile b/xbmc/FileSystem/Makefile
+index 782d57a..1e524ed 100644
+--- a/xbmc/FileSystem/Makefile
++++ b/xbmc/FileSystem/Makefile
+@@ -1,5 +1,4 @@
+-INCLUDES=-I. -I../ -I../cores -I../linux -I../../guilib -I../lib/UnrarXLib -I../utils -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
+-INCLUDES+=-I../lib/libcdio/libcdio/include
++INCLUDES=-I. -I../ -I../cores -I../linux -I../../guilib -I../lib/UnrarXLib -I../utils -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I../lib
+
+ CXXFLAGS+=-D__STDC_FORMAT_MACROS \
+ 
+diff --git a/xbmc/FileSystem/cdioSupport.cpp b/xbmc/FileSystem/cdioSupport.cpp
+index 00e5fdd..21a0b67 100644
+--- a/xbmc/FileSystem/cdioSupport.cpp
++++ b/xbmc/FileSystem/cdioSupport.cpp
+@@ -26,7 +26,7 @@
+ #include "cdioSupport.h"
+ #include "utils/SingleLock.h"
+ #include "utils/log.h"
+-#ifndef _LINUX
++#ifdef _WIN32
+ #include "lib/libcdio/logging.h"
+ #include "lib/libcdio/util.h"
+ #include "lib/libcdio/mmc.h"
+diff --git a/xbmc/FileSystem/iso9660.cpp b/xbmc/FileSystem/iso9660.cpp
+index 6e1633f..58fbc50 100644
+--- a/xbmc/FileSystem/iso9660.cpp
++++ b/xbmc/FileSystem/iso9660.cpp
+@@ -44,7 +44,7 @@ ISO9660
+ #include "utils/CharsetConverter.h"
+ 
+ #include "DetectDVDType.h"  // for MODE2_DATA_SIZE etc.
+-#ifdef _LINUX
++#ifndef _WIN32
+ #include <cdio/bytesex.h>
+ #else
+ #include "lib/libcdio/bytesex.h" // for from_723 & from_733
+diff --git a/xbmc/Makefile b/xbmc/Makefile
+index abfbdcb..f55381a 100644
+--- a/xbmc/Makefile
++++ b/xbmc/Makefile
+@@ -8,8 +8,6 @@ INCLUDES+=-Ilib/libUPnP/Platinum/Source/Core \
+           -Ilib/libUPnP/Neptune/Source/System/Posix \
+           -Ilib/libUPnP/Neptune/Source/Core
+ 
+-INCLUDES+=-Ilib/libcdio/libcdio/include
+-
+ SRCS=Application.cpp \
+      CueDocument.cpp \
+      GUISettings.cpp \
+diff --git a/xbmc/cdrip/CDDAReader.cpp b/xbmc/cdrip/CDDAReader.cpp
+index c8b37b2..e3e9c0b 100644
+--- a/xbmc/cdrip/CDDAReader.cpp
++++ b/xbmc/cdrip/CDDAReader.cpp
+@@ -24,7 +24,11 @@
+ #ifdef HAS_CDDA_RIPPER
+ 
+ #include "CDDAReader.h"
++#ifdef _WIN32
+ #include "lib/libcdio/cdio.h"
++#else
++#include <cdio/cdio.h>
++#endif
+ #include "utils/log.h"
+ 
+ #define SECTOR_COUNT 52
+diff --git a/xbmc/cores/paplayer/AC3CDDACodec.cpp b/xbmc/cores/paplayer/AC3CDDACodec.cpp
+index 20cded7..f2a077a 100644
+--- a/xbmc/cores/paplayer/AC3CDDACodec.cpp
++++ b/xbmc/cores/paplayer/AC3CDDACodec.cpp
+@@ -22,7 +22,11 @@
+ #include "system.h"
+ #include "AC3CDDACodec.h"
+ #ifdef HAS_AC3_CDDA_CODEC
++#ifdef _WIN32
+ #include "lib/libcdio/sector.h"
++#else
++#include <cdio/sector.h>
++#endif
+ 
+ AC3CDDACodec::AC3CDDACodec() : AC3Codec()
+ {
+diff --git a/xbmc/cores/paplayer/CDDAcodec.cpp b/xbmc/cores/paplayer/CDDAcodec.cpp
+index ca8f1be..42460dc 100644
+--- a/xbmc/cores/paplayer/CDDAcodec.cpp
++++ b/xbmc/cores/paplayer/CDDAcodec.cpp
+@@ -20,7 +20,11 @@
+  */
+ 
+ #include "CDDAcodec.h"
++#ifdef _WIN32
+ #include "lib/libcdio/sector.h"
++#else
++#include <cdio/sector.h>
++#endif
+ 
+ #define SECTOR_COUNT 55 // max. sectors that can be read at once
+ #define MAX_BUFFER_SIZE 2*SECTOR_COUNT*CDIO_CD_FRAMESIZE_RAW
+diff --git a/xbmc/cores/paplayer/DTSCDDACodec.cpp b/xbmc/cores/paplayer/DTSCDDACodec.cpp
+index e64cc2e..9bc46c6 100644
+--- a/xbmc/cores/paplayer/DTSCDDACodec.cpp
++++ b/xbmc/cores/paplayer/DTSCDDACodec.cpp
+@@ -22,7 +22,11 @@
+ #include "system.h"
+ #include "DTSCDDACodec.h"
+ #ifdef HAS_DTS_CODEC
++#ifdef _WIN32
+ #include "lib/libcdio/sector.h"
++#else
++#include <cdio/sector.h>
++#endif
+ 
+ DTSCDDACodec::DTSCDDACodec() : DTSCodec()
+ {
diff --git a/abs/extra/xbmc/xbmc.install b/abs/extra/xbmc/xbmc.install
new file mode 100644
index 0000000..eb4e9d4
--- /dev/null
+++ b/abs/extra/xbmc/xbmc.install
@@ -0,0 +1,7 @@
+post_install() {
+  echo ">> If XBMC won't start, but just segfaults, double check your X.Org config"
+  echo ">> so that your display depth is at least 24-bit. Eg: change "
+  echo ">> \"DefaultDepth 16\" under the \"Screen\" section so it says 24 instead"
+  echo ">> of 16."
+  /bin/true
+}
diff --git a/abs/extra/xinetd/PKGBUILD b/abs/extra/xinetd/PKGBUILD
new file mode 100644
index 0000000..af0e362
--- /dev/null
+++ b/abs/extra/xinetd/PKGBUILD
@@ -0,0 +1,32 @@
+# $Id: PKGBUILD 31124 2009-03-24 12:46:33Z allan $
+# Maintainer:  Judd <jvinet@zeroflux.org>
+pkgname=xinetd
+pkgver=2.3.14
+pkgrel=5
+pkgdesc="xinetd is a secure replacement for inetd"
+arch=('i686' 'x86_64')
+url="http://www.xinetd.org/"
+license=('custom')
+depends=('tcp_wrappers')
+optdepends=('perl: for xconv.pl script')
+backup=('etc/xinetd.conf' 'etc/xinetd.d/servers' 'etc/xinetd.d/services')
+source=(http://www.xinetd.org/xinetd-$pkgver.tar.gz xinetd.conf xinetd \
+        servers services)
+md5sums=('567382d7972613090215c6c54f9b82d9' 'f109f699a07bc8cfb5791060f5e87f9e'\
+         'ea37a2794f202e6b953d9b6956dad16a' '21f47b4aa20921cfaddddd9f9a407f81'\
+         '9fa2061dc7dd738c8424251deb86f81e')
+
+build() {
+  cd $srcdir/$pkgname-$pkgver
+  sed -i "s#${prefix}/man#${prefix}/share/man#" configure
+  ./configure --prefix=/usr --with-libwrap
+  make || return 1
+  make prefix=$pkgdir/usr install
+  install -D -m755 ../xinetd $pkgdir/etc/rc.d/xinetd
+  install -D -m644 ../xinetd.conf $pkgdir/etc/xinetd.conf
+  install -D -m644 ../servers $pkgdir/etc/xinetd.d/servers
+  install -D -m644 ../services $pkgdir/etc/xinetd.d/services
+
+  # install license
+  install -D -m644 COPYRIGHT $pkgdir/usr/share/licenses/$pkgname/COPYRIGHT
+}
diff --git a/abs/extra/xinetd/servers b/abs/extra/xinetd/servers
new file mode 100644
index 0000000..f064c8d
--- /dev/null
+++ b/abs/extra/xinetd/servers
@@ -0,0 +1,10 @@
+service servers
+{
+        type            = INTERNAL UNLISTED
+        port            = 9099
+        socket_type     = stream
+        protocol        = tcp
+        wait            = no
+        disable         = yes
+        only_from       = 127.0.0.1
+}
diff --git a/abs/extra/xinetd/services b/abs/extra/xinetd/services
new file mode 100644
index 0000000..4ea304c
--- /dev/null
+++ b/abs/extra/xinetd/services
@@ -0,0 +1,10 @@
+service services
+{
+        type            = INTERNAL UNLISTED
+        port            = 9098
+        socket_type     = stream
+        protocol        = tcp
+        wait            = no
+        disable         = yes
+        only_from       = 127.0.0.1
+}
diff --git a/abs/extra/xinetd/xinetd b/abs/extra/xinetd/xinetd
new file mode 100755
index 0000000..4b8fa36
--- /dev/null
+++ b/abs/extra/xinetd/xinetd
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/xinetd`
+case "$1" in
+  start)
+    stat_busy "Starting xinetd"
+    [ -z "$PID" ] && /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      echo $PID > /var/run/xinetd.pid
+      add_daemon xinetd
+      stat_done
+    fi
+    ;;
+  stop)
+    stat_busy "Stopping xinetd"
+    [ ! -z "$PID" ]  && kill $PID &> /dev/null
+    if [ $? -gt 0 ]; then
+      stat_fail
+    else
+      rm -f /var/run/xinetd.pid
+      rm_daemon xinetd
+      stat_done
+    fi
+    ;;
+  restart)
+    $0 stop
+    sleep 1
+    $0 start
+    ;;
+  *)
+    echo "usage: $0 {start|stop|restart}"  
+esac
+exit 0
diff --git a/abs/extra/xinetd/xinetd-2.3.14.tar.gz b/abs/extra/xinetd/xinetd-2.3.14.tar.gz
new file mode 100644
index 0000000..d2050e3
Binary files /dev/null and b/abs/extra/xinetd/xinetd-2.3.14.tar.gz differ
diff --git a/abs/extra/xinetd/xinetd.conf b/abs/extra/xinetd/xinetd.conf
new file mode 100644
index 0000000..b15d9f6
--- /dev/null
+++ b/abs/extra/xinetd/xinetd.conf
@@ -0,0 +1,14 @@
+#
+# /etc/xinetd.conf
+#
+
+defaults
+{
+        instances               = 60
+        log_type                = SYSLOG authpriv
+        log_on_success          = HOST PID
+        log_on_failure          = HOST
+        cps                     = 25 30
+}
+
+includedir /etc/xinetd.d
diff --git a/abs/extra/xmlto/PKGBUILD b/abs/extra/xmlto/PKGBUILD
index 76db93c..f9fc36e 100644
--- a/abs/extra/xmlto/PKGBUILD
+++ b/abs/extra/xmlto/PKGBUILD
@@ -5,16 +5,15 @@
 # Contributor: Robert Stoffers <rob1@ubuntu.com>
 
 pkgname=xmlto
-pkgver=0.0.21
-pkgrel=2
+pkgver=0.0.23
+pkgrel=1
 pkgdesc="Convert xml to many other formats"
 arch=('i686' 'x86_64')
 url="http://cyberelk.net/tim/software/xmlto/"
 license=('GPL')
 depends=('libxslt>=1.1.24')
 makedepends=('docbook-xsl')
-source=(https://fedorahosted.org/releases/x/m/xmlto/xmlto-0.0.21.tar.bz2)
-md5sums=('cc2039dedc81f1a56b06e5fdac6f7570')
+source=(https://fedorahosted.org/releases/x/m/xmlto/${pkgname}-${pkgver}.tar.bz2)
 
 build() {
   cd $srcdir/${pkgname}-${pkgver}
@@ -22,3 +21,4 @@ build() {
   make || return 1
   make DESTDIR=$pkgdir install || return 1
 }
+md5sums=('3001d6bb2bbc2c8f6c2301f05120f074')
-- 
cgit v0.12