diff -Bubwr parted-1.6.22.orig/include/parted/disk.h parted-1.6.22/include/parted/disk.h
--- parted-1.6.22.orig/include/parted/disk.h	2005-01-04 12:09:50.000000000 -0400
+++ parted-1.6.22/include/parted/disk.h	2005-06-22 17:02:03.015491461 -0400
@@ -17,6 +17,11 @@
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+/*
+** Hewlett-Packard Brazil
+** Eduardo Maestri Righes
+*/
+
 #ifndef PED_DISK_H_INCLUDED
 #define PED_DISK_H_INCLUDED
 
@@ -49,10 +54,11 @@
 	PED_PARTITION_LBA=7,
 	PED_PARTITION_HPSERVICE=8,
 	PED_PARTITION_PALO=9,
-	PED_PARTITION_PREP=10
+	PED_PARTITION_PREP=10,
+	PED_PARTITION_MSFT_RESERVED=11
 } PedPartitionFlag;
 #define PED_PARTITION_FIRST_FLAG	PED_PARTITION_BOOT
-#define PED_PARTITION_LAST_FLAG		PED_PARTITION_PREP
+#define PED_PARTITION_LAST_FLAG		PED_PARTITION_MSFT_RESERVED
 
 typedef enum {
 	PED_DISK_TYPE_EXTENDED=1,	/* supports extended partitions */
diff -Bubwr parted-1.6.22.orig/libparted/disk.c parted-1.6.22/libparted/disk.c
--- parted-1.6.22.orig/libparted/disk.c	2005-01-15 18:05:00.000000000 -0400
+++ parted-1.6.22/libparted/disk.c	2005-06-22 17:03:22.456896738 -0400
@@ -17,6 +17,11 @@
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+/*
+** Hewlett-Packard Brazil
+** Eduardo Maestri Righes
+*/
+
 #include "config.h"
 
 #include <parted/parted.h>
@@ -1767,6 +1772,8 @@
 		return N_("palo");
 	case PED_PARTITION_PREP:
 		return N_("prep");
+	case PED_PARTITION_MSFT_RESERVED:
+		return N_("msftres");
 
 	default:
 		ped_exception_throw (
diff -Bubwr parted-1.6.22.orig/libparted/disk_gpt.c parted-1.6.22/libparted/disk_gpt.c
--- parted-1.6.22.orig/libparted/disk_gpt.c	2005-03-13 17:17:51.000000000 -0400
+++ parted-1.6.22/libparted/disk_gpt.c	2005-06-22 16:55:50.000000000 -0400
@@ -25,6 +25,11 @@
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+/*
+** Hewlett-Packard Brazil
+** Eduardo Maestri Righes
+*/
+
 #include "config.h"
 
 #include <parted/parted.h>
@@ -212,6 +217,8 @@
 	int		raid;
 	int		boot;
 	int		hp_service;
+	int		hidden;
+	int		msftres;
 } GPTPartitionData;
 
 static PedDiskType gpt_disk_type;
@@ -514,8 +521,14 @@
 					   (uint16_t) pte->PartitionName[i]);
 	gpt_part_data->name[i] = 0;
 
-	gpt_part_data->lvm = gpt_part_data->raid = gpt_part_data->boot
-		= gpt_part_data->hp_service = 0;
+	gpt_part_data->lvm = gpt_part_data->raid = 
+		gpt_part_data->boot = gpt_part_data->hp_service = 
+			gpt_part_data->hidden = gpt_part_data->msftres = 0;
+
+	
+	if (pte->Attributes.RequiredToFunction & 0x1)
+		gpt_part_data->hidden = 1;
+		
 	if (!guid_cmp (gpt_part_data->type, PARTITION_SYSTEM_GUID))
 		gpt_part_data->boot = 1;
 	else if (!guid_cmp (gpt_part_data->type, PARTITION_RAID_GUID))
@@ -524,6 +537,8 @@
 		gpt_part_data->lvm = 1;
 	else if (!guid_cmp (gpt_part_data->type, PARTITION_HPSERVICE_GUID))
 		gpt_part_data->hp_service = 1;
+	else if (!guid_cmp (gpt_part_data->type, PARTITION_MSFT_RESERVED_GUID))
+		gpt_part_data->msftres = 1;
 
 	return part;
 }
@@ -754,6 +769,9 @@
 	pte->EndingLBA = PED_CPU_TO_LE64(part->geom.end);
 	memset (&pte->Attributes, 0, sizeof (GuidPartitionEntryAttributes_t));
 
+	if (gpt_part_data->hidden)
+		pte->Attributes.RequiredToFunction = 1;
+
 	for (i = 0; i < 72 / sizeof(efi_char16_t); i++)
 		pte->PartitionName[i]
 			= (efi_char16_t) PED_CPU_TO_LE16(
@@ -872,6 +890,8 @@
 	gpt_part_data->raid = 0;
 	gpt_part_data->boot = 0;
 	gpt_part_data->hp_service = 0;
+	gpt_part_data->hidden = 0;
+	gpt_part_data->msftres = 0;
 	uuid_generate ((unsigned char*) &gpt_part_data->uuid);
 	swap_uuid_and_efi_guid((unsigned char*)(&gpt_part_data->uuid));
 	strcpy (gpt_part_data->name, "");
@@ -951,13 +971,19 @@
 		gpt_part_data->type = PARTITION_HPSERVICE_GUID;
 		return 1;
 	}
+	if (gpt_part_data->msftres) {
+		gpt_part_data->type = PARTITION_MSFT_RESERVED_GUID;
+		return 1;
+	}
 
 	if (fs_type) {
+		/*
 		if (strncmp (fs_type->name, "fat", 3) == 0
 		    || strcmp (fs_type->name, "ntfs") == 0) {
 			gpt_part_data->type = PARTITION_MSFT_RESERVED_GUID;
 			return 1;
 		}
+		*/
 		if (strstr (fs_type->name, "swap")) {
 			gpt_part_data->type = PARTITION_SWAP_GUID;
 			return 1;
@@ -1032,30 +1058,48 @@
 	case PED_PARTITION_BOOT:
 		gpt_part_data->boot = state;
 		if (state)
-			gpt_part_data->raid = gpt_part_data->lvm
-				= gpt_part_data->hp_service = 0;
+			gpt_part_data->raid 
+				= gpt_part_data->lvm
+				= gpt_part_data->hp_service 
+				= gpt_part_data->msftres = 0;
 		return gpt_partition_set_system (part, part->fs_type);
 	case PED_PARTITION_RAID:
 		gpt_part_data->raid = state;
 		if (state)
-			gpt_part_data->boot = gpt_part_data->lvm
-				= gpt_part_data->hp_service = 0;
+			gpt_part_data->boot 
+				= gpt_part_data->lvm
+				= gpt_part_data->hp_service 
+				= gpt_part_data->msftres = 0;
 		return gpt_partition_set_system (part, part->fs_type);
 	case PED_PARTITION_LVM:
 		gpt_part_data->lvm = state;
 		if (state)
-			gpt_part_data->boot = gpt_part_data->raid
-				= gpt_part_data->hp_service = 0;
+			gpt_part_data->boot 
+				= gpt_part_data->raid
+				= gpt_part_data->hp_service 
+				= gpt_part_data->msftres = 0;
 		return gpt_partition_set_system (part, part->fs_type);
 	case PED_PARTITION_HPSERVICE:
 		gpt_part_data->hp_service = state;
 		if (state)
-			gpt_part_data->boot = gpt_part_data->raid
-				= gpt_part_data->lvm = 0;
+			gpt_part_data->boot 
+				= gpt_part_data->raid
+				= gpt_part_data->lvm 
+				= gpt_part_data->msftres = 0;
 		return gpt_partition_set_system (part, part->fs_type);
+	case PED_PARTITION_MSFT_RESERVED:
+		gpt_part_data->msftres = state;
+		if (state)
+			gpt_part_data->boot 
+				= gpt_part_data->raid
+				= gpt_part_data->lvm 
+				= gpt_part_data->hp_service = 0;
+		return gpt_partition_set_system (part, part->fs_type);
+	case PED_PARTITION_HIDDEN:
+		gpt_part_data->hidden = state;
+		return 1;
 	case PED_PARTITION_SWAP:
 	case PED_PARTITION_ROOT:
-	case PED_PARTITION_HIDDEN:
 	case PED_PARTITION_LBA:
 	default:
 		return 0;
@@ -1079,10 +1123,13 @@
 		return gpt_part_data->boot;
 	case PED_PARTITION_HPSERVICE:
 		return gpt_part_data->hp_service;
+	case PED_PARTITION_MSFT_RESERVED:
+		return gpt_part_data->msftres;
+	case PED_PARTITION_HIDDEN:
+		return gpt_part_data->hidden;
 	case PED_PARTITION_SWAP:
 	case PED_PARTITION_LBA:
 	case PED_PARTITION_ROOT:
-	case PED_PARTITION_HIDDEN:
 	default:
 		return 0;
 	}
@@ -1098,10 +1145,11 @@
 	case PED_PARTITION_LVM:
 	case PED_PARTITION_BOOT:
 	case PED_PARTITION_HPSERVICE:
+	case PED_PARTITION_MSFT_RESERVED:
+	case PED_PARTITION_HIDDEN:
 		return 1;
 	case PED_PARTITION_SWAP:
 	case PED_PARTITION_ROOT:
-	case PED_PARTITION_HIDDEN:
 	case PED_PARTITION_LBA:
 	default:
 		return 0;
