Index: uspace/app/hdisk/func_gpt.c
===================================================================
--- uspace/app/hdisk/func_gpt.c	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
+++ uspace/app/hdisk/func_gpt.c	(revision c3cbbb2a143977e56be842336794a3a84e70279d)
@@ -44,5 +44,4 @@
 static int set_gpt_partition(tinput_t *, gpt_part_t *);
 
-
 int construct_gpt_label(label_t *this)
 {
@@ -50,11 +49,12 @@
 	this->alignment = 1;
 	
-	this->add_part    = add_gpt_part;
-	this->delete_part = delete_gpt_part;
-	this->new_label   = new_gpt_label;
-	this->print_parts = print_gpt_parts;
-	this->read_parts  = read_gpt_parts;
-	this->write_parts = write_gpt_parts;
-	this->extra_funcs = extra_gpt_funcs;
+	this->add_part      = add_gpt_part;
+	this->delete_part   = delete_gpt_part;
+	this->destroy_label = destroy_gpt_label;
+	this->new_label     = new_gpt_label;
+	this->print_parts   = print_gpt_parts;
+	this->read_parts    = read_gpt_parts;
+	this->write_parts   = write_gpt_parts;
+	this->extra_funcs   = extra_gpt_funcs;
 	
 	return this->new_label(this);
@@ -110,5 +110,5 @@
 	gpt_part_foreach(this->data.gpt, iter) {
 		i++;
-		//FIXMEE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+		
 		if (gpt_get_part_type(iter) == GPT_PTE_UNUSED)
 			continue;
@@ -122,4 +122,5 @@
 				gpt_get_end_lba(iter) - gpt_get_start_lba(iter), gpt_get_part_type(iter),
 				gpt_get_part_name(iter));
+		
 	}
 	
@@ -192,4 +193,10 @@
 	gpt_set_end_lba(p, ea);
 	
+	//printf("Set type : ");
+	//size_t idx = get_input_size_t(in);
+	//gpt_set_part_type(p, idx);
+	
+	gpt_set_random_uuid(p->part_type);
+	gpt_set_random_uuid(p->part_id);
 	
 	char *name;
@@ -201,5 +208,4 @@
 	}
 	
-	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 8559fa01aadb8afd5916639839e6a4f1084858a6)
+++ uspace/app/hdisk/hdisk.c	(revision c3cbbb2a143977e56be842336794a3a84e70279d)
@@ -144,6 +144,4 @@
 	rc = interact(dev_handle);
 	
-	free_label();
-	
 	return rc;
 }
Index: uspace/lib/gpt/libgpt.c
===================================================================
--- uspace/lib/gpt/libgpt.c	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
+++ uspace/lib/gpt/libgpt.c	(revision c3cbbb2a143977e56be842336794a3a84e70279d)
@@ -230,10 +230,10 @@
 	int rc;
 	unsigned int i;
-	uint32_t fill = uint32_t_le2host(label->gpt->header->fillries);
+	uint32_t fillries = uint32_t_le2host(label->gpt->header->fillries);
 	uint32_t ent_size = uint32_t_le2host(label->gpt->header->entry_size);
 	uint64_t ent_lba = uint64_t_le2host(label->gpt->header->entry_lba);
 	
 	if (label->parts == NULL) {
-		label->parts = alloc_part_array(fill);
+		label->parts = alloc_part_array(fillries);
 		if (label->parts == NULL) {
 			return ENOMEM;
@@ -263,5 +263,5 @@
 	 * will always read just sizeof(gpt_entry_t) bytes - hopefully they
 	 * don't break backward compatibility) */
-	for (i = 0; i < fill; ++i) {
+	for (i = 0; i < fillries; ++i) {
 		//FIXME: this does bypass cache...
 		rc = block_read_bytes_direct(label->device, pos, sizeof(gpt_entry_t), label->parts->part_array + i);
@@ -280,5 +280,5 @@
 	 */
 	uint32_t crc = compute_crc32((uint8_t *) label->parts->part_array, 
-	                   label->parts->fill * sizeof(gpt_entry_t));
+	                   fillries * sizeof(gpt_entry_t));
 
 	if(uint32_t_le2host(label->gpt->header->pe_array_crc32) != crc)
@@ -312,9 +312,10 @@
 	size_t b_size;
 	uint32_t e_size = uint32_t_le2host(label->gpt->header->entry_size);
-	size_t fill = label->parts->fill > GPT_MIN_PART_NUM ? label->parts->fill : GPT_MIN_PART_NUM;
-	
-	label->gpt->header->pe_array_crc32 = compute_crc32(
+	size_t fillries = label->parts->fill > GPT_MIN_PART_NUM ? label->parts->fill : GPT_MIN_PART_NUM;
+	
+	label->gpt->header->fillries = host2uint32_t_le(fillries);
+	label->gpt->header->pe_array_crc32 = host2uint32_t_le(compute_crc32(
 	                               (uint8_t *) label->parts->part_array,
-	                               fill * e_size);
+	                               fillries * e_size));
 	
 	/* comm_size of 4096 is ignored */
@@ -339,6 +340,6 @@
 	/* Write to main GPT partition array location */
 	rc = block_write_direct(dev_handle, uint64_t_le2host(label->gpt->header->entry_lba),
-			nearest_larger_int((uint64_t_le2host(label->gpt->header->entry_size) * label->parts->fill) / b_size),
-			label->parts->part_array);
+	         nearest_larger_int((uint64_t_le2host(label->gpt->header->entry_size) * fillries) / b_size),
+	         label->parts->part_array);
 	if (rc != EOK)
 		goto fail;
@@ -385,4 +386,5 @@
 {
 	gpt_part_t *p;
+	
 	
 	/* Find the first empty entry */
@@ -482,5 +484,5 @@
 	memset(label->parts->part_array + idx, 0, sizeof(gpt_entry_t));
 	
-	label->parts->fill -= 1;
+	label->parts->fill = idx;
 	
 	/* FIXME! HOPEFULLY FIXED.
@@ -633,4 +635,14 @@
 }
 
+void gpt_set_random_uuid(uint8_t * uuid)
+{
+	srandom((unsigned int) uuid);
+	
+	unsigned int i;
+	for (i = 0; i < 16/sizeof(long int); ++i)
+		((long int *)uuid)[i] = random();
+	
+}
+
 // Internal functions follow //
 
@@ -683,6 +695,6 @@
 	}
 
-	res->fill = num;
-	res->arr_size = size;
+	res->fill = 0;
+	res->arr_size = num;
 
 	return res;
@@ -691,5 +703,5 @@
 static int extend_part_array(gpt_partitions_t * p)
 {
-	unsigned int nsize = p->arr_size * 2;
+	size_t nsize = p->arr_size * 2;
 	gpt_entry_t * tmp = malloc(nsize * sizeof(gpt_entry_t));
 	if(tmp == NULL) {
@@ -697,6 +709,6 @@
 		return -1;
 	}
-
-	memcpy(tmp, p->part_array, p->fill);
+	
+	memcpy(tmp, p->part_array, p->fill * sizeof(gpt_entry_t));
 	free(p->part_array);
 	p->part_array = tmp;
Index: uspace/lib/gpt/libgpt.h
===================================================================
--- uspace/lib/gpt/libgpt.h	(revision 8559fa01aadb8afd5916639839e6a4f1084858a6)
+++ uspace/lib/gpt/libgpt.h	(revision c3cbbb2a143977e56be842336794a3a84e70279d)
@@ -167,9 +167,10 @@
 extern void            gpt_set_flag     (gpt_part_t *, GPT_ATTR, bool);
 
+extern void            gpt_set_random_uuid(uint8_t *);
 
 
 #define gpt_part_foreach(label, iterator) \
 		for(gpt_part_t * iterator = (label)->parts->part_array; \
-		    iterator < (label)->parts->part_array + (label)->parts->fill; ++iterator)
+		    iterator < (label)->parts->part_array + (label)->parts->arr_size; ++iterator)
 
 extern void gpt_free_gpt(gpt_t *);
