Index: uspace/lib/label/src/label.c
===================================================================
--- uspace/lib/label/src/label.c	(revision 28ed0d952e53138af66cace5b8439cbfaeda61ca)
+++ uspace/lib/label/src/label.c	(revision 78d50bd06d1f1eb12182cb42a78d0182b9256f3d)
@@ -34,4 +34,5 @@
  */
 
+#include <adt/list.h>
 #include <errno.h>
 #include <label.h>
@@ -47,4 +48,5 @@
 		return ENOMEM;
 
+	list_initialize(&label->parts);
 	*rlabel = label;
 	return EOK;
@@ -59,4 +61,5 @@
 		return ENOMEM;
 
+	list_initialize(&label->parts);
 	*rlabel = label;
 	return EOK;
@@ -65,4 +68,7 @@
 void label_close(label_t *label)
 {
+	if (label == NULL)
+		return;
+
 	free(label);
 }
@@ -83,21 +89,49 @@
 label_part_t *label_part_first(label_t *label)
 {
-	return NULL;
+	link_t *link;
+
+	link = list_first(&label->parts);
+	if (link == NULL)
+		return NULL;
+
+	return list_get_instance(link, label_part_t, llabel);
 }
 
-label_part_t *label_part_next(label_part_t *oart)
+label_part_t *label_part_next(label_part_t *part)
 {
-	return NULL;
+	link_t *link;
+
+	link = list_next(&part->llabel, &part->label->parts);
+	if (link == NULL)
+		return NULL;
+
+	return list_get_instance(link, label_part_t, llabel);
 }
 
+void label_part_get_info(label_part_t *part, label_part_info_t *pinfo)
+{
+	pinfo->block0 = 0;
+	pinfo->nblocks = 0;
+}
 
 int label_part_create(label_t *label, label_part_spec_t *pspec,
     label_part_t **rpart)
 {
-	return ENOTSUP;
+	label_part_t *part;
+
+	part = calloc(1, sizeof(label_part_t));
+	if (part == NULL)
+		return ENOMEM;
+
+	part->label = label;
+	list_append(&part->llabel, &label->parts);
+	*rpart = part;
+	return EOK;
 }
 
 int label_part_destroy(label_part_t *part)
 {
+	list_remove(&part->llabel);
+	free(part);
 	return EOK;
 }
