diff --git a/include/GParted_Core.h b/include/GParted_Core.h
index 968bdf6..d63964e 100644
--- a/include/GParted_Core.h
+++ b/include/GParted_Core.h
@@ -62,6 +62,7 @@ public:
 	Glib::ustring get_thread_status_message() ;
 
 	FileSystem * get_filesystem_object( const FILESYSTEM & filesystem ) ;
+	static bool filesystem_resize_disallowed( const Partition & partition ) ;
 private:
 	//detectionstuff..
 	void init_maps() ;
@@ -130,7 +131,7 @@ private:
 				const Partition & partition_new,
 				OperationDetail & operationdetail,
 				bool fill_partition = false ) ;
-	bool maximize_filesystem( const Partition & partition, OperationDetail & operationdetail ) ;
+	bool maximize_filesystem( const Partition & partition, OperationDetail & operationdetail, bool required = true ) ;
 				
 	bool copy( const Partition & partition_src,
 		   Partition & partition_dst,
diff --git a/include/Utils.h b/include/Utils.h
index d91aae2..deb7729 100644
--- a/include/Utils.h
+++ b/include/Utils.h
@@ -100,6 +100,7 @@ enum CUSTOM_TEXT
 	CTEXT_ACTIVATE_FILESYSTEM,		// Activate text ('Mount', 'Swapon', VG 'Activate', ...)
 	CTEXT_DEACTIVATE_FILESYSTEM,		// Deactivate text ('Unmount', 'Swapoff', VG 'Deactivate', ...)
 	CTEXT_CHANGE_UUID_WARNING,		// Warning to print when changing UUIDs
+	CTEXT_RESIZE_DISALLOWED_WARNING		// File system resize disallowed warning
 } ;
 
 //struct to store file system information
diff --git a/src/Dialog_Partition_Resize_Move.cc b/src/Dialog_Partition_Resize_Move.cc
index b88c53e..94c2946 100644
--- a/src/Dialog_Partition_Resize_Move.cc
+++ b/src/Dialog_Partition_Resize_Move.cc
@@ -17,6 +17,7 @@
  */
  
 #include "../include/Dialog_Partition_Resize_Move.h"
+#include "../include/GParted_Core.h"
 
 namespace GParted
 {
@@ -68,6 +69,14 @@ void Dialog_Partition_Resize_Move::Resize_Move_Normal( const std::vector<Partiti
 	     selected_partition .filesystem != FS_LINUX_SWAP )
 		fs .shrink = GParted::FS::NONE ;
 	
+	//Disable resizing as it's currently disallowed for the file system in this partition
+	//  (Updates this class's copy of file system support information, struct FS fs).
+	if ( GParted_Core::filesystem_resize_disallowed( selected_partition ) )
+	{
+		fs .shrink = FS::NONE ;
+		fs .grow   = FS::NONE ;
+	}
+
 	//see if we need a fixed_start
 	if ( fs .move )
 	{
diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc
index a3d0bb9..9ef31b2 100644
--- a/src/GParted_Core.cc
+++ b/src/GParted_Core.cc
@@ -660,7 +660,8 @@ bool GParted_Core::apply_operation_to_disk( Operation * operation )
 				break ;
 			case OPERATION_CHECK:
 				succes = check_repair_filesystem( operation ->partition_original, operation ->operation_detail ) &&
-					 maximize_filesystem( operation ->partition_original, operation ->operation_detail ) ;
+				         maximize_filesystem( operation ->partition_original,
+				                              operation ->operation_detail, false ) ;
 				break ;
 			case OPERATION_CREATE:
 				succes = create( operation ->device, 
@@ -670,6 +671,14 @@ bool GParted_Core::apply_operation_to_disk( Operation * operation )
 			case OPERATION_RESIZE_MOVE:
 				//in case the to be resized/moved partition was a 'copy of..', we need a real path...
 				operation ->partition_new .add_path( operation ->partition_original .get_path(), true ) ;
+				//FIXME: [BEFORE SUBMITTING PATCH]
+				//  Decide whether to add filesystem_resize_disabled() checks into resize_move(),
+				//  or the functions it calls, to report that file system resizing is disabled.
+				//  The need for resizing would have to be checked up front, which the code doesn't
+				//  do as it just discovers the need as it goes, otherwise you could be half way
+				//  through the operation to discover resizing isn't allowed.  This is just the
+				//  same as a failure to resize.  Half applied operation.  Alternatively just rely
+				//  on resizing being disabled in the Move/Resize dialog.
 				succes = resize_move( operation ->device,
 					       	      operation ->partition_original,
 						      operation ->partition_new,
@@ -1588,6 +1597,17 @@ void GParted_Core::set_used_sectors( std::vector<Partition> & partitions )
 					}
 					partitions[ t ] .messages .push_back( temp ) ;
 				}
+
+				//FIXME: [BEFORE SUBMITTING PATCH]
+				//  Optionally call filesystem_resize_disallowed() to suppress displaying of
+				//  the message "To grow the file system ..." above when resizing is disabled.
+				if ( filesystem_resize_disallowed( partitions[ t ] ) )
+				{
+					Glib::ustring temp = get_filesystem_object( partitions[ t ] .filesystem )
+					                     ->get_custom_text( CTEXT_RESIZE_DISALLOWED_WARNING ) ;
+					if ( ! temp .empty() )
+						partitions[ t ] .messages .push_back( temp ) ;
+				}
 			}
 			else if ( partitions[ t ] .type == GParted::TYPE_EXTENDED )
 				set_used_sectors( partitions[ t ] .logicals ) ;
@@ -2469,8 +2489,8 @@ bool GParted_Core::resize_filesystem( const Partition & partition_old,
 	operationdetail .get_last_child() .set_status( succes ? STATUS_SUCCES : STATUS_ERROR ) ;
 	return succes ;
 }
-	
-bool GParted_Core::maximize_filesystem( const Partition & partition, OperationDetail & operationdetail ) 
+
+bool GParted_Core::maximize_filesystem( const Partition & partition, OperationDetail & operationdetail, bool required ) 
 {
 	operationdetail .add_child( OperationDetail( _("grow file system to fill the partition") ) ) ;
 
@@ -2484,7 +2504,28 @@ bool GParted_Core::maximize_filesystem( const Partition & partition, OperationDe
 		operationdetail .get_last_child() .set_status( STATUS_N_A ) ;
 		return true ;
 	}
-	
+	else if ( filesystem_resize_disallowed( partition ) )
+	{
+
+		Glib::ustring tmp_msg = _("growing the file system is currently disallowed") ;
+		Glib::ustring custom_msg = get_filesystem_object( partition .filesystem )
+		                           ->get_custom_text( CTEXT_RESIZE_DISALLOWED_WARNING ) ;
+		if ( ! custom_msg .empty() )
+		{
+			tmp_msg += "\n" ;
+			tmp_msg += custom_msg ;
+		}
+		operationdetail .get_last_child() .add_child(
+			OperationDetail( tmp_msg, STATUS_NONE, FONT_ITALIC ) ) ;
+		if ( required )
+		{
+			operationdetail .get_last_child() .set_status( STATUS_ERROR ) ;
+			return false ;
+		}
+		operationdetail .get_last_child() .set_status( STATUS_N_A ) ;
+		return true ;
+	}
+
 	return resize_filesystem( partition, partition, operationdetail, true ) ;
 }
 
@@ -3214,6 +3255,20 @@ FileSystem * GParted_Core::get_filesystem_object( const FILESYSTEM & filesystem
 	    return NULL ;
 }
 
+bool GParted_Core::filesystem_resize_disallowed( const Partition & partition )
+{
+	if ( partition .filesystem == FS_LVM2_PV )
+	{
+		//The LVM2 PV can't be resized when it's a member of an export VG
+		LVM2_PV_Info lvm2_pv_info ;
+		Glib::ustring vgname = lvm2_pv_info .get_vg_name( partition .get_path() ) ;
+		if ( vgname .empty() )
+			return false ;
+		return lvm2_pv_info .is_vg_exported( vgname ) ;
+	}
+	return false ;
+}
+
 #ifndef HAVE_LIBPARTED_3_0_0_PLUS
 bool GParted_Core::erase_filesystem_signatures( const Partition & partition ) 
 {
diff --git a/src/lvm2_pv.cc b/src/lvm2_pv.cc
index c7cd1ee..9e2d45b 100644
--- a/src/lvm2_pv.cc
+++ b/src/lvm2_pv.cc
@@ -28,12 +28,17 @@ const Glib::ustring lvm2_pv::get_custom_text( CUSTOM_TEXT ttype, int index )
 	static const Glib::ustring activate_text = _( "Ac_tivate" ) ;
 	static const Glib::ustring deactivate_text = _( "Deac_tivate" ) ;
 
+	static const Glib::ustring resize_warning =
+		_( "The Physical Volume can not be resize because it is a member of an exported Volume Group." ) ;
+
 	switch ( ttype )
 	{
 		case CTEXT_ACTIVATE_FILESYSTEM:
 			return index == 0 ? activate_text : "" ;
 		case CTEXT_DEACTIVATE_FILESYSTEM:
 			return index == 0 ? deactivate_text : "" ;
+		case CTEXT_RESIZE_DISALLOWED_WARNING:
+			return index == 0 ? resize_warning : "" ;
 		default:
 			return "" ;
 	}
