diff --git a/api/api_storage.c b/api/api_storage.c
index bd4314472130c1e1fdb616aef177464b4a58df0a..e80818df1c426ed6942c8b1da266c81c691b0b9e 100644
--- a/api/api_storage.c
+++ b/api/api_storage.c
@@ -88,90 +88,60 @@ void dev_stor_init(void)
  *
  * type:	storage group type - ENUM_IDE, ENUM_SCSI etc.
  *
- * first:	if 1 the first device in the storage group is returned (if
- *              exists), if 0 the next available device is searched
- *
  * more:	returns 0/1 depending if there are more devices in this group
  *		available (for future iterations)
  *
  * returns:	0/1 depending if device found in this iteration
  */
-static int dev_stor_get(int type, int first, int *more, struct device_info *di)
+static int dev_stor_get(int type, int *more, struct device_info *di)
 {
-	int found = 0;
-	*more = 0;
-
-	int i;
-
 	struct blk_desc *dd;
+	int found = 0;
+	int i = 0;
 
 	/* Wasn't configured for this type, return 0 directly */
 	if (specs[type].name == NULL)
 		return 0;
 
-	if (first) {
-		di->cookie = (void *)blk_get_dev(specs[type].name, 0);
-		if (di->cookie == NULL)
-			return 0;
-		else
-			found = 1;
-
-		/*
-		 * provide hint if there are more devices in
-		 * this group to enumerate
-		 */
-		if (1 < specs[type].max_dev)
-			*more = 1;
-
-	} else {
-		for (i = 0; i < specs[type].max_dev; i++)
+	if (di->cookie != NULL) {
+		/* Find the last device we've returned  */
+		for (i = 0; i < specs[type].max_dev; i++) {
 			if (di->cookie ==
 			    (void *)blk_get_dev(specs[type].name, i)) {
-				/*
-				 * previous cookie found -- advance to the
-				 * next device, if possible
-				 */
-
-				if (++i >= specs[type].max_dev) {
-					/* out of range, no more to enum */
-					di->cookie = NULL;
-					break;
-				}
-
-				di->cookie = (void *)blk_get_dev(
-							specs[type].name, i);
-				if (di->cookie == NULL)
-					return 0;
-				else
-					found = 1;
-
-				/*
-				 * provide hint if there are more devices in
-				 * this group to enumerate
-				 */
-				if ((i + 1) < specs[type].max_dev)
-					*more = 1;
-
+				i += 1;
 				break;
 			}
+		}
 	}
 
-	if (found) {
-		di->type = specs[type].type;
+	for (; i < specs[type].max_dev; i++) {
+		di->cookie = (void *)blk_get_dev(specs[type].name, i);
 
 		if (di->cookie != NULL) {
-			dd = (struct blk_desc *)di->cookie;
-			if (dd->type == DEV_TYPE_UNKNOWN) {
-				debugf("device instance exists, but is not active..");
-				found = 0;
-			} else {
-				di->di_stor.block_count = dd->lba;
-				di->di_stor.block_size = dd->blksz;
-			}
+			found = 1;
+			break;
 		}
+	}
+
+	if (i == specs[type].max_dev)
+		*more = 0;
+	else
+		*more = 1;
 
-	} else
+	if (found) {
+		di->type = specs[type].type;
+
+		dd = (struct blk_desc *)di->cookie;
+		if (dd->type == DEV_TYPE_UNKNOWN) {
+			debugf("device instance exists, but is not active..");
+			found = 0;
+		} else {
+			di->di_stor.block_count = dd->lba;
+			di->di_stor.block_size = dd->blksz;
+		}
+	} else {
 		di->cookie = NULL;
+	}
 
 	return found;
 }
@@ -230,7 +200,7 @@ static int dev_enum_stor(int type, struct device_info *di)
 		 * 1. Enumeration (re-)started: take the first available
 		 * device, if exists
 		 */
-		found = dev_stor_get(type, 1, &more, di);
+		found = dev_stor_get(type, &more, di);
 		specs[type].enum_started = 1;
 
 	} else if (dev_is_stor(type, di)) {
@@ -242,7 +212,7 @@ static int dev_enum_stor(int type, struct device_info *di)
 		}
 
 		/* 2a. Attempt to take a next available device in the group */
-		found = dev_stor_get(type, 0, &more, di);
+		found = dev_stor_get(type, &more, di);
 
 	} else {
 		if (specs[type].enum_ended) {
@@ -266,7 +236,7 @@ static int dev_enum_stor(int type, struct device_info *di)
 			 * Attempt to take the first device in this group:
 			 *'first element' flag is set
 			 */
-			found = dev_stor_get(type, 1, &more, di);
+			found = dev_stor_get(type, &more, di);
 
 		} else {
 			errf("group%d - out of order iteration\n", type);