diff -Naur AddOns/MrPlow/Localization_enUS.lua AddOns_fixed/MrPlow/Localization_enUS.lua
--- AddOns/MrPlow/Localization_enUS.lua	2007-07-30 20:30:12.000000000 -0400
+++ AddOns_fixed/MrPlow/Localization_enUS.lua	2007-08-18 17:25:35.539153310 -0400
@@ -103,8 +103,8 @@
 	["clear the ignore slot list."] = true,
 	["bankbag"] = true,
 	["ignore specific bankbags."] = true,
-	["add a bankbag to the ignore list. Use '0' for the main bank window, and 1-6 for the others. Use a single number or a comma separated list."] = true,
-	["remove bags from the ignore list. Use '0' for the main bank window, and 1-6 for the others, Use a single number or a comma separated list."] = true,
+	["add a bankbag to the ignore list. Use '0' for the main bank window, and 1-7 for the others. Use a single number or a comma separated list."] = true,
+	["remove bags from the ignore list. Use '0' for the main bank window, and 1-7 for the others, Use a single number or a comma separated list."] = true,
 	["clear the ignore bankbag list."] = true,
 	["|cffeda55fClick|r to run The Works on your bag, |cffeda55fShift-Click|r to run Bank The Works, |cffeda55fShift-Control-Click|r to run BankStack. |cffeda55fClick|r again to cancel."] = true,
 	["|cffeda55fRight-Click|r for options."] = true,
diff -Naur AddOns/MrPlow/MrPlow.lua AddOns_fixed/MrPlow/MrPlow.lua
--- AddOns/MrPlow/MrPlow.lua	2007-07-30 20:30:12.000000000 -0400
+++ AddOns_fixed/MrPlow/MrPlow.lua	2007-08-18 17:28:18.488545730 -0400
@@ -379,16 +379,16 @@
 							type = "text",
 							name = L["add"],
 							get  = false,
-							usage = "<[0,1,2,3,4,5,6]>",
-							desc = L["add a bankbag to the ignore list. Use '0' for the main bank window, and 1-6 for the others. Use a single number or a comma separated list."],
+							usage = "<[0,1,2,3,4,5,6,7]>",
+							desc = L["add a bankbag to the ignore list. Use '0' for the main bank window, and 1-7 for the others. Use a single number or a comma separated list."],
 							set = "IgnoreBankBagsAdd",
 						},
 						del = {
 							type = "text",
 							get  = false,
 							name = L["del"],
-							usage = "<[0,1,2,3,4,5,6]>",
-							desc = L["remove bags from the ignore list. Use '0' for the main bank window, and 1-6 for the others, Use a single number or a comma separated list."],
+							usage = "<[0,1,2,3,4,5,6,7]>",
+							desc = L["remove bags from the ignore list. Use '0' for the main bank window, and 1-7 for the others, Use a single number or a comma separated list."],
 							set = "IgnoreBankBagsDel",
 						},
 						clear = {
@@ -719,8 +719,6 @@
 	if #dustBag == 0 then
 		local empty = {}
 		local full = {}
-		local qEmpty = {}
-		local qFull = {}
 
 		local function _BagDefrag(full, empty, bag)
 			for slot = 1, GetContainerNumSlots(bag) do
@@ -794,6 +792,8 @@
 			baglist = self:GetBagList()
 		end
 
+		for k in pairs(dustBag) do dustBag[k] = nil end
+
 		for i,bag in pairs(baglist) do
 			if GetBagName(bag) or bankAvailable and bag == -1 then -- First, ignore all ammo pouches...
 				local specialBag
@@ -805,15 +805,31 @@
 				end
 				if not specialBag then
 					_BagDefrag(full, empty, bag)
-				else
-					_BagDefrag(qFull, qEmpty, bag)
 				end
 			end
-		end
+    end
+
 		-- Now move the full items from the end to the empty spaces from the beginning
-		for k in pairs(dustBag) do dustBag[k] = nil end
 		_Defrag_Move(full, empty)
-		_Defrag_Move(qFull, qEmpty)
+
+		for i,bag in pairs(baglist) do
+			if GetBagName(bag) or bankAvailable and bag == -1 then -- First, ignore all ammo pouches...
+				local specialBag
+				if bag > 0 then
+					local bagslot = bag < 5 and bag + 19 or bag + 63
+					local bagTLink = GetInventoryItemLink("player", bagslot) or nil
+					self:Debug(bag)
+					specialBag = PT:ItemInSet(bagTLink, "Misc.Bag.Special")
+				end
+				if specialBag then
+					local qEmpty = {}
+					local qFull = {}
+					_BagDefrag(qFull, qEmpty, bag)
+					_Defrag_Move(qFull, qEmpty)
+				end
+			end
+	  end
+
 		if #dustBag > 0 then
 			self:Chat(L["Your bags rumble as Mr Plow gets busy and drives into your bags..."])
 			self:RegisterEvents()
@@ -832,14 +848,11 @@
 	--]]
 	if #dustBag == 0 then
 		local pile = {}
-		local specialPile = {}
 		local Stuff = {}
 		Stuff.mt = {}
 		local normalBlankSlate = {}
-		local specialBlankSlate = {}
 		local lookup = {}
 		local indexLookup = {}
-		local sIndexLookup = {}
 		itemCount = 0
 
 		function Stuff.new(num, ItemID, sbag, sslot)
@@ -993,6 +1006,8 @@
 			baglist = self:GetBagList()
 		end
 
+		for k in pairs(dustBag) do dustBag[k] = nil end
+
 		for i,bag in pairs(baglist) do
 			local specialBag
 			if bag > 0 then
@@ -1004,22 +1019,35 @@
 			end
 			if not specialBag then
 				_BagScan(pile, bag, normalBlankSlate, indexLookup)
-			else
-				_BagScan(specialPile, bag, specialBlankSlate, sIndexLookup)
 			end
 		end
-		self:Debug("Original size = "..#pile + #specialPile)
+
+		self:Debug("Original size = "..#pile)
 		table.sort(pile)
-		table.sort(specialPile)
-		
 		for i,v in ipairs(pile) do v.pos = i end -- rejig the iteration
-		for i,v in ipairs(specialPile) do v.pos = i end
-		
-		for k in pairs(dustBag) do dustBag[k] = nil end
 		_BagShift(pile, normalBlankSlate)
-		_BagShift(specialPile, specialBlankSlate)
 		self:Debug("Final:".. #dustBag)
 
+		for i,bag in pairs(baglist) do
+			local specialBag
+			if bag > 0 then
+				local bagslot = bag < 5 and bag + 19 or bag + 63
+				local bagTLink = GetInventoryItemLink("player", bagslot) or nil
+				if bagTLink then
+					specialBag = PT:ItemInSet(bagTLink, "Misc.Bag.Special")
+				end
+			end
+			if specialBag then
+				local specialPile = {}
+				local specialBlankSlate = {}
+				local sIndexLookup = {}
+				_BagScan(specialPile, bag, specialBlankSlate, sIndexLookup)
+				table.sort(specialPile)
+				for i,v in ipairs(specialPile) do v.pos = i end
+				_BagShift(specialPile, specialBlankSlate)
+			end
+		end
+
 		if #dustBag > 0 then
 			self:Chat(L["Your bags rumble as Mr Plow gets busy and drives into your bags..."])
 			self:RegisterEvents()
