diff --git a/ci/gitlab-ci.yml b/ci/gitlab-ci.yml
index 890830c3cfc51cdff40d834c3ecc79d22a3a256d..5dcef84aadb0b23ed05f1eed01d6cb8ff76cf3f7 100644
--- a/ci/gitlab-ci.yml
+++ b/ci/gitlab-ci.yml
@@ -30,10 +30,6 @@ variables:
     # A known-good version of deb-build-snapshot
     DEB_BUILD_SNAPSHOT_TAG: v0.20190828.0
 
-    # Name of the package with libjpeg.so.62 in. Set to libjpeg62 in
-    # Ubuntu or really old versions of Debian
-    LIBJPEG62: libjpeg62-turbo
-
 before_script:
     - |
         set -eux
@@ -54,7 +50,7 @@ before_script:
           libelf-dev \
           libipc-run-perl \
           libglib2.0-dev \
-          ${LIBJPEG62} \
+          libxml2 \
           perl \
           python3-debian \
           rsync \
@@ -131,7 +127,6 @@ build:bionic:
     extends: .deb-build-snapshot
     variables:
         BUILD_IMAGE: 'ubuntu:bionic'
-        LIBJPEG62: 'libjpeg62'
 
 build:arch:
     when: manual
@@ -157,8 +152,8 @@ build:arch:
             glib2 \
             gtk-doc \
             libelf \
-            libjpeg6-turbo \
             libtool \
+            libxml2 \
             libxslt \
             make \
             perl \
diff --git a/debian/control b/debian/control
index 0b9ebb70ec0515c43a1edc6a72a5a75ff355e2e8..8872be41fe91c00031db47b4b9cf8e9218d988b7 100644
--- a/debian/control
+++ b/debian/control
@@ -16,7 +16,7 @@ Build-Depends:
  libipc-run-perl,
  libglib2.0-0 <!nocheck>,
  libglib2.0-dev [amd64],
- libjpeg62-turbo <!nocheck> | libjpeg62 (>= 6b1) <!nocheck>,
+ libxml2 <!nocheck>,
  perl:any | perl,
  xsltproc,
  zlib1g <!nocheck>,
diff --git a/debian/tests/control b/debian/tests/control
index 38a94afc99c8dee0f000ec53bfd59be3d2c34da6..527b81ae4d305d12c717046a5fe65537b9d18ece 100644
--- a/debian/tests/control
+++ b/debian/tests/control
@@ -11,7 +11,7 @@ Depends:
  libcapsule-tools,
  libipc-run-perl,
  libglib2.0-0,
- libjpeg62 (>= 6b1) | libjpeg62-turbo,
+ libxml2,
  libtool,
  perl,
  pkg-config,
diff --git a/tests/capture-libs.pl b/tests/capture-libs.pl
index 63294e0e996d0ade2a85f2e8d941bd4ac3c02233..3b0befbd12c52ab403a7c7307e604fc5f700b6df 100755
--- a/tests/capture-libs.pl
+++ b/tests/capture-libs.pl
@@ -264,7 +264,7 @@ run_ok([qw(bwrap --ro-bind / / --ro-bind /), $host,
         qw(--dev-bind /dev /dev),
         $CAPSULE_CAPTURE_LIBS_TOOL, '--link-target=/',
         "--dest=$libdir", "--provider=$host",
-        'soname-match:libjp*g.so.6*'], '>&2');
+        'soname-match:lib*ml2.so.2*'], '>&2');
 {
     opendir(my $dir_iter, $libdir);
     foreach my $symlink (readdir $dir_iter) {
@@ -273,8 +273,8 @@ run_ok([qw(bwrap --ro-bind / / --ro-bind /), $host,
     }
     closedir $dir_iter;
 }
-like(readlink "$libdir/libjpeg.so.62", qr{^$LIBDIR/libjpeg\.so\.62(?:[0-9.]+)$},
-     '$libdir/libjpeg.so.62 is a symlink to /run/host + realpath of libjpeg-6b');
+like(readlink "$libdir/libxml2.so.2", qr{^$LIBDIR/libxml2\.so\.2(?:[0-9.]+)$},
+     '$libdir/libxml2.so.2 is a symlink to /run/host + realpath of libxml2');
 
 run_ok(['rm', '-fr', $libdir]);
 mkdir($libdir);
@@ -492,8 +492,8 @@ SKIP: {
         $other_multiarch = 'x86_64-linux-gnu';
     }
 
-    skip "$other_multiarch libjpeg.so.62 not available", 1
-        unless -e "/usr/lib/$other_multiarch/libjpeg.so.62";
+    skip "$other_multiarch libxml2.so.2 not available", 1
+        unless -e "/usr/lib/$other_multiarch/libxml2.so.2";
 
     # Normally, the wrong ABI is an error...
     run_ok(['rm', '-fr', $libdir]);
@@ -503,10 +503,10 @@ SKIP: {
                            qw(--dev-bind /dev /dev),
                            $CAPSULE_CAPTURE_LIBS_TOOL, '--link-target=/',
                            "--dest=$libdir", "--provider=$host",
-                           "path:/usr/lib/$other_multiarch/libjpeg.so.62"],
+                           "path:/usr/lib/$other_multiarch/libxml2.so.2"],
                            '>&2');
     ok(! $result, 'library of wrong ABI yields an error');
-    ok(! -e "$libdir/libjpeg.so.62");
+    ok(! -e "$libdir/libxml2.so.2");
 
     # ... but when we're dealing with a glob match, other ABIs are silently
     # ignored.
@@ -517,10 +517,10 @@ SKIP: {
                            qw(--dev-bind /dev /dev),
                            $CAPSULE_CAPTURE_LIBS_TOOL, '--link-target=/',
                            "--dest=$libdir", "--provider=$host",
-                           "path-match:/usr/lib/$other_multiarch/libjpeg.so.62"],
+                           "path-match:/usr/lib/$other_multiarch/libxml2.so.2"],
                            '>&2');
     ok($result, 'library of wrong ABI ignored when using path-match');
-    ok(! -e "$libdir/libjpeg.so.62");
+    ok(! -e "$libdir/libxml2.so.2");
 
     # We can also ignore this case explicitly.
     run_ok(['rm', '-fr', $libdir]);
@@ -530,10 +530,10 @@ SKIP: {
                            qw(--dev-bind /dev /dev),
                            $CAPSULE_CAPTURE_LIBS_TOOL, '--link-target=/',
                            "--dest=$libdir", "--provider=$host",
-                           "if-same-abi:path:/usr/lib/$other_multiarch/libjpeg.so.62"],
+                           "if-same-abi:path:/usr/lib/$other_multiarch/libxml2.so.2"],
                            '>&2');
     ok($result, 'library of wrong ABI ignored when using if-same-abi');
-    ok(! -e "$libdir/libjpeg.so.62");
+    ok(! -e "$libdir/libxml2.so.2");
 };
 
 SKIP: {
diff --git a/tests/init-project.pl b/tests/init-project.pl
index 3bca8297ad2c5f185d9114eaedbae085530a6f7a..a4bce2e383af40cfd42d56964be3c50f228e2b99 100755
--- a/tests/init-project.pl
+++ b/tests/init-project.pl
@@ -59,7 +59,7 @@ run_ok([$CAPSULE_INIT_PROJECT_TOOL,
         '--search-tree=/',
         '--runtime-tree=/run/host',
         'libz.so.1/1.2.3',
-        'libjpeg.so.62']);
+        'libxml2.so.2']);
 run_ok([
         'sh', '-euc', 'cd "$1"; shift; ./configure "$@"',
         'sh', "$test_tempdir/libz-proxy",
@@ -72,10 +72,10 @@ ok(-e "$test_tempdir/libz-proxy/libz.la");
 ok(-e "$test_tempdir/libz-proxy/.libs/libz.so");
 ok(-e "$test_tempdir/libz-proxy/.libs/libz.so.1");
 ok(-e "$test_tempdir/libz-proxy/.libs/libz.so.1.2.3");
-ok(-e "$test_tempdir/libz-proxy/libjpeg.la");
-ok(-e "$test_tempdir/libz-proxy/.libs/libjpeg.so");
-ok(-e "$test_tempdir/libz-proxy/.libs/libjpeg.so.62");
-ok(-e "$test_tempdir/libz-proxy/.libs/libjpeg.so.62.0.0");
+ok(-e "$test_tempdir/libz-proxy/libxml2.la");
+ok(-e "$test_tempdir/libz-proxy/.libs/libxml2.so");
+ok(-e "$test_tempdir/libz-proxy/.libs/libxml2.so.2");
+ok(-e "$test_tempdir/libz-proxy/.libs/libxml2.so.2.0.0");
 {
     local $/ = undef;   # read entire file in one go
     open(my $fh, '<', "$test_tempdir/libz-proxy/shim/libz.so.1.c");
@@ -90,7 +90,7 @@ ok(-e "$test_tempdir/libz-proxy/.libs/libjpeg.so.62.0.0");
 }
 {
     local $/ = undef;   # read entire file in one go
-    open(my $fh, '<', "$test_tempdir/libz-proxy/shim/libjpeg.so.62.c");
+    open(my $fh, '<', "$test_tempdir/libz-proxy/shim/libxml2.so.2.c");
     my $source = <$fh>;
     like($source, qr{\.default_prefix\s*=\s*"/host"},
         'Configure-time runtime tree takes precedence');
diff --git a/tests/symbols.pl b/tests/symbols.pl
index dbe5bb8e01c22316124b24f388be71618af6a723..3d19896cee2551a4c5abb4c2538938c650a8582d 100755
--- a/tests/symbols.pl
+++ b/tests/symbols.pl
@@ -77,13 +77,13 @@ else {
 
 # How about versioned symbols?
 my $output;
-run_ok([$CAPSULE_SYMBOLS_TOOL, 'libjpeg.so.62', '/'], '>', \$output);
+run_ok([$CAPSULE_SYMBOLS_TOOL, 'libxml2.so.2', '/'], '>', \$output);
 diag_multiline $output;
 
-like($output, qr{^jpeg_destroy \@\@LIBJPEG_6\.2$}m,
-    "jpeg_destroy is a versioned symbol");
-unlike($output, qr{^jpeg_destroy (?!\@\@LIBJPEG_6\.2)}m,
-    "jpeg_destroy does not appear unversioned");
+like($output, qr{^xmlFree \@\@LIBXML2_2\.4\.30$}m,
+    "xmlFree is a versioned symbol");
+unlike($output, qr{^xmlFree (?!\@\@LIBXML2_2\.4\.30)}m,
+    "xmlFree does not appear unversioned");
 
 done_testing;