diff --git a/lib/card10/portexpander.c b/lib/card10/portexpander.c
index ee3ac3da9df23430800a7892bbfcd326232d5e3a..6ae8cd93b3866fa0dd794928875e2fda33d234f6 100644
--- a/lib/card10/portexpander.c
+++ b/lib/card10/portexpander.c
@@ -105,3 +105,12 @@ void portexpander_set(uint8_t pin, uint8_t value)
 		portexpander_write(PE_C_OUTPUT_PORT, output_state);
 	}
 }
+
+void portexpander_set_mask(uint8_t mask, uint8_t values)
+{
+	if (detected) {
+		output_state &= ~(mask & ~values);
+		output_state |= mask & values;
+		portexpander_write(PE_C_OUTPUT_PORT, output_state);
+	}
+}
diff --git a/lib/card10/portexpander.h b/lib/card10/portexpander.h
index b81c7070d4d412714d1df08b1f424fabf37291b0..24e4e5ffbccfc6e1b47cbf987df6c141931cc484 100644
--- a/lib/card10/portexpander.h
+++ b/lib/card10/portexpander.h
@@ -7,6 +7,7 @@
 void portexpander_init(void);
 uint8_t portexpander_get(void);
 void portexpander_set(uint8_t pin, uint8_t value);
+void portexpander_set_mask(uint8_t mask, uint8_t values);
 bool portexpander_detected(void);
 
 #endif