diff --git a/kiosk-shell/kiosk-shell.c b/kiosk-shell/kiosk-shell.c
index eed0f0aa1cd0eaf78131f0e5248a1a500af66f43..f95166c7209a583d3b9512641b87a6385d83ccb2 100644
--- a/kiosk-shell/kiosk-shell.c
+++ b/kiosk-shell/kiosk-shell.c
@@ -57,9 +57,14 @@ get_kiosk_shell_seat(struct weston_seat *seat)
 {
 	struct wl_listener *listener;
 
+	if (!seat)
+		return NULL;
+
 	listener = wl_signal_get(&seat->destroy_signal,
 				 kiosk_shell_seat_handle_destroy);
-	assert(listener != NULL);
+
+	if (!listener)
+		return NULL;
 
 	return container_of(listener,
 			    struct kiosk_shell_seat, seat_destroy_listener);
@@ -443,6 +448,12 @@ kiosk_shell_seat_create(struct kiosk_shell *shell, struct weston_seat *seat)
 {
 	struct kiosk_shell_seat *shseat;
 
+	if (wl_list_length(&shell->seat_list) > 0) {
+		weston_log("WARNING: multiple seats detected. kiosk-shell "
+			   "can not handle multiple seats!\n");
+		return NULL;
+	}
+
 	shseat = zalloc(sizeof *shseat);
 	if (!shseat) {
 		weston_log("no memory to allocate shell seat\n");