Index: uspace/lib/label/include/types/liblabel.h
===================================================================
--- uspace/lib/label/include/types/liblabel.h	(revision 1626cd4d3269f272038f96a6fa17c3536f1b084c)
+++ uspace/lib/label/include/types/liblabel.h	(revision 6bc542bfcd4de3d747e25cc6e0894f9581445ca1)
@@ -98,4 +98,12 @@
 /** Specification of new partition */
 struct label_part_spec {
+	/** Partition index */
+	int index;
+	/** First block */
+	aoff64_t block0;
+	/** Number of blocks */
+	aoff64_t nblocks;
+	/** Partition type */
+	uint64_t ptype;
 };
 
Index: uspace/lib/label/src/gpt.c
===================================================================
--- uspace/lib/label/src/gpt.c	(revision 1626cd4d3269f272038f96a6fa17c3536f1b084c)
+++ uspace/lib/label/src/gpt.c	(revision 6bc542bfcd4de3d747e25cc6e0894f9581445ca1)
@@ -242,5 +242,23 @@
     label_part_t **rpart)
 {
-	return ENOTSUP;
+	label_part_t *part;
+
+	part = calloc(1, sizeof(label_part_t));
+	if (part == NULL)
+		return ENOMEM;
+
+	/* XXX Verify index, block0, nblocks */
+
+	part->index = pspec->index;
+	part->block0 = pspec->block0;
+	part->nblocks = pspec->nblocks;
+
+	/* XXX Modify partition table */
+
+	part->label = label;
+	list_append(&part->llabel, &label->parts);
+
+	*rpart = part;
+	return EOK;
 }
 
Index: uspace/lib/label/src/mbr.c
===================================================================
--- uspace/lib/label/src/mbr.c	(revision 1626cd4d3269f272038f96a6fa17c3536f1b084c)
+++ uspace/lib/label/src/mbr.c	(revision 6bc542bfcd4de3d747e25cc6e0894f9581445ca1)
@@ -206,5 +206,18 @@
     label_part_t **rpart)
 {
-	return ENOTSUP;
+	label_part_t *part;
+
+	part = calloc(1, sizeof(label_part_t));
+	if (part == NULL)
+		return ENOMEM;
+
+	part->index = pspec->index;
+	part->block0 = pspec->block0;
+	part->nblocks = pspec->nblocks;
+
+	part->label = label;
+
+	*rpart = part;
+	return EOK;
 }
 
