Index: uspace/app/fdisk/fdisk.c
===================================================================
--- uspace/app/fdisk/fdisk.c	(revision edebb4a154d7503a1a506cd53ce84ae086f387d6)
+++ uspace/app/fdisk/fdisk.c	(revision ea0ff6b69b253afa7b6b4e9cd38ef8e91ec0daab)
@@ -51,4 +51,6 @@
 	/** Delete label */
 	devac_delete_label,
+	/** Erase disk */
+	devac_erase_disk,
 	/** Create (primary) partition */
 	devac_create_pri_part,
@@ -262,4 +264,17 @@
 }
 
+static int fdsk_erase_disk(fdisk_dev_t *dev)
+{
+	int rc;
+
+	rc = fdisk_dev_erase(dev);
+	if (rc != EOK) {
+		printf("Error erasing disk.\n");
+		return rc;
+	}
+
+	return EOK;
+}
+
 static int fdsk_select_fstype(vol_fstype_t *fstype)
 {
@@ -473,4 +488,5 @@
 	fdisk_part_info_t pinfo;
 	fdisk_cap_t cap;
+	fdisk_dev_flags_t dflags;
 	char *sltype = NULL;
 	char *sdcap = NULL;
@@ -514,4 +530,6 @@
 		goto error;
 	}
+
+	fdisk_dev_get_flags(dev, &dflags);
 
 	printf("Device: %s, %s\n", sdcap, svcname);
@@ -667,5 +685,5 @@
 	}
 
-	if (linfo.ltype == lt_none) {
+	if ((dflags & fdf_can_create_label) != 0) {
 		rc = nchoice_add(choice, "Create label",
 		    (void *)devac_create_label);
@@ -675,7 +693,19 @@
 			goto error;
 		}
-	} else {
+	}
+
+	if ((dflags & fdf_can_delete_label) != 0) {
 		rc = nchoice_add(choice, "Delete label",
 		    (void *)devac_delete_label);
+		if (rc != EOK) {
+			assert(rc == ENOMEM);
+			printf("Out of memory.\n");
+			goto error;
+		}
+	}
+
+	if ((dflags & fdf_can_erase_dev) != 0) {
+		rc = nchoice_add(choice, "Erase disk",
+		    (void *)devac_erase_disk);
 		if (rc != EOK) {
 			assert(rc == ENOMEM);
@@ -704,4 +734,7 @@
 	case devac_delete_label:
 		(void) fdsk_delete_label(dev);
+		break;
+	case devac_erase_disk:
+		(void) fdsk_erase_disk(dev);
 		break;
 	case devac_create_pri_part:
