Index: uspace/app/fdisk/fdisk.c
===================================================================
--- uspace/app/fdisk/fdisk.c	(revision 8227d634855cabb163487dd2efe9a1b301377b9d)
+++ uspace/app/fdisk/fdisk.c	(revision 28ed0d952e53138af66cace5b8439cbfaeda61ca)
@@ -43,4 +43,5 @@
 
 static bool quit = false;
+static fdisk_t *fdisk;
 
 /** Device menu actions */
@@ -88,5 +89,5 @@
 	}
 
-	rc = fdisk_dev_list_get(&devlist);
+	rc = fdisk_dev_list_get(fdisk, &devlist);
 	if (rc != EOK) {
 		printf("Error getting device list.\n");
@@ -207,5 +208,5 @@
 	}
 
-	for (i = FDL_CREATE_LO; i < FDL_CREATE_HI; i++) {
+	for (i = 0; i < LT_LIMIT; i++) {
 		rc = fdisk_ltype_format(i, &sltype);
 		if (rc != EOK)
@@ -229,5 +230,5 @@
 	}
 
-	rc = fdisk_label_create(dev, (fdisk_label_type_t)sel);
+	rc = fdisk_label_create(dev, (label_type_t)sel);
 	if (rc != EOK) {
 		printf("Error creating label.\n");
@@ -505,23 +506,37 @@
 	}
 
-	rc = fdisk_label_get_info(dev, &linfo);
-	if (rc != EOK) {
-		printf("Error getting label information.\n");
-		goto error;
-	}
-
-	rc = fdisk_ltype_format(linfo.ltype, &sltype);
-	if (rc != EOK) {
-		assert(rc == ENOMEM);
-		printf("Out of memory.\n");
-		goto error;
-	}
-
 	printf("Device: %s, %s\n", sdcap, svcname);
-	printf("Label type: %s\n", sltype);
-	free(sltype);
-	sltype = NULL;
 	free(sdcap);
 	sdcap = NULL;
+
+	rc = fdisk_label_get_info(dev, &linfo);
+	if (rc != EOK) {
+		printf("Error getting label information.\n");
+		goto error;
+	}
+
+	switch (linfo.dcnt) {
+	case dc_empty:
+		printf("Disk is empty.\n");
+		break;
+	case dc_label:
+		rc = fdisk_ltype_format(linfo.ltype, &sltype);
+		if (rc != EOK) {
+			assert(rc == ENOMEM);
+			printf("Out of memory.\n");
+			goto error;
+		}
+
+		printf("Label type: %s\n", sltype);
+		free(sltype);
+		sltype = NULL;
+		break;
+	case dc_fs:
+		printf("Disk contains a file system.\n");
+		break;
+	case dc_unknown:
+		printf("Disk contains unknown data.\n");
+		break;
+	}
 
 	part = fdisk_part_first(dev);
@@ -563,5 +578,5 @@
 	}
 
-	if (linfo.ltype != fdl_none) {
+	if (linfo.dcnt == dc_label) {
 		rc = nchoice_add(choice, "Create partition",
 		    (void *)devac_create_part);
@@ -583,5 +598,5 @@
 	}
 
-	if (linfo.ltype == fdl_none) {
+	if (linfo.dcnt == dc_empty) {
 		rc = nchoice_add(choice, "Create label",
 		    (void *)devac_create_label);
@@ -616,22 +631,14 @@
 	switch ((devac_t)sel) {
 	case devac_create_label:
-		rc = fdsk_create_label(dev);
-		if (rc != EOK)
-			goto error;
+		(void) fdsk_create_label(dev);
 		break;
 	case devac_delete_label:
-		rc = fdsk_delete_label(dev);
-		if (rc != EOK)
-			goto error;
+		(void) fdsk_delete_label(dev);
 		break;
 	case devac_create_part:
-		rc = fdsk_create_part(dev);
-		if (rc != EOK)
-			goto error;
+		(void) fdsk_create_part(dev);
 		break;
 	case devac_delete_part:
-		rc = fdsk_delete_part(dev);
-		if (rc != EOK)
-			goto error;
+		(void) fdsk_delete_part(dev);
 		break;
 	case devac_exit:
@@ -658,4 +665,10 @@
 	int rc;
 
+	rc = fdisk_create(&fdisk);
+	if (rc != EOK) {
+		printf("Error initializing Fdisk.\n");
+		return 1;
+	}
+
 	rc = fdsk_dev_sel_choice(&svcid);
 	if (rc != EOK)
@@ -665,5 +678,5 @@
 		return 0;
 
-	rc = fdisk_dev_open(svcid, &dev);
+	rc = fdisk_dev_open(fdisk, svcid, &dev);
 	if (rc != EOK) {
 		printf("Error opening device.\n");
@@ -680,4 +693,5 @@
 
 	fdisk_dev_close(dev);
+	fdisk_destroy(fdisk);
 
 	return 0;
