Index: parted-1.8.8/libparted/disk.c
===================================================================
--- parted-1.8.8.orig/libparted/disk.c
+++ parted-1.8.8/libparted/disk.c
@@ -970,6 +970,41 @@ _disk_pop_update_mode (PedDisk* disk)
  * @{
  */
 
+const char*
+ped_partition_get_system_name (const PedPartition* part)
+{
+	PED_ASSERT (part != NULL, return NULL);
+	PED_ASSERT (part->disk != NULL, return 0);
+	PED_ASSERT (ped_partition_is_active (part), return 0);
+
+	if (!ped_disk_type_check_feature (
+			part->disk->type, PED_DISK_TYPE_SYSTEM_NAME))
+		return NULL;	/* silent skip */
+
+	PED_ASSERT (part->disk->type->ops->partition_get_system_name != NULL,
+		    return NULL);
+	return part->disk->type->ops->partition_get_system_name (part);
+}
+
+int
+ped_partition_set_system_name (PedPartition* part, const char* name)
+{
+	PED_ASSERT (part != NULL, return 0);
+	PED_ASSERT (part->disk != NULL, return 0);
+	PED_ASSERT (ped_partition_is_active (part), return 0);
+	PED_ASSERT (name != NULL, return 0);
+
+	if (!ped_disk_type_check_feature (
+			part->disk->type, PED_DISK_TYPE_SYSTEM_NAME))
+		return 0;	/* silent skip */
+
+	PED_ASSERT (part->disk->type->ops->partition_set_system_name != NULL,
+		    return 0);
+	part->disk->type->ops->partition_set_system_name (part, name);
+	return 1;
+}
+
+
 PedPartition*
 _ped_partition_alloc (const PedDisk* disk, PedPartitionType type,
 		      const PedFileSystemType* fs_type,
Index: parted-1.8.8/libparted/labels/mac.c
===================================================================
--- parted-1.8.8.orig/libparted/labels/mac.c
+++ parted-1.8.8/libparted/labels/mac.c
@@ -1370,6 +1370,36 @@ mac_partition_get_name (const PedPartiti
 	return mac_data->volume_name;
 }
 
+/* we do not really want to call this ... yet */
+static void
+mac_partition_set_system_name (PedPartition* part, const char* name)
+{
+	MacPartitionData*	mac_data;
+	int			i;
+
+	PED_ASSERT (part != NULL, return);
+	PED_ASSERT (part->disk_specific != NULL, return);
+	mac_data = part->disk_specific;
+
+	strncpy (mac_data->system_name, name, 32);
+	mac_data->system_name [32] = 0;
+	for (i = strlen (mac_data->system_name) - 1;
+			mac_data->system_name[i] == ' '; i--)
+		mac_data->system_name [i] = 0;
+}
+
+static const char*
+mac_partition_get_system_name (const PedPartition* part)
+{
+	MacPartitionData*	mac_data;
+
+	PED_ASSERT (part != NULL, return NULL);
+	PED_ASSERT (part->disk_specific != NULL, return NULL);
+	mac_data = part->disk_specific;
+
+	return mac_data->system_name;
+}
+
 static PedConstraint*
 _primary_constraint (PedDisk* disk)
 {
@@ -1587,6 +1617,8 @@ static PedDiskOps mac_disk_ops = {
 	partition_is_flag_available:	mac_partition_is_flag_available,
 	partition_set_name:	mac_partition_set_name,
 	partition_get_name:	mac_partition_get_name,
+	partition_set_system_name:	mac_partition_set_system_name,
+	partition_get_system_name:	mac_partition_get_system_name,
 	partition_align:	mac_partition_align,
 	partition_enumerate:	mac_partition_enumerate,
 
@@ -1599,7 +1631,7 @@ static PedDiskType mac_disk_type = {
 	next:		NULL,
 	name:		"mac",
 	ops:		&mac_disk_ops,
-	features:	PED_DISK_TYPE_PARTITION_NAME
+	features:	PED_DISK_TYPE_PARTITION_NAME | PED_DISK_TYPE_SYSTEM_NAME
 };
 
 void
Index: parted-1.8.8/include/parted/disk.h
===================================================================
--- parted-1.8.8.orig/include/parted/disk.h
+++ parted-1.8.8/include/parted/disk.h
@@ -60,10 +60,11 @@ enum _PedPartitionFlag {
 
 enum _PedDiskTypeFeature {
         PED_DISK_TYPE_EXTENDED=1,       /**< supports extended partitions */
-        PED_DISK_TYPE_PARTITION_NAME=2  /**< supports partition names */
+        PED_DISK_TYPE_PARTITION_NAME=2, /**< supports partition names */
+        PED_DISK_TYPE_SYSTEM_NAME=4     /**< supports system names */
 };
 #define PED_DISK_TYPE_FIRST_FEATURE    PED_DISK_TYPE_EXTENDED
-#define PED_DISK_TYPE_LAST_FEATURE     PED_DISK_TYPE_PARTITION_NAME
+#define PED_DISK_TYPE_LAST_FEATURE     PED_DISK_TYPE_SYSTEM_NAME
 
 struct _PedDisk;
 struct _PedPartition;
@@ -210,6 +211,9 @@ struct _PedDiskOps {
         /* other */
         int (*alloc_metadata) (PedDisk* disk);
         int (*get_max_primary_partition_count) (const PedDisk* disk);
+
+	void (*partition_set_system_name) (PedPartition* part, const char* name);
+	const char* (*partition_get_system_name) (const PedPartition* part);
 };
 
 struct _PedDiskType {
@@ -294,7 +298,9 @@ extern int ped_partition_is_flag_availab
 extern int ped_partition_set_system (PedPartition* part,
                                      const PedFileSystemType* fs_type);
 extern int ped_partition_set_name (PedPartition* part, const char* name);
+extern int ped_partition_set_system_name (PedPartition* part, const char* name);
 extern const char* ped_partition_get_name (const PedPartition* part);
+extern const char* ped_partition_get_system_name (const PedPartition* part);
 extern int ped_partition_is_busy (const PedPartition* part);
 extern char* ped_partition_get_path (const PedPartition* part);
 
Index: parted-1.8.8/parted/parted.c
===================================================================
--- parted-1.8.8.orig/parted/parted.c
+++ parted-1.8.8/parted/parted.c
@@ -1160,6 +1160,7 @@ partition_print_flags (PedPartition* par
         const char*             name;
         char*                   res = ped_malloc(1); 
         void*                   _res = res;
+	const char*             sysname;
 
         *res = '\0';
 
@@ -1197,6 +1198,23 @@ partition_print_flags (PedPartition* par
                 }
         }
 
+	sysname = ped_partition_get_system_name( part );
+	if (sysname) {
+		if (first_flag)
+			first_flag = 0;
+		else {
+			_res = res;
+			ped_realloc (&_res, strlen (res)
+						   + 1 + 2);
+			res = _res;
+			strncat (res, ", ", 2);
+		}
+		_res = res;
+		ped_realloc (&_res, strlen (res) + 6 + strlen(sysname));
+		res = _res;
+		strcat (res, "type=");
+		strcat (res, sysname);
+	}
         return res;
 }
 
