Index: uspace/app/hdisk/func_gpt.c
===================================================================
--- uspace/app/hdisk/func_gpt.c	(revision 9bdfde733b74e33fa86aff978323f3d2b2959b33)
+++ uspace/app/hdisk/func_gpt.c	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
@@ -194,4 +194,5 @@
 	
 	char *name;
+	printf("Name the partition: ");
 	rc = get_input_line(in, &name);
 	if (rc != EOK) {
@@ -200,4 +201,5 @@
 	}
 	
+	printf("name: %s, len: %d\n", name, str_size(name));
 	gpt_set_part_name(p, name, str_size(name));
 	
Index: uspace/app/hdisk/hdisk.c
===================================================================
--- uspace/app/hdisk/hdisk.c	(revision 9bdfde733b74e33fa86aff978323f3d2b2959b33)
+++ uspace/app/hdisk/hdisk.c	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
@@ -199,4 +199,5 @@
 			case 'q':
 				putchar('\n');
+				free_label();
 				goto end;
 			case 'r':
Index: uspace/lib/gpt/libgpt.c
===================================================================
--- uspace/lib/gpt/libgpt.c	(revision 9bdfde733b74e33fa86aff978323f3d2b2959b33)
+++ uspace/lib/gpt/libgpt.c	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
@@ -127,14 +127,16 @@
 	rc = block_init(EXCHANGE_ATOMIC, dev_handle, 512);
 	if (rc != EOK)
-		return rc;
+		goto fail;
 	
 	rc = block_get_bsize(dev_handle, &b_size);
 	if (rc != EOK)
-		return rc;
+		goto fini_fail;
 	
 	if (label->gpt == NULL) {
 		label->gpt = gpt_alloc_header(b_size);
-		if (label->gpt == NULL)
-			return ENOMEM;
+		if (label->gpt == NULL) {
+			rc = ENOMEM;
+			goto fini_fail;
+		}
 	}
 	
@@ -144,9 +146,9 @@
 		rc = block_get_nblocks(dev_handle, &n_blocks);
 		if (rc != EOK)
-			goto fail;
+			goto free_fail;
 
 		rc = load_and_check_header(dev_handle, n_blocks - 1, b_size, label->gpt->header);
 		if (rc == EBADCHECKSUM || rc == EINVAL)
-			goto fail;
+			goto free_fail;
 	}
 	
@@ -155,8 +157,10 @@
 	return EOK;
 	
-fail:
-	block_fini(dev_handle);
+free_fail:
 	gpt_free_gpt(label->gpt);
 	label->gpt = NULL;
+fini_fail:
+	block_fini(dev_handle);
+fail:
 	return rc;
 }
@@ -240,4 +244,5 @@
 	 *  - we don't need more bytes
 	 *  - the size of GPT partition entry can be different to 128 bytes */
+	/* comm_size is ignored */
 	rc = block_init(EXCHANGE_SERIALIZE, label->device, sizeof(gpt_entry_t));
 	if (rc != EOK)
@@ -247,5 +252,5 @@
 	rc = block_get_bsize(label->device, &block_size);
 	if (rc != EOK)
-		goto fail;
+		goto fini_fail;
 
 	//size_t bufpos = 0;
@@ -266,5 +271,5 @@
 
 		if (rc != EOK)
-			goto fail;
+			goto fini_fail;
 	}
 
@@ -274,13 +279,18 @@
 	 * on all of the partition entry array.
 	 */
-	uint32_t crc = compute_crc32((uint8_t *) label->parts->part_array, label->parts->fill * sizeof(gpt_entry_t));
+	uint32_t crc = compute_crc32((uint8_t *) label->parts->part_array, 
+	                   label->parts->fill * sizeof(gpt_entry_t));
 
 	if(uint32_t_le2host(label->gpt->header->pe_array_crc32) != crc)
 	{
 		rc = EBADCHECKSUM;
-		goto fail;
-	}
-
+		goto fini_fail;
+	}
+	
+	block_fini(label->device);
 	return EOK;
+	
+fini_fail:
+	block_fini(label->device);
 	
 fail:
Index: uspace/lib/gpt/libgpt.h
===================================================================
--- uspace/lib/gpt/libgpt.h	(revision 9bdfde733b74e33fa86aff978323f3d2b2959b33)
+++ uspace/lib/gpt/libgpt.h	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
@@ -71,5 +71,5 @@
  */
 typedef struct {
-	uint8_t efi_signature[8];
+	uint8_t  efi_signature[8];
 	uint32_t revision;
 	uint32_t header_size;
@@ -80,5 +80,5 @@
 	uint64_t first_usable_lba;
 	uint64_t last_usable_lba;
-	uint8_t disk_guid[16];
+	uint8_t  disk_guid[16];
 	uint64_t entry_lba;
 	uint32_t fillries;
Index: uspace/lib/mbr/libmbr.c
===================================================================
--- uspace/lib/mbr/libmbr.c	(revision 9bdfde733b74e33fa86aff978323f3d2b2959b33)
+++ uspace/lib/mbr/libmbr.c	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
@@ -590,4 +590,5 @@
 	list_foreach_safe(parts->list, cur_link, next) {
 		mbr_part_t *p = list_get_instance(cur_link, mbr_part_t, link);
+		list_remove(cur_link);
 		mbr_free_partition(p);
 	}
