diff --git a/plugins/serial2002/serial2002.c b/plugins/serial2002/serial2002.c
index ae0af1b5d98808309e3b68356470d1bb5964d0ce..4017406a4b6604f307a456c3f030286be5db2285 100644
--- a/plugins/serial2002/serial2002.c
+++ b/plugins/serial2002/serial2002.c
@@ -367,6 +367,28 @@ static int channel_down(struct moberg_channel *channel)
 static struct moberg_status channel_open(struct moberg_channel *channel)
 {
   struct moberg_status result = device_open(channel->context->device);
+  int count = 0;
+  switch (channel->kind) {
+    case chan_ANALOGIN:
+      count = channel->context->device->analog_in.count;
+      break;
+    case chan_ANALOGOUT:
+      count = channel->context->device->analog_out.count;
+      break;
+    case chan_DIGITALIN:
+      count = channel->context->device->digital_in.count;
+      break;
+    case chan_DIGITALOUT:
+      count = channel->context->device->digital_out.count;
+      break;
+    case chan_ENCODERIN:
+      count = channel->context->device->encoder_in.count;
+      break;
+  }
+  if (channel->context->index >= count) {
+     device_close(channel->context->device);
+     result = MOBERG_ERRNO(ENODEV);
+  }
   return result;
 }