diff --git a/repos/extra-i686/PKGBUILD b/repos/extra-i686/PKGBUILD
index 48425caba6ebd25544e71a12b9df64d93a2d54a7..c3bd126e74ec54fc4f273c2ef3704c0cf11e2ff5 100644
--- a/repos/extra-i686/PKGBUILD
+++ b/repos/extra-i686/PKGBUILD
@@ -4,21 +4,25 @@
 
 pkgname=emacs
 pkgver=23.4
-pkgrel=1
+pkgrel=2
 pkgdesc="The extensible, customizable, self-documenting real-time display editor"
 arch=('i686' 'x86_64')
 url="http://www.gnu.org/software/emacs/emacs.html"
 license=('GPL3')
 depends=('librsvg' 'gpm' 'giflib' 'libxpm' 'gtk2' 'hicolor-icon-theme' 'gconf' 'desktop-file-utils' 'alsa-lib')
 install=emacs.install
-source=(ftp://ftp.gnu.org/gnu/emacs/$pkgname-$pkgver.tar.bz2{,.sig} emacs-subversion17.patch)
+source=(ftp://ftp.gnu.org/gnu/emacs/$pkgname-$pkgver.tar.bz2{,.sig}
+  emacs-subversion17.patch
+  emacs-23.3-xgselect_init.patch)
 md5sums=('070c68ad8e3c31fb3cb2414feaf5e6f0'
          '55eb16eb48b44987693c0e3ea5ab8075'
-         '12e2e7a66df5cc5ded54e1d30083a1fb')
+         '12e2e7a66df5cc5ded54e1d30083a1fb'
+	 '0d3b3d701ba1295613ace30e8d67ca88')
 
 build() {
   cd "$srcdir"/$pkgname-$pkgver
   patch -p1 -i ../emacs-subversion17.patch
+  patch -p1 -i ../emacs-23.3-xgselect_init.patch
   ./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib \
     --localstatedir=/var --with-x-toolkit=gtk --with-xft
   make
diff --git a/repos/extra-i686/emacs-23.3-xgselect_init.patch b/repos/extra-i686/emacs-23.3-xgselect_init.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f3168e0e25276a3d3f3c0b17889f03218c30ff38
--- /dev/null
+++ b/repos/extra-i686/emacs-23.3-xgselect_init.patch
@@ -0,0 +1,13 @@
+diff -up emacs-23.3/src/xgselect.c.xgselect_init emacs-23.3/src/xgselect.c
+--- emacs-23.3/src/xgselect.c.xgselect_init	2011-01-08 18:45:14.000000000 +0100
++++ emacs-23.3/src/xgselect.c	2011-11-11 13:00:53.211765255 +0100
+@@ -55,6 +55,9 @@ xg_select (max_fds, rfds, wfds, efds, ti
+   do {
+     if (n_gfds > gfds_size) 
+       {
++        if (gfds_size == 0)
++          xgselect_initialize ();
++
+         while (n_gfds > gfds_size) 
+           gfds_size *= 2;
+         xfree (gfds);