diff --git a/pressure-vessel/runtime.c b/pressure-vessel/runtime.c
index 60c50b15e713c850a2fccdbf0a4c1938ddf6ae8a..ac9fcf7fd18d1aa9757eba83f531fe777d42e1e3 100644
--- a/pressure-vessel/runtime.c
+++ b/pressure-vessel/runtime.c
@@ -153,27 +153,37 @@ static const char * const multiarch_tuples[] =
   NULL
 };
 
+typedef struct
+{
+  const char *tuple;
+  const char *libqual;
+} MultiarchDetails;
+
 /*
- * Directories other than /usr/lib that we must search for loadable
- * modules, in the same order as multiarch_tuples
+ * More details, in the same order as multiarch_tuples
  */
-static const char * const libquals[] =
+static const MultiarchDetails multiarch_details[] =
 {
-  "lib64",
-  "lib32"
+  {
+    .tuple = "x86_64-linux-gnu",
+    .libqual = "lib64",
+  },
+  {
+    .tuple = "i386-linux-gnu",
+    .libqual = "lib32",
+  },
 };
-G_STATIC_ASSERT (G_N_ELEMENTS (libquals)
+G_STATIC_ASSERT (G_N_ELEMENTS (multiarch_details)
                  == G_N_ELEMENTS (multiarch_tuples) - 1);
 
 typedef struct
 {
   gsize multiarch_index;
-  const char *tuple;
+  const MultiarchDetails *details;
   gchar *capsule_capture_libs_basename;
   gchar *capsule_capture_libs;
   gchar *libdir_in_current_namespace;
   gchar *libdir_in_container;
-  const char *libqual;
   gchar *ld_so;
 } RuntimeArchitecture;
 
@@ -183,24 +193,27 @@ runtime_architecture_init (RuntimeArchitecture *self,
 {
   const gchar *argv[] = { NULL, "--print-ld.so", NULL };
 
-  g_return_val_if_fail (self->multiarch_index < G_N_ELEMENTS (libquals), FALSE);
+  g_return_val_if_fail (self->multiarch_index < G_N_ELEMENTS (multiarch_details),
+                        FALSE);
   g_return_val_if_fail (self->multiarch_index < G_N_ELEMENTS (multiarch_tuples) - 1,
                         FALSE);
-  g_return_val_if_fail (self->tuple == NULL, FALSE);
+  g_return_val_if_fail (self->details == NULL, FALSE);
 
-  self->tuple = multiarch_tuples[self->multiarch_index];
-  g_return_val_if_fail (self->tuple != NULL, FALSE);
-  self->libqual = libquals[self->multiarch_index];
+  self->details = &multiarch_details[self->multiarch_index];
+  g_return_val_if_fail (self->details != NULL, FALSE);
+  g_return_val_if_fail (self->details->tuple != NULL, FALSE);
+  g_return_val_if_fail (g_strcmp0 (multiarch_tuples[self->multiarch_index],
+                                   self->details->tuple) == 0, FALSE);
 
   self->capsule_capture_libs_basename = g_strdup_printf ("%s-capsule-capture-libs",
-                                                         self->tuple);
+                                                         self->details->tuple);
   self->capsule_capture_libs = g_build_filename (runtime->tools_dir,
                                                  self->capsule_capture_libs_basename,
                                                  NULL);
   self->libdir_in_current_namespace = g_build_filename (runtime->overrides, "lib",
-                                                        self->tuple, NULL);
+                                                        self->details->tuple, NULL);
   self->libdir_in_container = g_build_filename (runtime->overrides_in_container,
-                                                "lib", self->tuple, NULL);
+                                                "lib", self->details->tuple, NULL);
 
   /* This has the side-effect of testing whether we can run binaries
    * for this architecture on the current environment. We
@@ -211,7 +224,7 @@ runtime_architecture_init (RuntimeArchitecture *self,
 
   if (self->ld_so == NULL)
     {
-      g_debug ("Cannot determine ld.so for %s", self->tuple);
+      g_debug ("Cannot determine ld.so for %s", self->details->tuple);
       return FALSE;
     }
 
@@ -221,13 +234,12 @@ runtime_architecture_init (RuntimeArchitecture *self,
 static gboolean
 runtime_architecture_check_valid (RuntimeArchitecture *self)
 {
-  g_return_val_if_fail (self->multiarch_index < G_N_ELEMENTS (libquals), FALSE);
-  g_return_val_if_fail (self->tuple == multiarch_tuples[self->multiarch_index], FALSE);
+  g_return_val_if_fail (self->multiarch_index < G_N_ELEMENTS (multiarch_details), FALSE);
+  g_return_val_if_fail (self->details == &multiarch_details[self->multiarch_index], FALSE);
   g_return_val_if_fail (self->capsule_capture_libs_basename != NULL, FALSE);
   g_return_val_if_fail (self->capsule_capture_libs != NULL, FALSE);
   g_return_val_if_fail (self->libdir_in_current_namespace != NULL, FALSE);
   g_return_val_if_fail (self->libdir_in_container != NULL, FALSE);
-  g_return_val_if_fail (self->libqual == libquals[self->multiarch_index], FALSE);
   g_return_val_if_fail (self->ld_so != NULL, FALSE);
   return TRUE;
 }
@@ -236,8 +248,7 @@ static void
 runtime_architecture_clear (RuntimeArchitecture *self)
 {
   self->multiarch_index = G_MAXSIZE;
-  self->tuple = NULL;
-  self->libqual = NULL;
+  self->details = NULL;
   g_clear_pointer (&self->capsule_capture_libs_basename, g_free);
   g_clear_pointer (&self->capsule_capture_libs, g_free);
   g_clear_pointer (&self->libdir_in_current_namespace, g_free);
@@ -1269,7 +1280,7 @@ try_bind_dri (PvRuntime *self,
                                                      "dri", member, NULL);
 
           g_debug ("Creating symbolic link \"%s\" -> \"%s\" for \"%s\" DRI driver",
-                   dest, target, arch->tuple);
+                   dest, target, arch->details->tuple);
 
           /* Delete an existing symlink if any, like ln -f */
           if (unlink (dest) != 0 && errno != ENOENT)
@@ -1936,7 +1947,7 @@ pv_runtime_remove_overridden_libraries (PvRuntime *self,
       glnx_autofd int libdir_fd = -1;
       struct dirent *dent;
 
-      multiarch_libdirs[i] = g_build_filename (libdirs[i], arch->tuple, NULL);
+      multiarch_libdirs[i] = g_build_filename (libdirs[i], arch->details->tuple, NULL);
 
       /* Mostly ignore error: if the library directory cannot be opened,
        * presumably we don't need to do anything with it... */
@@ -1960,7 +1971,7 @@ pv_runtime_remove_overridden_libraries (PvRuntime *self,
         }
 
       g_debug ("Removing overridden %s libraries from \"%s\" in \"%s\"...",
-               arch->tuple, multiarch_libdirs[i], self->mutable_sysroot);
+               arch->details->tuple, multiarch_libdirs[i], self->mutable_sysroot);
 
       if (!glnx_dirfd_iterator_init_take_fd (&libdir_fd, &iters[i], error))
         {
@@ -2431,7 +2442,7 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
             {
               g_debug ("Container does not have %s so it cannot run "
                        "%s binaries",
-                       arch->ld_so, arch->tuple);
+                       arch->ld_so, arch->details->tuple);
               continue;
             }
 
@@ -2508,7 +2519,7 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
           g_clear_pointer (&temp_bwrap, flatpak_bwrap_free);
 
           g_debug ("Collecting %s EGL drivers from host system...",
-                   arch->tuple);
+                   arch->details->tuple);
 
           for (j = 0; j < egl_icd_details->len; j++)
             {
@@ -2526,7 +2537,7 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
             }
 
           g_debug ("Collecting %s Vulkan drivers from host system...",
-                   arch->tuple);
+                   arch->details->tuple);
 
           for (j = 0; j < vulkan_icd_details->len; j++)
             {
@@ -2543,9 +2554,9 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
                 return FALSE;
             }
 
-          g_debug ("Enumerating %s VDPAU ICDs on host system...", arch->tuple);
+          g_debug ("Enumerating %s VDPAU ICDs on host system...", arch->details->tuple);
           vdpau_drivers = srt_system_info_list_vdpau_drivers (system_info,
-                                                              arch->tuple,
+                                                              arch->details->tuple,
                                                               SRT_DRIVER_FLAGS_NONE);
 
           for (icd_iter = vdpau_drivers; icd_iter != NULL; icd_iter = icd_iter->next)
@@ -2563,9 +2574,9 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
             }
 
           g_debug ("Enumerating %s VA-API drivers on host system...",
-                   arch->tuple);
+                   arch->details->tuple);
           va_api_drivers = srt_system_info_list_va_api_drivers (system_info,
-                                                                arch->tuple,
+                                                                arch->details->tuple,
                                                                 SRT_DRIVER_FLAGS_NONE);
 
           /* Guess that there will be about the same number of VA-API ICDs
@@ -2724,7 +2735,7 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
 
                   dir = g_path_get_dirname (target);
 
-                  lib_multiarch = g_build_filename ("/lib", arch->tuple, NULL);
+                  lib_multiarch = g_build_filename ("/lib", arch->details->tuple, NULL);
                   if (g_str_has_suffix (dir, lib_multiarch))
                     dir[strlen (dir) - strlen (lib_multiarch)] = '\0';
                   else if (g_str_has_suffix (dir, "/lib64"))
@@ -2772,10 +2783,10 @@ pv_runtime_use_provider_graphics_stack (PvRuntime *self,
           dirs = g_new0 (gchar *, 7);
           dirs[0] = g_strdup ("/lib");
           dirs[1] = g_strdup ("/usr/lib");
-          dirs[2] = g_build_filename ("/", arch->libqual, NULL);
-          dirs[3] = g_build_filename ("/usr", arch->libqual, NULL);
-          dirs[4] = g_build_filename ("/lib", arch->tuple, NULL);
-          dirs[5] = g_build_filename ("/usr", "lib", arch->tuple, NULL);
+          dirs[2] = g_build_filename ("/", arch->details->libqual, NULL);
+          dirs[3] = g_build_filename ("/usr", arch->details->libqual, NULL);
+          dirs[4] = g_build_filename ("/lib", arch->details->tuple, NULL);
+          dirs[5] = g_build_filename ("/usr", "lib", arch->details->tuple, NULL);
 
           for (j = 0; j < 6; j++)
             {