diff --git a/src/Utils.cc b/src/Utils.cc
index a2941d8..f3a0c95 100644
--- a/src/Utils.cc
+++ b/src/Utils.cc
@@ -177,6 +177,7 @@ Glib::ustring Utils::get_filesystem_software( FILESYSTEM filesystem )
 		case FS_EXT4        : return "e2fsprogs v1.41+" ;
 		case FS_FAT16       : return "dosfstools, mtools" ;
 		case FS_FAT32       : return "dosfstools, mtools" ;
+		case FS_EXFAT	    : return "exfat-utils" ;
 		case FS_HFS         : return "hfsutils" ;
 		case FS_HFSPLUS     : return "hfsprogs" ;
 		case FS_JFS         : return "jfsutils" ;
diff --git a/src/exfat.cc b/src/exfat.cc
index 4b66b6f..93ec2fc 100644
--- a/src/exfat.cc
+++ b/src/exfat.cc
@@ -29,6 +29,9 @@ FS exfat::get_filesystem_support()
 	
 	fs .copy = FS::GPARTED ;
 	fs .move = FS::GPARTED ;
+
+	if ( ! Glib::find_program_in_path( "dumpexfat" ) .empty() )
+		fs .read_uuid = FS::EXTERNAL ;
 	
 	return fs ;
 }
@@ -48,6 +51,23 @@ bool exfat::write_label( const Partition & partition, OperationDetail & operatio
 
 void exfat::read_uuid( Partition & partition )
 {
+	if ( ! Utils::execute_command( "dumpexfat -s " + partition .get_path(), output, error, true ) )
+	{
+		// Convert uuid from hex (0x[0-9a-f]{8}) to MSDOS form ([0-9A-Z]{4}-[0-9A-Z]{4})
+		// E.g.: 0x1f2e3d4c -> 1F2E-3D4C
+		partition .uuid = Utils::regexp_label( output, "^Volume serial number[[:blank:]]+0x([^[:space:]]*)" ) .uppercase() ;
+		if ( ! partition .uuid .empty() )
+			partition .uuid .insert( 4, 1, '-' ) ;
+
+	}
+	else
+	{
+		if ( ! output .empty() )
+			partition .messages .push_back( output ) ;
+
+		if ( ! error .empty() )
+			partition .messages .push_back( error ) ;
+	}
 }
 
 bool exfat::write_uuid( const Partition & partition, OperationDetail & operationdetail )
