diff --git a/.hgtags b/.hgtags
index 94fb03070c2e5fef8d2dd3d58e9227a26b49811f..f05b8bd17add39be304a63331a813a260edbdbf5 100755
--- a/.hgtags
+++ b/.hgtags
@@ -506,3 +506,4 @@ d07f76c5b9860fb87924d00ca729f7d4532534d6 3.7.29-release
 797ed69e6134ef48bb922577ab2540fb2d964668 3.8.0-release
 3f61ed662347dc7c6941b8266e72746a66d90e2a 3.8.1-release
 3a62616f3dd8bd512fcdfd29ef033b2505b11213 3.8.2-release
+60572f718879f786f6bc8b5c9373ebebf4693078 3.8.3-release
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
index 269aa9c86de7dc77e2318c699297b92342c63779..ff313b8c212f86ecce5e9ce1db1b5a17b83d134a 100644
--- a/indra/newview/VIEWER_VERSION.txt
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -1 +1 @@
-3.8.3
+3.8.4
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
index 991c5675469c13055e31343aafdcab4f697f6689..6aaf45c35d5bb29274c387caee253c92597ac340 100755
--- a/indra/newview/llinventoryfunctions.cpp
+++ b/indra/newview/llinventoryfunctions.cpp
@@ -2591,11 +2591,11 @@ void LLInventoryAction::onItemsRemovalConfirmation(const LLSD& notification, con
 		LLFolderView* folder_root = root.get();
 		//Need to remove item from DND before item is removed from root folder view
 		//because once removed from root folder view the item is no longer a selected item
-		LLInventoryAction::removeItemFromDND(folder_root);
+		removeItemFromDND(folder_root);
 		folder_root->removeSelectedItems();
 
 		// Update the marketplace listings that have been affected by the operation
-		LLInventoryAction::updateMarketplaceFolders();
+		updateMarketplaceFolders();
 	}
 }
 
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
index e6e8164e3518a0fe38c003b5ed28c1cd0e54e74f..b93bf9a16312e96f1dfb87088c1159d785c57fb0 100755
--- a/indra/newview/llinventoryfunctions.h
+++ b/indra/newview/llinventoryfunctions.h
@@ -461,13 +461,13 @@ struct LLInventoryAction
 	static void doToSelected(LLInventoryModel* model, LLFolderView* root, const std::string& action, BOOL user_confirm = TRUE);
 	static void callback_doToSelected(const LLSD& notification, const LLSD& response, class LLInventoryModel* model, class LLFolderView* root, const std::string& action);
 	static void callback_copySelected(const LLSD& notification, const LLSD& response, class LLInventoryModel* model, class LLFolderView* root, const std::string& action);
-	static void removeItemFromDND(LLFolderView* root);
 	static void onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response, LLHandle<LLFolderView> root);
-    
+	static void removeItemFromDND(LLFolderView* root);
+
 private:
-    static void buildMarketplaceFolders(LLFolderView* root);
-    static void updateMarketplaceFolders();
-    static std::list<LLUUID> sMarketplaceFolders; // Marketplace folders that will need update once the action is completed
+	static void buildMarketplaceFolders(LLFolderView* root);
+	static void updateMarketplaceFolders();
+	static std::list<LLUUID> sMarketplaceFolders; // Marketplace folders that will need update once the action is completed
 };
 
 
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
index ad86995b428c5bf8544808117cf4eb9ff0b8d031..55bcb3dc6505a8e302b49925d7a14f7b0e09ddac 100755
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -620,22 +620,14 @@ bool LLSelectMgr::linkObjects()
 
 bool LLSelectMgr::unlinkObjects()
 {
-	LLViewerObject *object = mSelectedObjects->getFirstRootObject();
-	if (!object) return false;
-
 	S32 min_objects_for_confirm = gSavedSettings.getS32("MinObjectsForUnlinkConfirm");
-	for (LLObjectSelection::root_iterator iter = getSelection()->root_begin();  iter != getSelection()->root_end(); iter++)
+	S32 unlink_object_count = mSelectedObjects->getObjectCount(); // clears out nodes with NULL objects
+	if (unlink_object_count >= min_objects_for_confirm
+		&& unlink_object_count > mSelectedObjects->getRootObjectCount())
 	{
-		object = (*iter)->getObject();
-		if(object)
-		{
-			S32 objects_in_linkset = object->numChildren() + 1;
-			if(objects_in_linkset >= min_objects_for_confirm)
-			{
-				LLNotificationsUtil::add("ConfirmUnlink", LLSD(), LLSD(), boost::bind(&LLSelectMgr::confirmUnlinkObjects, this, _1, _2));
-				return true;
-			}
-		}
+		// total count > root count means that there are childer inside and that there are linksets that will be unlinked
+		LLNotificationsUtil::add("ConfirmUnlink", LLSD(), LLSD(), boost::bind(&LLSelectMgr::confirmUnlinkObjects, this, _1, _2));
+		return true;
 	}
 
 	LLSelectMgr::getInstance()->sendDelink();
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index 41c6ffd37cbf2eb49ca4d7fbb1d077bd42c91f4a..70ba4d5077580d39bb4bf95d8b0a6051b2c18cea 100755
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -5804,7 +5804,7 @@ You cannot undo this action.
      name="ConfirmUnlink"
      type="alertmodal">
     <unique/>
-    This is a large linkset. If you unlink it, you may not be able to link it again. You may wish to take a copy of the linkset into your inventory as a precaution.
+    This is a large selection with linksets. If you unlink it, you may not be able to link it again. You may wish to take copies of linksets into your inventory as a precaution.
     <tag>confirm</tag>
     <usetemplate
      ignoretext="Confirm when unlinking a linkset"
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
index 4eb6e2462d32282744847c3facd8de78d4fa948e..bc91028f3bab068f1e3594a63744d6e484a9635c 100755
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -2320,6 +2320,22 @@ This feature is currently in Beta. Please add your name to this [http://goo.gl/f
 	<string name="Marketplace Validation Error Empty Version">: Warning: version folder must contain at least 1 item</string>
 	<string name="Marketplace Validation Error Empty Stock">: Warning: stock folder must contain at least 1 item</string>
 
+	<string name="Marketplace Validation Log"></string>
+	<string name="Marketplace Validation Warning Stock">stock folder must be contained by a version folder</string>
+	<string name="Marketplace Validation Error Mixed Stock">: Error: all items in a stock folder must be no-copy and of the same type</string>
+	<string name="Marketplace Validation Error Subfolder In Stock">: Error: stock folder cannot contain subfolders</string>
+	<string name="Marketplace Validation Warning Empty">: Warning: folder doesn't contain any items</string>
+	<string name="Marketplace Validation Warning Create Stock">: Warning: creating stock folder</string>
+	<string name="Marketplace Validation Warning Create Version">: Warning: creating version folder</string>
+	<string name="Marketplace Validation Warning Move">: Warning : moving items</string>
+	<string name="Marketplace Validation Warning Delete">: Warning: folder content transfered to stock folder, removing empty folder</string>
+	<string name="Marketplace Validation Error Stock Item">: Error: no-copy items must be contained by a stock folder</string>
+	<string name="Marketplace Validation Warning Unwrapped Item">: Warning: items must be contained by a version folder</string>
+	<string name="Marketplace Validation Error">: Error: </string>
+	<string name="Marketplace Validation Warning">: Warning: </string>
+	<string name="Marketplace Validation Error Empty Version">: Warning: version folder must contain at least 1 item</string>
+	<string name="Marketplace Validation Error Empty Stock">: Warning: stock folder must contain at least 1 item</string>
+
     <string name="Marketplace Validation No Error">No errors or warnings to report</string>
 	<string name="Marketplace Error None">No errors</string>
 	<string name="Marketplace Error Prefix">Error: </string>