Index: uspace/app/bdsh/cmds/modules/sleep/sleep.c
===================================================================
--- uspace/app/bdsh/cmds/modules/sleep/sleep.c	(revision 3d367ee2290872c30febcff04cfb60fbc41d7e1f)
+++ uspace/app/bdsh/cmds/modules/sleep/sleep.c	(revision e4fbccd271f2e38e9a11f4feff3d28b549716a1f)
@@ -49,9 +49,62 @@
 		printf(
 		"Usage:  %s <duration>\n"
-		"The duration is an integer number of seconds.\n",
+		"The duration is a decimal number of seconds.\n",
 		cmdname);
 	}
 
 	return;
+}
+
+/** Convert string containing decimal seconds to useconds_t.
+ *
+ * @param nptr   Pointer to string.
+ * @param result Result of the conversion.
+ * @return EOK if conversion was successful.
+ */
+static int str_useconds_t(const char *nptr, useconds_t *result)
+{
+	int ret;
+	uint64_t whole_seconds;
+	uint64_t frac_seconds;
+	char *endptr;
+
+	/* Check for whole seconds */
+	if (*nptr == '.') {
+		whole_seconds = 0;
+		endptr = (char *)nptr;
+	} else {
+		ret = str_uint64_t(nptr, &endptr, 10, false, &whole_seconds);
+		if (ret != EOK)
+			return ret;
+	}
+
+	/* Check for fractional seconds */
+	if (*endptr == '\0') {
+		frac_seconds = 0;
+	} else if (*endptr == '.' && endptr[1] == '\0') {
+		frac_seconds = 0;
+	} else if (*endptr == '.') {
+		nptr = endptr + 1;
+		ret = str_uint64_t(nptr, &endptr, 10, true, &frac_seconds);
+		if (ret != EOK)
+			return ret;
+
+		int ndigits = endptr - nptr;
+		for (; ndigits < 6; ndigits++) 
+			frac_seconds *= 10;
+		for (; ndigits > 6; ndigits--)
+			frac_seconds /= 10;
+	} else {
+		return EINVAL;
+	}
+
+	/* Check for overflow */
+	useconds_t total = whole_seconds * 1000000 + frac_seconds;
+	if (total / 1000000 != whole_seconds)
+		return EOVERFLOW;
+
+	*result = total;
+
+	return EOK;
 }
 
@@ -61,5 +114,5 @@
 	int ret;
 	unsigned int argc;
-	uint32_t duration;
+	useconds_t duration;
 
 	/* Count the arguments */
@@ -68,9 +121,9 @@
 	if (argc != 2) {
 		printf("%s - incorrect number of arguments. Try `help %s'\n",
-			cmdname, cmdname);
+		    cmdname, cmdname);
 		return CMD_FAILURE;
 	}
 
-	ret = str_uint32_t(argv[1], NULL, 10, true, &duration);
+	ret = str_useconds_t(argv[1], &duration);
 	if (ret != EOK) {
 		printf("%s - invalid duration.\n", cmdname);
@@ -78,5 +131,5 @@
 	}
 
-	(void) usleep((useconds_t)duration * 1000000);
+	(void) usleep(duration);
 
 	return CMD_SUCCESS;
Index: uspace/app/bdsh/cmds/modules/sleep/sleep.h
===================================================================
--- uspace/app/bdsh/cmds/modules/sleep/sleep.h	(revision 3d367ee2290872c30febcff04cfb60fbc41d7e1f)
+++ uspace/app/bdsh/cmds/modules/sleep/sleep.h	(revision e4fbccd271f2e38e9a11f4feff3d28b549716a1f)
@@ -4,4 +4,5 @@
 /* Prototypes for the sleep command, excluding entry points */
 
+static int str_useconds_t(const char *nptr, useconds_t *result);
 
 #endif /* SLEEP_H */
