diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
index 35896765df4ee814d9e0e4684881bc9c859d5c86..98e2d2c96701021e162e9d1ec47f3c7f7b9d1306 100644
--- a/indra/newview/llinventorybridge.cpp
+++ b/indra/newview/llinventorybridge.cpp
@@ -863,7 +863,7 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			if ( (pItem) &&
 				 ( ((LLAssetType::AT_NOTECARD == pItem->getType()) && (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE))) ||
 				   ((LLAssetType::AT_LSL_TEXT == pItem->getType()) && (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWSCRIPT))) ||
-				   ((LLAssetType::AT_TEXTURE == pItem->getType()) && (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE))) ) )
+				   ((LLAssetType::AT_TEXTURE == pItem->getType()) && (!RlvActions::canPreviewTextures()))))
 			{
 				disabled_items.push_back(std::string("Open"));
 			}
@@ -3596,7 +3596,7 @@ void LLFolderBridge::perform_pasteFromClipboard()
                 }
 
 // [RLVa:KB] - Checked: RLVa-2.1.0
-				if ( ((item) && (!RlvActions::canPaste(item, dest_folder))) || ((cat) && (!RlvActions::canPaste(cat, dest_folder))) )
+				if ( ((item) && (!RlvActions::canPasteInventory(item, dest_folder))) || ((cat) && (!RlvActions::canPasteInventory(cat, dest_folder))) )
 				{
 					RlvActions::notifyBlocked(RLV_STRING_BLOCKED_INVFOLDER);
 					return;
@@ -5137,6 +5137,13 @@ bool LLTextureBridge::canSaveTexture(void)
 		return false;
 	}
 	
+// [RLVa:KB] - Checked: RLVa-2.2
+	if (!RlvActions::canPreviewTextures())
+	{
+		return false;
+	}
+// [/RLVa:KB]
+
 	const LLViewerInventoryItem *item = model->getItem(mUUID);
 	if (item)
 	{
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
index a14209eacbf763b8f22999b648175b6db9eba054..412637f5ac1889905f8473462647e04dc329d43f 100644
--- a/indra/newview/llpanelobjectinventory.cpp
+++ b/indra/newview/llpanelobjectinventory.cpp
@@ -67,6 +67,7 @@
 #include "llviewerobjectlist.h"
 #include "llviewermessage.h"
 // [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a)
+#include "rlvactions.h"
 #include "rlvhandler.h"
 #include "rlvlocks.h"
 // [/RLVa:KB]
@@ -756,7 +757,7 @@ void LLTaskInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags)
 			bool fLocked = (pAttachObj) ? gRlvAttachmentLocks.isLockedAttachment(pAttachObj->getRootEdit()) : false;
 			if ( ((LLAssetType::AT_NOTECARD == item->getType()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_VIEWNOTE)) || (fLocked))) || 
 				 ((LLAssetType::AT_LSL_TEXT == item->getType()) && ((gRlvHandler.hasBehaviour(RLV_BHVR_VIEWSCRIPT)) || (fLocked))) ||
-				 ((LLAssetType::AT_TEXTURE == item->getType()) && (gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE))) )
+				 ((LLAssetType::AT_TEXTURE == item->getType()) && (!RlvActions::canPreviewTextures())))
 			{
 				disabled_items.push_back(std::string("Task Open"));
 			}
diff --git a/indra/newview/rlvactions.cpp b/indra/newview/rlvactions.cpp
index e36c81b2f5f7db5fac70a4267f4454e0c6007e91..54f9e1e0ecddf6a63027c5518ace675bb5ea9c66 100644
--- a/indra/newview/rlvactions.cpp
+++ b/indra/newview/rlvactions.cpp
@@ -248,7 +248,7 @@ EChatType RlvActions::checkChatVolume(EChatType chatType)
 // Inventory
 //
 
-bool RlvActions::canPaste(const LLInventoryCategory* pSourceCat, const LLInventoryCategory* pDestCat)
+bool RlvActions::canPasteInventory(const LLInventoryCategory* pSourceCat, const LLInventoryCategory* pDestCat)
 {
 	// The user can paste the specified object into the destination if:
 	//   - the source and destination are subject to the same lock type (or none at all) => NOTE: this happens to be the same logic we use for moving
@@ -256,7 +256,7 @@ bool RlvActions::canPaste(const LLInventoryCategory* pSourceCat, const LLInvento
 		( (pSourceCat) && (pDestCat) && ((!RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().canMoveFolder(pSourceCat->getUUID(), pDestCat->getUUID()))) );
 }
 
-bool RlvActions::canPaste(const LLInventoryItem* pSourceItem, const LLInventoryCategory* pDestCat)
+bool RlvActions::canPasteInventory(const LLInventoryItem* pSourceItem, const LLInventoryCategory* pDestCat)
 {
 	// The user can paste the specified object into the destination if:
 	//   - the source and destination are subject to the same lock type (or none at all) => NOTE: this happens to be the same logic we use for moving
@@ -264,6 +264,11 @@ bool RlvActions::canPaste(const LLInventoryItem* pSourceItem, const LLInventoryC
 		( (pSourceItem) && (pDestCat) && ((!RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ANY)) || (RlvFolderLocks::instance().canMoveItem(pSourceItem->getUUID(), pDestCat->getUUID()))) );
 }
 
+bool RlvActions::canPreviewTextures()
+{
+	return (!gRlvHandler.hasBehaviour(RLV_BHVR_VIEWTEXTURE));
+}
+
 // ============================================================================
 // Movement
 //
diff --git a/indra/newview/rlvactions.h b/indra/newview/rlvactions.h
index 1e094fd3f1678509e11a9c8e1ecf28d5717e7004..82d09510e4d7f8712e7ccb9de7e77ec24b85f714 100644
--- a/indra/newview/rlvactions.h
+++ b/indra/newview/rlvactions.h
@@ -142,8 +142,13 @@ public:
 	/*
 	 * Returns true if the user is allowed to paste the specified inventory object (item/folder) into the specified destination category (within user inventory)
 	 */
-	static bool canPaste(const LLInventoryCategory* pSourceCat, const LLInventoryCategory* pDestCat);
-	static bool canPaste(const LLInventoryItem* pSourceItem, const LLInventoryCategory* pDestCat);
+	static bool canPasteInventory(const LLInventoryCategory* pSourceCat, const LLInventoryCategory* pDestCat);
+	static bool canPasteInventory(const LLInventoryItem* pSourceItem, const LLInventoryCategory* pDestCat);
+
+	/*
+	 * Returns true if the user can open the inventory floater for (user/library/notecard/object)inventory based textures
+	 */
+	static bool canPreviewTextures();
 
 	// ========
 	// Movement
@@ -232,26 +237,26 @@ public:
 	static bool canShowHoverText(const LLViewerObject* pObj);
 
 	/*
-	 * Returns true if the user can touch the specified object (with an optional offset relative to its center)
+	 * Returns true if the user can sit on the specified object (see canGroundSit() for sitting on land)
 	 */
-	static bool canTouch(const LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero);
+	static bool canSit(const LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero);
 
 	/*
 	 * Returns true if the user can see their in-world location
 	 */
 	static bool canShowLocation();
 
-	/*
-	 * Returns true if the user can sit on the specified object (see canGroundSit() for sitting on land)
-	 */
-	static bool canSit(const LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero);
-
 	/*
 	 * Returns true if the user can stand up (returns true if the user isn't currently sitting)
 	 */
 	static bool canStand();
 	static bool canStand(const LLUUID& idRlvObjExcept);
 
+	/*
+	 * Returns true if the user can touch the specified object (with an optional offset relative to its center)
+	 */
+	static bool canTouch(const LLViewerObject* pObj, const LLVector3& posOffset = LLVector3::zero);
+
 	// ================
 	// Helper functions
 	// ================