diff --git a/sim/src/caps.rs b/sim/src/caps.rs
new file mode 100644
index 0000000..77be9de
--- /dev/null
+++ b/sim/src/caps.rs
@@ -0,0 +1,23 @@
+// Query the bootloader's capabilities.
+
+#[repr(u32)]
+#[derive(Copy, Clone, Eq, PartialEq)]
+#[allow(unused)]
+pub enum Caps {
+    RSA2048          = (1 << 0),
+    EcdsaP224        = (1 << 1),
+    EcdsaP256        = (1 << 2),
+    SwapUpgrade      = (1 << 3),
+    OverwriteUpgrade = (1 << 4),
+}
+
+impl Caps {
+    pub fn present(self) -> bool {
+        let caps = unsafe { bootutil_get_caps() };
+        (caps as u32) & (self as u32) != 0
+    }
+}
+
+extern "C" {
+    fn bootutil_get_caps() -> Caps;
+}
diff --git a/sim/src/main.rs b/sim/src/main.rs
index de9e588..3998725 100644
--- a/sim/src/main.rs
+++ b/sim/src/main.rs
@@ -22,9 +22,11 @@
 mod flash;
 pub mod api;
 mod pdump;
+mod caps;
 
 use flash::Flash;
 use area::{AreaDesc, FlashId};
+use caps::Caps;
 
 const USAGE: &'static str = "
 Mcuboot simulator
@@ -243,9 +245,11 @@
                 warn!("FAIL at step {} of {}", i, total_count);
                 bad += 1;
             }
-            if !verify_image(&fl3, slot1_base, &primary) {
-                warn!("Slot 1 FAIL at step {} of {}", i, total_count);
-                bad += 1;
+            if Caps::SwapUpgrade.present() {
+                if !verify_image(&fl3, slot1_base, &primary) {
+                    warn!("Slot 1 FAIL at step {} of {}", i, total_count);
+                    bad += 1;
+                }
             }
         }
         error!("{} out of {} failed {:.2}%",
@@ -256,23 +260,29 @@
         }
 
         let (fl4, total_counts) = try_random_fails(&flash, &areadesc, total_count, 5);
-        info!("Random fails at reset points={:?}", total_counts);
+        info!("Random interruptions at reset points={:?}", total_counts);
         let slot0_ok = verify_image(&fl4, slot0_base, &upgrade);
-        let slot1_ok = verify_image(&fl4, slot1_base, &primary);
-        if !slot0_ok || !slot1_ok {
-            error!("Image mismatch after random fails: slot0={} slot1={}",
+        let slot1_ok = if Caps::SwapUpgrade.present() {
+            verify_image(&fl4, slot1_base, &primary)
+        } else {
+            true
+        };
+        if !slot0_ok /* || !slot1_ok */ {
+            error!("Image mismatch after random interrupts: slot0={} slot1={}",
                    if slot0_ok { "ok" } else { "fail" },
                    if slot1_ok { "ok" } else { "fail" });
             self.failures += 1;
             return;
         }
 
-        for count in 2 .. 5 {
-            info!("Try revert: {}", count);
-            let fl2 = try_revert(&flash, &areadesc, count);
-            if !verify_image(&fl2, slot0_base, &primary) {
-                warn!("Revert failure on count {}", count);
-                failed = true;
+        if Caps::SwapUpgrade.present() {
+            for count in 2 .. 5 {
+                info!("Try revert: {}", count);
+                let fl2 = try_revert(&flash, &areadesc, count);
+                if !verify_image(&fl2, slot0_base, &primary) {
+                    warn!("Revert failure on count {}", count);
+                    failed = true;
+                }
             }
         }
 
