Index: uspace/lib/fdisk/src/fdisk.c
===================================================================
--- uspace/lib/fdisk/src/fdisk.c	(revision 1b23e33bb2be0b10c8a2eff692e584cd18e05992)
+++ uspace/lib/fdisk/src/fdisk.c	(revision f57ccb5dbdad2edb2def6970e5d20849ccd9daa9)
@@ -912,4 +912,5 @@
 	aoff64_t fnblocks;
 	uint64_t block_size;
+	label_pcnt_t pcnt;
 	unsigned i;
 	int index;
@@ -932,4 +933,27 @@
 	req_blocks = fdisk_ba_align_up(dev, req_blocks);
 
+	pcnt = -1;
+
+	switch (pspec->fstype) {
+	case fdfs_none:
+	case fdfs_unknown:
+		break;
+	case fdfs_exfat:
+		pcnt = lpc_exfat;
+		break;
+	case fdfs_fat:
+		pcnt = lpc_fat32; /* XXX Detect FAT12/16 vs FAT32 */
+		break;
+	case fdfs_minix:
+		pcnt = lpc_minix;
+		break;
+	case fdfs_ext4:
+		pcnt = lpc_ext4;
+		break;
+	}
+
+	if (pcnt < 0)
+		return EINVAL;
+
 	printf("fdisk_part_spec_prepare() - switch\n");
 	switch (pspec->pkind) {
@@ -952,6 +976,4 @@
 		vpspec->nblocks = req_blocks;
 		vpspec->pkind = pspec->pkind;
-		if (pspec->pkind != lpk_extended)
-			vpspec->ptype = 42;
 		break;
 	case lpk_logical:
@@ -967,6 +989,14 @@
 		vpspec->nblocks = req_blocks;
 		vpspec->pkind = lpk_logical;
-		vpspec->ptype = 42;
-		break;
+		vpspec->ptype.fmt = lptf_num;
+		vpspec->ptype.t.num = 42;
+		break;
+	}
+
+	if (pspec->pkind != lpk_extended) {
+		rc = vbd_suggest_ptype(dev->fdisk->vbd, dev->sid, pcnt,
+		    &vpspec->ptype);
+		if (rc != EOK)
+			return EIO;
 	}
 
