--- a/configure.ac
+++ b/configure.ac
@@ -171,22 +171,8 @@ dnl check for GCC specific SSE headers
 dnl these are used by the speex resampler code
 AC_CHECK_HEADERS([xmmintrin.h emmintrin.h])
 
-ac_cppflags_save="$CPPFLAGS"
-CPPFLAGS="`$PKG_CONFIG --cflags libxml-2.0`"
-AC_COMPILE_IFELSE([
-  AC_LANG_PROGRAM([[
-#include <libxml/HTMLparser.h>
-]],[[
-#ifndef LIBXML_HTML_ENABLED
-#error libxml2 has no HTML support
-#endif /* LIBXML_HTML_ENABLED */
-]])], [
-  HAVE_LIBXML_HTML="yes"
-], [
-  HAVE_LIBXML_HTML="no"
-])
-CPPFLAGS="$ac_cppflags_save"
-AM_CONDITIONAL(HAVE_LIBXML_HTML, test "x$HAVE_LIBXML_HTML" = "xyes")
+AG_GST_LIBXML2_CHECK
+AM_CONDITIONAL(HAVE_LIBXML2, test "x$HAVE_LIBXML2" = "xyes")
 
 dnl used in gst/tcp
 AC_CHECK_HEADERS([sys/socket.h],
@@ -405,15 +391,6 @@ AG_GST_CHECK_PLUGIN(videorate)
 AG_GST_CHECK_PLUGIN(videoscale)
 AG_GST_CHECK_PLUGIN(volume)
 
-dnl FIXME 0.11: check for libxml, split subparse and move libxml parts to ext/
-AM_CONDITIONAL(USE_XML, false)
-AC_DEFINE([GST_DISABLE_XML], [1], [set to disable libxml2-dependent code in subparse])
-
-dnl disable plug-ins that require libxml2's HTML support if it is not available
-if test "x$HAVE_LIBXML_HTML" != "xyes"; then
-  AG_GST_DISABLE_PLUGIN(subparse)
-fi
-
 dnl iso-codes is optional, used by libgsttag
 AC_ARG_ENABLE(iso-codes,
 AC_HELP_STRING([--enable-iso-codes],[use iso-codes if installed]),
--- a/gst/subparse/Makefile.am
+++ b/gst/subparse/Makefile.am
@@ -1,17 +1,10 @@
 plugin_LTLIBRARIES = libgstsubparse.la
 
-if USE_XML
-SAMIPARSE_SOURCES = samiparse.c samiparse.h
-else
-SAMIPARSE_SOURCES = 
-endif
-
 libgstsubparse_la_SOURCES = \
 	gstssaparse.c \
 	gstssaparse.h \
 	gstsubparse.c \
 	gstsubparse.h \
-	$(SAMIPARSE_SOURCES) \
 	tmplayerparse.c \
 	tmplayerparse.h \
 	mpl2parse.c \
@@ -24,6 +17,12 @@ libgstsubparse_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
 libgstsubparse_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS)
 libgstsubparse_la_LIBTOOLFLAGS = --tag=disable-static
 
+if HAVE_LIBXML2
+libgstsubparse_la_SOURCES += samiparse.c samiparse.h
+libgstsubparse_la_CFLAGS += $(XML_CFLAGS)
+libgstsubparse_la_LIBADD += $(XML_LIBS)
+endif
+
 noinst_HEADERS = \
 	gstssaparse.h \
 	gstsubparse.h \
--- a/gst/subparse/gstsubparse.c
+++ b/gst/subparse/gstsubparse.c
@@ -55,7 +55,7 @@ gst_sub_parse_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
 
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
 static GstStaticPadTemplate sink_templ = GST_STATIC_PAD_TEMPLATE ("sink",
     GST_PAD_SINK,
     GST_PAD_ALWAYS,
@@ -107,7 +107,7 @@ gst_sub_parse_dispose (GObject * object)
     case GST_SUB_PARSE_FORMAT_QTTEXT:
       qttext_context_deinit (&subparse->state);
       break;
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
     case GST_SUB_PARSE_FORMAT_SAMI:
       sami_context_deinit (&subparse->state);
       break;
@@ -1176,7 +1176,7 @@ parser_state_dispose (GstSubParse * self, ParserState * state)
   }
   if (state->user_data) {
     switch (self->parser_type) {
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
       case GST_SUB_PARSE_FORMAT_SAMI:
         sami_context_reset (state);
         break;
@@ -1286,7 +1286,7 @@ gst_sub_parse_data_format_autodetect (gchar * match_str)
     GST_LOG ("MPSub (time based) format detected");
     return GST_SUB_PARSE_FORMAT_MPSUB;
   }
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
   if (strstr (match_str, "<SAMI>") != NULL ||
       strstr (match_str, "<sami>") != NULL) {
     GST_LOG ("SAMI (time based) format detected");
@@ -1351,7 +1351,7 @@ gst_sub_parse_format_autodetect (GstSubParse * self)
       self->parse_line = parse_mpsub;
       return gst_caps_new_simple ("text/x-raw",
           "format", G_TYPE_STRING, "utf8", NULL);
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
     case GST_SUB_PARSE_FORMAT_SAMI:
       self->parse_line = parse_sami;
       sami_context_init (&self->state);
@@ -1412,7 +1412,7 @@ feed_textbuf (GstSubParse * self, GstBuffer * buf)
     parser_state_init (&self->state);
     g_string_truncate (self->textbuf, 0);
     gst_adapter_clear (self->adapter);
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
     if (self->parser_type == GST_SUB_PARSE_FORMAT_SAMI)
       sami_context_reset (&self->state);
 #endif
@@ -1691,7 +1691,7 @@ GST_STATIC_CAPS ("application/x-subtitle-tmplayer");
 static GstStaticCaps sub_caps = GST_STATIC_CAPS ("application/x-subtitle");
 #define MPL2_CAPS (gst_static_caps_get (&mpl2_caps))
 
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
 static GstStaticCaps smi_caps = GST_STATIC_CAPS ("application/x-subtitle-sami");
 #define SAMI_CAPS (gst_static_caps_get (&smi_caps))
 #endif
@@ -1776,7 +1776,7 @@ gst_subparse_type_find (GstTypeFind * tf, gpointer private)
       GST_DEBUG ("MPSub format detected");
       caps = SUB_CAPS;
       break;
-#ifndef GST_DISABLE_XML
+#ifdef HAVE_LIBXML2
     case GST_SUB_PARSE_FORMAT_SAMI:
       GST_DEBUG ("SAMI (time-based) format detected");
       caps = SAMI_CAPS;
