2.2.5

git [03-24-18 - 19:43]
2.2.5
Filename
FurnitureCatalogue/FurCControlBridge.lua
FurnitureCatalogue/FurCData.lua
FurnitureCatalogue/FurCFilter.lua
FurnitureCatalogue/FurCMenu.lua
FurnitureCatalogue/FurCSettingsAdapter.lua
FurnitureCatalogue/FurnitureCatalogue.txt
FurnitureCatalogue/data/EventItems.lua
FurnitureCatalogue/data/Homestead/H_LuxuryFurnisher.lua
FurnitureCatalogue/data/LuxuryFurnisher.lua
FurnitureCatalogue/data/MiscItemSources.lua
FurnitureCatalogue/data/RumourRecipes.lua
FurnitureCatalogue/locale/de.lua
FurnitureCatalogue/locale/en.lua
FurnitureCatalogue/locale/fr.lua
FurnitureCatalogue/locale/jp.lua
FurnitureCatalogue/locale/ru.lua
FurnitureCatalogue/startup.lua
diff --git a/FurnitureCatalogue/FurCControlBridge.lua b/FurnitureCatalogue/FurCControlBridge.lua
index 039eff5..8f9a7a0 100644
--- a/FurnitureCatalogue/FurCControlBridge.lua
+++ b/FurnitureCatalogue/FurCControlBridge.lua
@@ -101,13 +101,16 @@ function FurC.GuiOnSearchBoxClick(control, mouseButton, doubleClick)
 	FurC_SearchBoxText:SetText("")
 	if mouseButton == 2 or doubleClick then
 		control:SetText("")
-	end
+	end
 end

 local FURC_S_FILTERDEFAULT = GetString(SI_FURC_TEXTBOX_FILTER_DEFAULT)

 function FurC.GuiOnSearchBoxFocusOut(control)
-	if control:GetText() and control:GetText() ~= "" then return end
+	if control:GetText() and control:GetText() ~= "" then
+        FurC.GuiOnSliderUpdate(FurCGui_ListHolder_Slider, 0)
+		FurC.UpdateGui()
+    end
 	FurC_SearchBoxText:SetText(FURC_S_FILTERDEFAULT)
 end

diff --git a/FurnitureCatalogue/FurCData.lua b/FurnitureCatalogue/FurCData.lua
index 70fdf28..ed203f2 100644
--- a/FurnitureCatalogue/FurCData.lua
+++ b/FurnitureCatalogue/FurCData.lua
@@ -16,9 +16,8 @@ local function getCurrentChar()
 	if nil == currentChar then currentChar = zo_strformat(GetUnitName("player")) end
 	return currentChar
 end
-local function p(...)
-	FurC.DebugOut(...)
-end
+
+local p = FurC.DebugOut

 local function startupMessage(text)
 	if FurC.GetStartupSilently() then return end
@@ -33,7 +32,8 @@ local function getItemId(itemLink)
 end
 FurC.GetItemId = getItemId

-local function getItemLink(itemId)
+local function getItemLink(itemId)
+    if nil == itemId then return end
 	itemId = tostring(itemId)
 	if #itemId > 55 then return itemId end
 	if #itemId < 4 then return end
@@ -141,8 +141,9 @@ end

 function FurC.Find(itemOrBlueprintLink)						-- sets recipeArray, returns it - calls scanItemLink

-	if nil == itemOrBlueprintLink or #itemOrBlueprintLink == 0 then return end
+
 	if tonumber(itemOrBlueprintLink) == itemOrBlueprintLink then itemOrBlueprintLink = FurC.GetItemLink(itemOrBlueprintLink) end
+	if nil == itemOrBlueprintLink or #itemOrBlueprintLink == 0 then return end
 	p("scanItemLink(<<1>>)...", itemOrBlueprintLink)		-- do not return empty arrays. If this returns nil, abort!

 	if itemOrBlueprintLink == lastLink and nil ~= recipeArray then
@@ -370,7 +371,7 @@ local function scanFromFiles(shouldScanCharacter)
 			for eventName, eventData in pairs(versionData) do
 				for eventItemSource, eventItemData in pairs(eventData) do
 					for itemId, _ in pairs(eventItemData) do
-						recipeArray = {}
+						recipeArray             = {}
 						recipeArray.craftable 	= false
 						recipeArray.version 	= versionNumber
 						recipeArray.origin 		= FURC_FESTIVAL_DROP
diff --git a/FurnitureCatalogue/FurCFilter.lua b/FurnitureCatalogue/FurCFilter.lua
index dfc79ad..f3bed55 100644
--- a/FurnitureCatalogue/FurCFilter.lua
+++ b/FurnitureCatalogue/FurCFilter.lua
@@ -14,6 +14,7 @@ local hideBooks 				= false
 local hideRumours				= false
 local hideCrownStore			= false
 local mergeLuxuryAndSales		= false
+local filterAllOnTextSearch		= false

 local sourceIndices

@@ -44,6 +45,12 @@ function FurC.SetFilter(useDefaults, skipRefresh)
 	mergeLuxuryAndSales 		= FurC.GetMergeLuxuryAndSales()
 	hideCrownStore 				= FurC.GetHideCrownStoreItems()

+    -- ignore filtered items when no dropdown filter is set and there's a text search?
+    filterAllOnTextSearch       = FurC.GetFilterAllOnText() and #searchString > 0 and
+                                    FURC_NONE == ddSource and
+                                    FURC_NONE == dropdownChoiceVersion and
+                                    FURC_NONE == dropdownChoiceCharacter
+
 	if not skipRefresh then
 		zo_callLater(FurC.UpdateLineVisibility, 200)
 	end
@@ -100,14 +107,13 @@ local function matchSourceDropdown()
 	elseif FURC_OTHER					== ddSource then
 		return (
 			recipeArray.origin == FURC_FESTIVAL_DROP or
-			recipeArray.origin == FURC_DROP 	or
-			recipeArray.origin == FURC_FISHING 	or
-			recipeArray.origin == FURC_JUSTICE 	or
+			recipeArray.origin == FURC_DROP 	     or
+			recipeArray.origin == FURC_FISHING 	     or
+			recipeArray.origin == FURC_JUSTICE 	     or
 			recipeArray.origin == FURC_GUILDSTORE
 		)
 	else return recipeArray.origin  == ddSource end

-
 	-- we're checking character knowledge
 	return 1 == dropdownChoiceCharacter or recipeArray.origin == FURC_CRAFTING

@@ -117,19 +123,17 @@ local function matchDropdownFilter()
 	return matchVersionDropdown() and matchSourceDropdown()
 end

-local function stringMatch(s1, s2)
-	return nil ~= string.match(string.lower(s1), string.lower(s2))
-end
-
 local function matchSearchString()
-	if searchString == "" then return true end
-	return stringMatch(GetItemLinkName(itemLink), searchString)
+	if #searchString == 0 then return true end
+    local caseSensitive = nil ~= string.match(searchString, "%u")
+    local itemName = GetItemLinkName(itemLink)
+    local matchme = (caseSensitive and itemName) or string.lower(itemName)
+    return string.match(matchme, searchString)
 end

 local function matchCraftingTypeFilter()
 	if not recipeArray.origin == FURC_CRAFTING then return false end
-	local filterType = FurC.GetCraftingSkillType(itemId, recipeArray)
-
+	local filterType = FurC.GetCraftingSkillType(itemId, recipeArray)
 	return filterType and filterType > 0 and craftingTypeFilter[filterType]
 end
 local function matchQualityFilter()
@@ -137,7 +141,7 @@ local function matchQualityFilter()
 end

 local function filterBooks(itemId, recipeArray)
-	if not hideBooks then return false end
+	if not (hideBooks or filterAllOnTextSearch and FurC.GetFilterAllOnTextNoBooks()) then return false end
 	local versionData = FurC.Books[recipeArray.version]
 	if nil == versionData then return end
 	return nil ~= versionData[itemId]
@@ -146,19 +150,30 @@ end
 function FurC.MatchFilter(currentItemId, currentRecipeArray)

 	itemId = currentItemId
-	itemLink = FurC.GetItemLink(itemId)
+	itemLink = FurC.GetItemLink(itemId)
 	recipeArray = currentRecipeArray or FurC.Find(itemLink)
 	itemType, sItemType = GetItemLinkItemType(itemLink)

-
-	if shouldBeHidden()															then return false end
-	if not matchSearchString() 													then return false end
-	if not matchDropdownFilter()												then return false end
+    if  filterBooks(itemId, recipeArray)			                        then return false end
+
+    if recipeArray.origin == FURC_RUMOUR then
+        if filterAllOnTextSearch then return not FurC.GetFilterAllOnTextNoRumour() end
+        return hideRumours and recipeArray.origin == FURC_RUMOUR
+    end
+
+    if recipeArray.origin == FURC_CROWN then
+        if filterAllOnTextSearch then return not FurC.GetFilterAllOnTextNoCrown() end
+        return hideCrownStore and ddSource ~= FURC_CROWN
+    end
+
+    if not filterAllOnTextSearch then
+        if not matchDropdownFilter()                                            then return false end
+    end
+
+    if not matchSearchString() 												    then return false end
 	if not (FurC.settings.filterCraftingTypeAll or matchCraftingTypeFilter())	then return false end
 	if not (FurC.settings.filterQualityAll 		or matchQualityFilter())		then return false end

-	if filterBooks(itemId, recipeArray)			then return false end
-
 	return true

 end
\ No newline at end of file
diff --git a/FurnitureCatalogue/FurCMenu.lua b/FurnitureCatalogue/FurCMenu.lua
index 34efb71..2e0a530 100644
--- a/FurnitureCatalogue/FurCMenu.lua
+++ b/FurnitureCatalogue/FurCMenu.lua
@@ -175,11 +175,10 @@ function FurC.CreateSettings(savedVars, defaults)
 					getFunc = function() return FurC.GetResetDropdownChoice() end,
 					setFunc = function(value) FurC.SetResetDropdownChoice(value) end
 				},
-
 				{ -- dropdown: default source
 					type 	= "dropdown",
 					name 	= GetString(SI_FURC_STRING_MENU_DEFAULT_DD_SOURCE),
-					choices = FurnitureCatalogue.DropdownData.ChoicesSource,
+					choices = FurC.GetChoicesSource(),
 					getFunc = function() return FurC.GetDefaultDropdownChoiceText("Source") end,
 					setFunc = function(value) FurC.SetDefaultDropdownChoice("Source", value) end
 				},
@@ -207,7 +206,50 @@ function FurC.CreateSettings(savedVars, defaults)
 		{	type = "submenu",
 			name = GetString(SI_FURC_STRING_MENU_FILTERING),
 			controls = {
-
+                 {	type = "submenu",
+                    name = GetString(SI_FURC_STRING_MENU_HEADER_F_ALL_ON_TEXT),
+                    controls = {
+                        { -- description: Default dropdown
+                            type = "description",
+                            name = GetString(SI_FURC_STRING_MENU_F_ALL_ON_TEXT),
+                            text = GetString(SI_FURC_STRING_MENU_HEADER_F_ALL_DESC),
+                        },
+
+                        { -- checkbox: Filter everything when text searching without dropdown
+                            type 	= "checkbox",
+                            name 	= GetString(SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT),
+                            tooltip = GetString(SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT_TT),
+                            getFunc = function() return FurC.GetFilterAllOnText() end,
+                            setFunc = function(value) FurC.SetFilterAllOnText(value) end
+                        },
+                        { -- checkbox: Exclude books from these
+                            type 	= "checkbox",
+                            name 	= GetString(SI_FURC_STRING_MENU_FALL_HIDE_BOOKS),
+                            tooltip = GetString(SI_FURC_STRING_MENU_FALL_HIDE_BOOKS_TT),
+                            getFunc = function() return FurC.GetFilterAllOnTextNoBooks() end,
+                            setFunc = function(value) FurC.SetFilterAllOnTextNoBooks(value) end,
+                            disabled = not FurC.GetFilterAllOnText()
+                        },
+                        { -- checkbox: Exclude crown store items from these
+                            type 	= "checkbox",
+                            name 	= GetString(SI_FURC_STRING_MENU_FALL_HIDE_CROWN),
+                            tooltip = GetString(SI_FURC_STRING_MENU_FALL_HIDE_CROWN_TT),
+                            getFunc = function() return FurC.GetFilterAllOnTextNoCrown() end,
+                            setFunc = function(value) FurC.GetFilterAllOnTextNoCrown(value) end,
+                            disabled = not FurC.GetFilterAllOnText()
+                        },
+                        { -- checkbox: Exclude crown store items from these
+                            type 	= "checkbox",
+                            name 	= GetString(SI_FURC_STRING_MENU_FALL_HIDE_RUMOUR),
+                            tooltip = GetString(SI_FURC_STRING_MENU_FALL_HIDE_RUMOUR_TT),
+                            getFunc = function() return FurC.GetFilterAllOnTextNoRumour() end,
+                            setFunc = function(value) FurC.GetFilterAllOnTextNoRumour(value) end,
+                            disabled = not FurC.GetFilterAllOnText()
+                        },
+                    },
+                },
+
+
 				-- ===============================================================================
 				-- header: Mages guild books
 				-- ===============================================================================
@@ -270,6 +312,7 @@ function FurC.CreateSettings(savedVars, defaults)
 					getFunc = function() return FurC.GetHideCrownStoreItems() end,
 					setFunc = function(value) FurC.SetHideCrownStoreItems(value) end
 				},
+                --[[
 				{	-- header: rumour recipes
 					type = "header",
 					name = GetString(SI_FURC_STRING_MENU_HIDE_MENU),
@@ -293,6 +336,7 @@ function FurC.CreateSettings(savedVars, defaults)
 					getFunc = function() return FurC.GetHideCrownStoreEntry() end,
 					setFunc = function(value) FurC.SetHideCrownStoreEntry(value) end
 				},
+                ]]
 			},
 		},

diff --git a/FurnitureCatalogue/FurCSettingsAdapter.lua b/FurnitureCatalogue/FurCSettingsAdapter.lua
index 9ac9c86..7d52de0 100644
--- a/FurnitureCatalogue/FurCSettingsAdapter.lua
+++ b/FurnitureCatalogue/FurCSettingsAdapter.lua
@@ -49,6 +49,39 @@ function FurC.SetHideCrownStoreEntry(value)
 end


+function FurC.GetFilterAllOnText()
+	return FurC.settings["filterAllOnText"]
+end
+function FurC.SetFilterAllOnText(value)
+	FurC.settings["filterAllOnText"] = value
+	FurC.UpdateGui()
+end
+
+function FurC.GetFilterAllOnTextNoRumour()
+	return FurC.settings["filterAllOnTextNoRumour"]
+end
+function FurC.GetFilterAllOnTextNoRumour(value)
+	FurC.settings["filterAllOnTextNoRumour"] = value
+	FurC.UpdateGui()
+end
+
+function FurC.GetFilterAllOnTextNoBooks()
+	return FurC.settings["filterAllOnTextNoBooks"]
+end
+function FurC.GetFilterAllOnTextNoBooks(value)
+	FurC.settings["filterAllOnTextNoBooks"] = value
+	FurC.UpdateGui()
+end
+
+function FurC.GetFilterAllOnTextNoCrown()
+	return FurC.settings["filterAllOnTextNoCrown"]
+end
+function FurC.GetFilterAllOnTextNoCrown(value)
+	FurC.settings["filterAllOnTextNoCrown"] = value
+	FurC.UpdateGui()
+end
+
+

 function FurC.GetFontSize()
 	if FurC.settings["fontSize"] < 10 then
@@ -158,9 +191,7 @@ function FurC.SetFilterQuality(quality)
 		end
 	else
 		filterArray[quality] = not filterArray[quality]
-	end
-
-
+	end
 	FurC.settings.filterQualityAll = not containsTrue(filterArray)

 	for key, control in pairs (controls) do
@@ -206,22 +237,18 @@ function FurC.GetSearchFilter()

 	return FurC.SearchFilter or ""
 end
-function FurC.GuiSetSearchboxTextFrom(control)

+function FurC.GuiSetSearchboxTextFrom(control)
 	-- call asynchronely to prevent lagging. Praise votan.
-	task:Call(function()
+	task:Call(function()
 		local text = control:GetText()
-		if (text == "") then
-			control:GetNamedChild("Text"):SetText("Filter by text search")
-		else
-			control:GetNamedChild("Text"):SetText("")
-		end
+        control:GetNamedChild("Text"):SetText((text == "" and "Filter by text search") or "")
+
 		FurC.SearchFilter = text

 		FurC.GuiOnSliderUpdate(FurCGui_ListHolder_Slider, 0)
 		FurC.UpdateGui()
 	end)
-
 end

 function FurC.GetHideBooks()
diff --git a/FurnitureCatalogue/FurnitureCatalogue.txt b/FurnitureCatalogue/FurnitureCatalogue.txt
index 8655ab9..d69c8cf 100644
--- a/FurnitureCatalogue/FurnitureCatalogue.txt
+++ b/FurnitureCatalogue/FurnitureCatalogue.txt
@@ -1,6 +1,6 @@
 ## Title: FurnitureCatalogue
 ## Author: manavortex
-## Version: 2.2.4a
+## Version: 2.2.5
 ## APIVersion: 100022
 ## SavedVariables: FurnitureCatalogue_Settings
 ## OptionalDependsOn: pChat
diff --git a/FurnitureCatalogue/data/EventItems.lua b/FurnitureCatalogue/data/EventItems.lua
index c054a9f..cfbf388 100644
--- a/FurnitureCatalogue/data/EventItems.lua
+++ b/FurnitureCatalogue/data/EventItems.lua
@@ -1,18 +1,32 @@
-FurC.EventItems[FURC_REACH] = {
-	--[[
+FurC.Books = FurC.Books or {}
+FurC.Books[FURC_MORROWIND] = {
+    [126157] = {},
+    [126158] = {},
+    [126159] = {},
+    [126160] = {},
+    [126161] = {},
+    [126162] = {},
+    [126163] = {},
+    [126164] = {},
+}
+
+FurC.EventItems[FURC_MORROWIND] = {
 	["Midyear Mayhem"] = {
-		["Boon Box"] = {
-			126157:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #1
-			126158:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #2
-			126159:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #3
-			126160:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #4
-			126161:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #5
-			126162:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #6
-			126163:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #7
-			126164:5:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0|h|h"] = true,	-- Song of Pelinal, #8
-		}
-	}
-	]]
+		["Boon Box"] = {
+			[126157] = true,	-- Song of Pelinal, #1
+			[126158] = true,	-- Song of Pelinal, #2
+			[126159] = true,	-- Song of Pelinal, #3
+			[126160] = true,	-- Song of Pelinal, #4
+			[126161] = true,	-- Song of Pelinal, #5
+			[126162] = true,	-- Song of Pelinal, #6
+			[126163] = true,	-- Song of Pelinal, #7
+			[126164] = true,	-- Song of Pelinal, #8
+			[118053] = true, 	-- Common Campfire, Outdoor
+		},
+	},
+}
+FurC.EventItems[FURC_REACH] = {
+
 	["Witches' Festival"] = {
 		["Plunder Skull"] = {
 			[130326] = true, 	-- Witches Brazier, Primitive Log",
diff --git a/FurnitureCatalogue/data/Homestead/H_LuxuryFurnisher.lua b/FurnitureCatalogue/data/Homestead/H_LuxuryFurnisher.lua
index b5d29fb..7e97f58 100644
--- a/FurnitureCatalogue/data/Homestead/H_LuxuryFurnisher.lua
+++ b/FurnitureCatalogue/data/Homestead/H_LuxuryFurnisher.lua
@@ -68,24 +68,6 @@ FurC.LuxuryFurnisher[FURC_HOMESTEAD] = {
 		itemDate	= "2017-04-14",
 	},

-	-- April, 7-9
-	[120885] = {	-- Alik'r Cactus
-		itemPrice 	= 2000,
-		itemDate	= "2017-04-07",
-	},
-	[120884] = {	-- Buckthorn
-		itemPrice 	= 4000,
-		itemDate	= "2017-04-07",
-	},
-	[120883] = {	-- Voidflower
-		itemPrice 	= 5000,
-		itemDate	= "2017-04-07",
-	},
-	[120886] = {	-- White Hosta
-		itemPrice 	= 3000,
-		itemDate	= "2017-04-07",
-	},
-



diff --git a/FurnitureCatalogue/data/LuxuryFurnisher.lua b/FurnitureCatalogue/data/LuxuryFurnisher.lua
index 44c0889..82a40f2 100644
--- a/FurnitureCatalogue/data/LuxuryFurnisher.lua
+++ b/FurnitureCatalogue/data/LuxuryFurnisher.lua
@@ -3,6 +3,28 @@ FurC.LuxuryFurnisher = FurC.LuxuryFurnisher or {}

 FurC.LuxuryFurnisher[FURC_DRAGONS] = {

+	-- April, 7-9
+	[120885] = {	-- Alik'r Cactus
+		itemPrice 	= 2000,
+		itemDate	= "2018-03-24",
+	},
+	[120884] = {	-- Buckthorn
+		itemPrice 	= 4000,
+		itemDate	= "2018-03-24",
+	},
+	[120883] = {	-- Voidflower
+		itemPrice 	= 5000,
+		itemDate	= "2018-03-24",
+	},
+	[134829] = {	-- Fern, Woody Slough
+		itemPrice 	= 3000,
+		itemDate	= "2018-03-24",
+	},
+	[120886] = {	-- White Hosta
+		itemPrice 	= 3000,
+		itemDate	= "2018-03-24",
+	},
+

 	[134828] = {	-- Antler Coral, Branched Spiree
 		itemPrice 	= 100000,
diff --git a/FurnitureCatalogue/data/MiscItemSources.lua b/FurnitureCatalogue/data/MiscItemSources.lua
index e64fe58..f76e1f0 100644
--- a/FurnitureCatalogue/data/MiscItemSources.lua
+++ b/FurnitureCatalogue/data/MiscItemSources.lua
@@ -1,78 +1,55 @@
 -- use constants because it's a huge performance gain due to how LUA handles strings... at least unless siri lied :P

-local FURC_CANBEPICKED 					= "can be pickpocketed"
-local FURC_CANBEPICKED_WW				= FURC_CANBEPICKED .. " from woodworkers"
-local FURC_CANBEPICKED_ASS 				= FURC_CANBEPICKED .. " from outlaws and assassins"
-local FURC_CANBEPICKED_GUARD	 		= FURC_CANBEPICKED .. " from guards"
+local FURC_CANBEPICKED_WW		= GetString(SI_FURC_CANBEPICKED) .. " from woodworkers"
+local FURC_CANBEPICKED_ASS 	    = GetString(SI_FURC_CANBEPICKED) .. " from outlaws and assassins"
+local FURC_CANBEPICKED_GUARD	= GetString(SI_FURC_CANBEPICKED) .. " from guards"

-local FURC_CANBESTOLEN 					= "can be stolen"
-local FURC_CANBESTOLENINCC 				= FURC_CANBESTOLEN .. " in Clockwork City"
-local FURC_CANBESTOLEN_SCHOLARS 		= FURC_CANBESTOLEN .. " from scholars"
-local FURC_CANBESTOLEN_NERDS	 		= FURC_CANBESTOLEN_SCHOLARS .. " and mages"
-local FURC_CANBESTOLEN_RELIG	 		= FURC_CANBESTOLEN .. " from priests and pilgrims"
-local FURC_CANBESTOLEN_THIEF	 		= FURC_CANBESTOLEN .. " from thieves"
+
+local FURC_CANBESTOLENINCC 		= GetString(SI_FURC_CANBESTOLEN) .. " in Clockwork City"
+local FURC_CANBESTOLEN_SCHOLARS = GetString(SI_FURC_CANBESTOLEN) .. " from scholars"
+local FURC_CANBESTOLEN_NERDS	= FURC_CANBESTOLEN_SCHOLARS      .. " and mages"
+local FURC_CANBESTOLEN_RELIG	= GetString(SI_FURC_CANBESTOLEN) .. " from priests and pilgrims"
+local FURC_CANBESTOLEN_THIEF	= GetString(SI_FURC_CANBESTOLEN) .. " from thieves"
+local FURC_CANBESTOLEN_WW	    = GetString(SI_FURC_CANBESTOLEN) .. " from woodworkers"

-local FURC_AUTOMATON 					= "from automatons"
-local FURC_AUTOMATON_CC					= FURC_AUTOMATON .. " in Clockwork City"
-local FURC_AUTOMATON_VV					= FURC_AUTOMATON .. " on Vvardenfell"
-local FURC_TOMBS 						= "Ancestor tombs and ruins on Vvardenfell"
+local FURC_AUTOMATON_CC			= GetString(SI_FURC_AUTOMATON) .. " in Clockwork City"
+local FURC_AUTOMATON_VV			= GetString(SI_FURC_AUTOMATON) .. " on Vvardenfell"

-local FURC_PLANTS						= "from harvesting plants"
-
-local FURC_HARVEST						= "from harvesting nodes"
-local FURC_HARVEST_CHARBOR				= FURC_HARVEST .. " in Coldharbour"
-
-local FURC_CANBEFISHED 					= "can be fished"
+local FURC_HARVEST_CHARBOR		= GetString(SI_FURC_HARVEST) .. " in Coldharbour"

-local FURC_CROWNSTORE_CRATE_F_ATRO		= "Crown Crates (Flame Atronach)"
+local FURC_SCAMBOX_F_ATRO		= zo_strformat("<<1>> (<<2>>)",
+                                                GetString(SI_FURC_SCAMBOX), GetString(SI_FURC_FLAME_ATRONACH))

-local FURC_CROWNSTORESOURCE				= "Crown Store "
-local FURC_CROWNSTORE_TEN				= FURC_CROWNSTORESOURCE .. "(10)"
-local FURC_CROWNSTORE_FIFTEEN			= FURC_CROWNSTORESOURCE .. "(15)"
-local FURC_CROWNSTORE_TWENTY			= FURC_CROWNSTORESOURCE .. "(20)"
-local FURC_CROWNSTORE_FOURTYFIVE		= FURC_CROWNSTORESOURCE .. "(45)"
-local FURC_CROWNSTORE_EIGHTY			= FURC_CROWNSTORESOURCE .. "(80)"
-local FURC_CROWNSTORE_NINETYFIVE		= FURC_CROWNSTORESOURCE .. "(95)"
-local FURC_CROWNSTORE_ONEHUNDRED		= FURC_CROWNSTORESOURCE .. "(100)"
-local FURC_CROWNSTORE_ONETWENTY			= FURC_CROWNSTORESOURCE .. "(120)"
-local FURC_CROWNSTORE_FOURHUNDRED		= FURC_CROWNSTORESOURCE .. "(400)"
-local FURC_CROWNSTORE_SEVENFIFTY		= FURC_CROWNSTORESOURCE .. "(750)"
-local FURC_CROWNSTORE_ONEK				= FURC_CROWNSTORESOURCE .. "(1000)"
-local FURC_CROWNSTORE_ONEONEHUNDRED		= FURC_CROWNSTORESOURCE .. "(1100)"

-local FURC_DAEDRA_SOURCE				= "from Daedra and Dolmen chests"
-local FURC_DB							= "The Dark Brotherhood supplies vendor hands these out "
-local FURC_DB_POISON					= FURC_DB .. "with poison"
-local FURC_DB_SNEAKY					= FURC_DB .. "as a way to be sneaky"
-
-local FURC_DAILY_ASHLANDERS			= "Ashlander daily quest rewards"
-
-local FURC_PLUNDERSKULL				= "Drops from Plunder Skulls during Witches' Festival"
-local FURC_DROP_CHEST_VVARDENFELL	= "From chests on Vvardenfell"
+local FURC_DB_POISON			= zo_strformat("<<1>> <<2>>", GetString(SI_FURC_DB), GetString(SI_FURC_DB_POISON))
+local FURC_DB_SNEAKY			= zo_strformat("<<1>> <<2>>", GetString(SI_FURC_DB), GetString(SI_FURC_DB_STEALTH))
+
+local function getCrownStorePriceString(price)
+    return string.format("%s (%u)", GetString(SI_FURC_CROWNSTORESOURCE), price)
+end
+
+local function getScamboxString(scamboxVersion)
+    return string.format("%s (%s)", GetString(SI_FURC_SCAMBOX), GetString(scamboxVersion))
+end


 FurC.MiscItemSources 	= {

 	[FURC_DRAGONS] = { -- Reach
-		[FURC_DROP] = {
-
-
-		},
-		[FURC_JUSTICE] 	= {
-		},
-		[FURC_CROWN] 	= {
-
-			[130212] = FURC_CROWNSTORE_ONEK, 		-- Daedric Worship: The Ayleids
-			[134970] = FURC_CROWNSTORE_ONEHUNDRED, 	-- Mushrooms, Glowing Sprawl
-			[134947] = FURC_CROWNSTORE_ONEHUNDRED, 	-- Mushrooms, Glowing Field
-			[134948] = FURC_CROWNSTORE_FOURHUNDRED,	-- Mushrooms, Glowing Cluster
-			[134971] = FURC_CROWNSTORE_FOURHUNDRED,	-- Candles, Votive Group
-			[134872] = FURC_CROWNSTORE_FOURHUNDRED,	-- Ancient Nord Brazier, Dragon Crest
-			[134863] = FURC_CROWNSTORE_FOURHUNDRED,	-- Ancient Nord Sconce, Dragon Crest
-			[134972] = FURC_CROWNSTORE_FOURHUNDRED,	-- Brotherhood Brazier, Wrought Iron
-			[134849] = FURC_CROWNSTORE_FOURHUNDRED,	-- Monarch Butterfly Flock
-			[134848] = FURC_CROWNSTORE_FOURHUNDRED,	-- Blue Butterfly Flock
-
+		[FURC_DROP] = {},
+		[FURC_JUSTICE] 	= {},
+		[FURC_CROWN] 	= {
+			[130212] = getCrownStorePriceString(1000), 	-- Daedric Worship: The Ayleids
+			[134970] = getCrownStorePriceString(100), 	-- Mushrooms, Glowing Sprawl
+			[134947] = getCrownStorePriceString(100), 	-- Mushrooms, Glowing Field
+			[134948] = getCrownStorePriceString(400),	-- Mushrooms, Glowing Cluster
+			[134971] = getCrownStorePriceString(400),	-- Candles, Votive Group
+			[134872] = getCrownStorePriceString(400),	-- Ancient Nord Brazier, Dragon Crest
+			[134863] = getCrownStorePriceString(400),	-- Ancient Nord Sconce, Dragon Crest
+			[134972] = getCrownStorePriceString(400),	-- Brotherhood Brazier, Wrought Iron
+			[134849] = getCrownStorePriceString(400),	-- Monarch Butterfly Flock
+			[134848] = getCrownStorePriceString(400),	-- Blue Butterfly Flock
+			[94100]  = getCrownStorePriceString(50),	-- Imperial Shelf, Swirled
 		}
 	},
 	[FURC_CLOCKWORK] = { -- Reach
@@ -82,37 +59,37 @@ FurC.MiscItemSources 	= {
 			[134408] = FURC_AUTOMATON_CC,			-- Factotum Elbow, Obsolete
 			[134405] = FURC_AUTOMATON_CC,			-- Factotum Arm, Obsolete
 			[134409] = FURC_AUTOMATON_CC,			-- Factotum Head, Obsolete
-			[134406] = FURC_AUTOMATON_CC,			-- Factotum Body, Obsolete
-
+			[134406] = FURC_AUTOMATON_CC,			-- Factotum Body, Obsolete

 		},
 		[FURC_JUSTICE] 	= {
-			[134411] = FURC_CANBESTOLENINCC, 		-- Ventilation shaft
-			[134415] = FURC_CANBESTOLENINCC, 		-- Clockwork Dial Calipers, Handheld
-			[134413] = FURC_CANBESTOLENINCC, 		-- Clockwork Magnifier, Handheld
-			[134412] = FURC_CANBESTOLENINCC, 		-- Clockwork Piston, Miniature
-			[134410] = FURC_CANBESTOLENINCC, 		-- Clockwork Crank, Miniature
-			[134411] = FURC_CANBESTOLENINCC, 		-- Clockwork Gear Shaft, Miniature
-			[134400] = FURC_CANBEPICKED, 			-- Soft Leather, Stacked
-			[134401] = FURC_CANBEPICKED, 			-- Soft Leather, Folded
-			[134417] = FURC_CANBEPICKED, 			-- Calipers, Handheld
-			[134399] = FURC_CANBEPICKED, 			-- Quality Fabric, Folded
-			[117939] = FURC_CANBEPICKED_WW, 		-- Rough Axe, Practical
+			[134411] = FURC_CANBESTOLENINCC, 		    -- Ventilation shaft
+			[134415] = FURC_CANBESTOLENINCC, 		    -- Clockwork Dial Calipers, Handheld
+			[134413] = FURC_CANBESTOLENINCC, 		    -- Clockwork Magnifier, Handheld
+			[134412] = FURC_CANBESTOLENINCC, 		    -- Clockwork Piston, Miniature
+			[134410] = FURC_CANBESTOLENINCC, 		    -- Clockwork Crank, Miniature
+			[134411] = FURC_CANBESTOLENINCC, 		    -- Clockwork Gear Shaft, Miniature
+			[134402] = GetString(SI_FURC_CANBESTOLEN), 	-- Spool, Empty
+			[134400] = GetString(SI_FURC_CANBESTOLEN), 	-- Soft Leather, Stacked
+			[134401] = GetString(SI_FURC_CANBESTOLEN), 	-- Soft Leather, Folded
+			[134417] = GetString(SI_FURC_CANBESTOLEN), 	-- Calipers, Handheld
+			[134399] = GetString(SI_FURC_CANBESTOLEN), 	-- Quality Fabric, Folded
+			[117939] = FURC_CANBESTOLEN_WW, 		    -- Rough Axe, Practical
 		},
 		[FURC_CROWN] 	= {
-			[134266] = FURC_CROWNSTORE_EIGHTY, 		-- Daedric Books, Stacked
-			[134265] = FURC_CROWNSTORE_EIGHTY, 		-- Daedric Books, Piled
+			[134266] = getCrownStorePriceString(80), 	-- Daedric Books, Stacked
+			[134265] = getCrownStorePriceString(80), 	-- Daedric Books, Piled

 		}
 	},

 	[FURC_REACH] = { -- Reach
 		[FURC_JUSTICE] 	= {
-			[130191] = FURC_CANBESTOLEN, 			-- Shivering Cheese
-			[118206] = FURC_CANBESTOLEN_THIEF, 		-- Gaming dice
+			[130191] = GetString(SI_FURC_CANBESTOLEN), 			-- Shivering Cheese
+			[118206] = FURC_CANBESTOLEN_THIEF, 		            -- Gaming dice
 		},
 		[FURC_CROWN] 	= {
-			[131423] = FURC_CROWNSTORE_SEVENFIFTY,
+			[131423] = getCrownStorePriceString(750),
 		},
 		[FURC_DROP] 	= {
 			-- Coldharbour items
@@ -124,7 +101,7 @@ FurC.MiscItemSources 	= {
 			[130281] = FURC_HARVEST_CHARBOR, 		-- Glowstalk, Towering
 			[130282] = FURC_HARVEST_CHARBOR, 		-- Glowstalk, Strong

-			[130067] = FURC_DAEDRA_SOURCE, 			-- Daedric Chain Segment
+			[130067] = GetString(SI_FURC_DAEDRA_SOURCE), 			-- Daedric Chain Segment
 		},

 	},
@@ -136,38 +113,38 @@ FurC.MiscItemSources 	= {
 			[126659] = FURC_AUTOMATON_VV, 			-- Dwemer Gear, Flat

 			-- lootable in tombs
-			[126754] = FURC_TOMBS, 					-- Velothi Shroud, Seeker
-			[126705] = FURC_TOMBS, 					-- Velothi Shroud, Wisdom
-			[126704] = FURC_TOMBS, 					-- Velothi Shroud, Majesty
-			[126706] = FURC_TOMBS, 					-- Velothi Shroud, Knowledge
-			[126701] = FURC_TOMBS, 					-- Velothi Shroud, Nerevar
-			[126764] = FURC_TOMBS, 					-- Velothi Shroud, Prowess
-			[126702] = FURC_TOMBS, 					-- Velothi Shroud, Reverance
-			[126700] = FURC_TOMBS, 					-- Velothi Shroud, Honor
-			[126703] = FURC_TOMBS, 					-- Velothi Shroud, Mourning
-			[126572] = FURC_TOMBS, 					-- Velothi Shroud, Mysteries
-
-			[126773] = FURC_TOMBS, 					-- Velothi Caisson, Crypt
-			[126753] = FURC_TOMBS,					-- Velothi Cerecloth, Austere
-			[126758] = FURC_TOMBS,					-- Velothi Mat, Prayer
-			[126757] = FURC_TOMBS,
-
-
-			[126467] = FURC_DROP_CHEST_VVARDENFELL,  -- Telvanni Painting, Modest Valley
-			[126464] = FURC_DROP_CHEST_VVARDENFELL,  -- Telvanni Painting, Oversized Valley
+			[126754] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Seeker
+			[126705] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Wisdom
+			[126704] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Majesty
+			[126706] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Knowledge
+			[126701] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Nerevar
+			[126764] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Prowess
+			[126702] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Reverance
+			[126700] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Honor
+			[126703] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Mourning
+			[126572] = GetString(SI_FURC_TOMBS), 					-- Velothi Shroud, Mysteries
+
+			[126773] = GetString(SI_FURC_TOMBS), 					-- Velothi Caisson, Crypt
+			[126753] = GetString(SI_FURC_TOMBS),					-- Velothi Cerecloth, Austere
+			[126758] = GetString(SI_FURC_TOMBS),					-- Velothi Mat, Prayer
+			[126757] = GetString(SI_FURC_TOMBS),
+
+
+			[126467] = GetString(SI_FURC_DROP_CHEST_VVARDENFELL),  -- Telvanni Painting, Modest Valley
+			[126464] = GetString(SI_FURC_DROP_CHEST_VVARDENFELL),  -- Telvanni Painting, Oversized Valley

 			-- Ashlander dailies
-			[126119] = FURC_DAILY_ASHLANDERS, 		-- Crimson Shard of Moonshadow
-			[126393] = FURC_DAILY_ASHLANDERS, 		-- Crimson Shard of Moonshadow
+			[126119] = GetString(SI_FURC_DAILY_ASHLANDERS), 		-- Crimson Shard of Moonshadow
+			[126393] = GetString(SI_FURC_DAILY_ASHLANDERS), 		-- Crimson Shard of Moonshadow

 			-- drops from plants
-			[125631] = FURC_PLANTS, 					-- Plants, Ash Frond
-			[125647] = FURC_PLANTS, 					-- Plants, Ash Frond
-			[131420] = FURC_PLANTS, 					-- Plants, Ash Frond
-			[125553] = FURC_PLANTS, 					-- Flowers, Netch Cabbage Stalks
-			[125551] = FURC_PLANTS, 					-- Flowers, Netch Cabbage
-			[125543] = FURC_PLANTS, 					-- Fern, Ashen
-			[125633] = FURC_PLANTS, 					-- Plants, Hanging Pitcher Pair
+			[125631] = GetString(SI_FURC_PLANTS), 					-- Plants, Ash Frond
+			[125647] = GetString(SI_FURC_PLANTS), 					-- Plants, Ash Frond
+			[131420] = GetString(SI_FURC_PLANTS), 					-- Plants, Ash Frond
+			[125553] = GetString(SI_FURC_PLANTS), 					-- Flowers, Netch Cabbage Stalks
+			[125551] = GetString(SI_FURC_PLANTS), 					-- Flowers, Netch Cabbage
+			[125543] = GetString(SI_FURC_PLANTS), 					-- Fern, Ashen
+			[125633] = GetString(SI_FURC_PLANTS), 					-- Plants, Hanging Pitcher Pair

 		},
 		[FURC_CROWN] 	= {
@@ -179,12 +156,12 @@ FurC.MiscItemSources 	= {
 	[FURC_HOMESTEAD]	= {
 		[FURC_JUSTICE] 	= {
 				-- stealing
-			[118489] = FURC_CANBESTOLEN_SCHOLARS, 	-- Papers, Stack
-			[118528] = FURC_CANBESTOLEN, 			-- Signed Contract
-			[118890] = FURC_CANBESTOLEN, 			-- Skull, Human
-			[118487] = FURC_CANBESTOLEN_SCHOLARS, 	-- Letter, Personal
-			[120008] = FURC_CANBESTOLEN_NERDS, 		-- Lesser Soul Gem, Empty
-			[120005] = FURC_CANBESTOLEN_NERDS, 		-- Medium Soul Gem, Empty
+			[118489] = FURC_CANBESTOLEN_SCHOLARS, 	        -- Papers, Stack
+			[118528] = GetString(SI_FURC_CANBESTOLEN), 		-- Signed Contract
+			[118890] = GetString(SI_FURC_CANBESTOLEN), 		-- Skull, Human
+			[118487] = FURC_CANBESTOLEN_SCHOLARS, 	        -- Letter, Personal
+			[120008] = FURC_CANBESTOLEN_NERDS, 		        -- Lesser Soul Gem, Empty
+			[120005] = FURC_CANBESTOLEN_NERDS, 		        -- Medium Soul Gem, Empty

 			-- Bounty Sheets
 			[118711] = FURC_CANBEPICKED_GUARD, 				-- Argonian Male
@@ -200,18 +177,18 @@ FurC.MiscItemSources 	= {
 		},
 		[FURC_FISHING] 	= {
 			-- fishing
-			[118902] = FURC_CANBEFISHED, 					-- Coral, Sun
-			[118903] = FURC_CANBEFISHED, 					-- Coral, Crown
-			[118896] = FURC_CANBEFISHED, 					-- Seashell, Sandcake
-			[118901] = FURC_CANBEFISHED, 					-- Sea sponge
-			[118338] = FURC_CANBEFISHED, 					-- Fish, Bass
-			[118339] = FURC_CANBEFISHED, 					-- Fish, Salmon
-			[118337] = FURC_CANBEFISHED, 					-- Fish, Trout
-			[120753] = FURC_CANBEFISHED, 					-- Kelp, Green Pile
-			[120755] = FURC_CANBEFISHED, 					-- Kelp, Lush Pile
-			[120754] = FURC_CANBEFISHED, 					-- Kelp, Small Pile
-			[118897] = FURC_CANBEFISHED, 					-- Seashell, Pink Scallop
-			[118898] = FURC_CANBEFISHED, 					-- Seashell, White Scallop
+			[118902] = GetString(SI_FURC_CANBEFISHED), 		-- Coral, Sun
+			[118903] = GetString(SI_FURC_CANBEFISHED), 		-- Coral, Crown
+			[118896] = GetString(SI_FURC_CANBEFISHED), 		-- Seashell, Sandcake
+			[118901] = GetString(SI_FURC_CANBEFISHED), 		-- Sea sponge
+			[118338] = GetString(SI_FURC_CANBEFISHED), 		-- Fish, Bass
+			[118339] = GetString(SI_FURC_CANBEFISHED), 		-- Fish, Salmon
+			[118337] = GetString(SI_FURC_CANBEFISHED), 		-- Fish, Trout
+			[120753] = GetString(SI_FURC_CANBEFISHED), 		-- Kelp, Green Pile
+			[120755] = GetString(SI_FURC_CANBEFISHED), 		-- Kelp, Lush Pile
+			[120754] = GetString(SI_FURC_CANBEFISHED), 		-- Kelp, Small Pile
+			[118897] = GetString(SI_FURC_CANBEFISHED), 		-- Seashell, Pink Scallop
+			[118898] = GetString(SI_FURC_CANBEFISHED), 		-- Seashell, White Scallop
 		},
 		[FURC_DROP]		= {
 			[121058] = FURC_DB_SNEAKY, 						-- Candles of Silence
@@ -221,38 +198,37 @@ FurC.MiscItemSources 	= {
 			[119952] = FURC_DB_POISON, 						-- Sacrificial Heart
 		},
 		[FURC_CROWN]	= {
-			[118096] = FURC_CROWNSTORE_TEN, 				-- Bread, Plain
-			[118098] = FURC_CROWNSTORE_TEN, 				-- Common Bowl, Serving
-			[118061] = FURC_CROWNSTORE_FIFTEEN, 			-- Chicken Dinner, Display
-			[118062] = FURC_CROWNSTORE_FIFTEEN, 			-- Chicken Meal, Display
-			[118056] = FURC_CROWNSTORE_FIFTEEN, 			-- Common Stewpot, Hanging
-			[118121] = FURC_CROWNSTORE_FIFTEEN, 			-- Knife, Carving
-			[118066] = FURC_CROWNSTORE_FIFTEEN, 			-- Steak Dinner
+			[118096] = getCrownStorePriceString(10), 			-- Bread, Plain
+			[118098] = getCrownStorePriceString(10), 			-- Common Bowl, Serving
+			[118061] = getCrownStorePriceString(15), 			-- Chicken Dinner, Display
+			[118062] = getCrownStorePriceString(15), 			-- Chicken Meal, Display
+			[118056] = getCrownStorePriceString(15), 			-- Common Stewpot, Hanging
+			[118121] = getCrownStorePriceString(15), 			-- Knife, Carving
+			[118066] = getCrownStorePriceString(15), 			-- Steak Dinner

-			[118057] = FURC_CROWNSTORE_TWENTY, 				-- Sack of Beans
-			[118060] = FURC_CROWNSTORE_TWENTY, 				-- Sack of Grain
-			[118059] = FURC_CROWNSTORE_TWENTY, 				-- Sack of Millet,
-			[118058] = FURC_CROWNSTORE_TWENTY, 				-- Sack of Rice
+			[118057] = getCrownStorePriceString(20), 				-- Sack of Beans
+			[118060] = getCrownStorePriceString(20), 				-- Sack of Grain
+			[118059] = getCrownStorePriceString(20), 				-- Sack of Millet,
+			[118058] = getCrownStorePriceString(20), 				-- Sack of Rice

-			[134473] = FURC_CROWNSTORE_CRATE_F_ATRO, 			-- Malacath Banner
+			[134473] = getScamboxString(SI_FURC_FLAME_ATRONACH),    -- Malacath Banner



-			[118064] = FURC_CROWNSTORE_FOURTYFIVE, 			-- Common Barrel, Dry
-			[118065] = FURC_CROWNSTORE_FOURTYFIVE, 			-- Common Cargo Crate, Dry
-			[118064] = FURC_CROWNSTORE_FOURTYFIVE, 			-- Common Barrel, Dry
+			[118064] = getCrownStorePriceString(45), 			-- Common Barrel, Dry
+			[118065] = getCrownStorePriceString(45), 			-- Common Cargo Crate, Dry
+			[118064] = getCrownStorePriceString(45), 			-- Common Barrel, Dry

-			[118053] = FURC_CROWNSTORE_EIGHTY, 				-- Common Campfire, Outdoor
-			[118054] = FURC_CROWNSTORE_EIGHTY, 				-- Common Firepit, Outdoor
-			[118055] = FURC_CROWNSTORE_EIGHTY, 				-- Common Firepit, Piled
-			[118126] = FURC_CROWNSTORE_NINETYFIVE, 			-- Plaque, Standard
+			[118054] = getCrownStorePriceString(80), 			-- Common Firepit, Outdoor
+			[118055] = getCrownStorePriceString(80), 			-- Common Firepit, Piled
+			[118126] = getCrownStorePriceString(95), 			-- Plaque, Standard

-			[118068] = FURC_CROWNSTORE_ONETWENTY, 			-- Simple Brown Banner
-			[118069] = FURC_CROWNSTORE_ONETWENTY, 			-- Simple Gray Banner
-			[118071] = FURC_CROWNSTORE_ONETWENTY, 			-- Simple Red Banner
-			[118070] = FURC_CROWNSTORE_ONETWENTY, 			-- Simple Purple Banner
+			[118068] = getCrownStorePriceString(120), 			-- Simple Brown Banner
+			[118069] = getCrownStorePriceString(120), 			-- Simple Gray Banner
+			[118071] = getCrownStorePriceString(120), 			-- Simple Red Banner
+			[118070] = getCrownStorePriceString(120), 			-- Simple Purple Banner

-			[115698] = FURC_CROWNSTORE_ONEONEHUNDRED, 		-- Khajiit Statue, Guardian
+			[115698] = getCrownStorePriceString(1100), 		-- Khajiit Statue, Guardian
 		}
 	},
 }
diff --git a/FurnitureCatalogue/data/RumourRecipes.lua b/FurnitureCatalogue/data/RumourRecipes.lua
index 0029475..32cb800 100644
--- a/FurnitureCatalogue/data/RumourRecipes.lua
+++ b/FurnitureCatalogue/data/RumourRecipes.lua
@@ -24,7 +24,6 @@ FurC.RumourRecipes = {
 	116474, -- Orcish Effigy, Bear
 	116433, -- Orcish Table with Fur_S

-	118053, -- Common Campfire, Outdoor
 	118065, -- Common Cargo Crate, Dry
 	118054, -- Common Firepit, Outdoor
 	118055, -- Common Firepit, Piled
@@ -52,7 +51,6 @@ FurC.RumourRecipes = {

 	121161, -- Ram Horns, Mounted
 	121216, -- Redguard Divider, Gilded
-	127032, -- Dres Carpet, Fertile Peat

 	118118, -- Candles, Lasting
 	115395, -- Nord Drinking Horn, Display
diff --git a/FurnitureCatalogue/locale/de.lua b/FurnitureCatalogue/locale/de.lua
index 5997bda..ad33923 100644
--- a/FurnitureCatalogue/locale/de.lua
+++ b/FurnitureCatalogue/locale/de.lua
@@ -96,6 +96,7 @@ local strings = {
 	SI_FURC_STRING_MENU_LUXURY_WARN = 			"Hiding the dropdown entry requires UI reload (won't happen automatically for your convenience)",
 	SI_FURC_STRING_MENU_RUMOUR = 				"Rumour recipes",
 	SI_FURC_STRING_MENU_RUMOUR_DESC = 		 	"The furniture database contains a list of recipes that I have datamined.\nHowever, not all of those have been seen in-game.\nEnable this option to exclude them from the default filters.\nYou can still view them with their own filter, which you can disable below.",
+	SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT =    "Search filtered items when doing a text search with no dropdown filters set?",

 	SI_FURC_STRING_MENU_RUMOUR_N = 				"Hide rumour recipes?",
 	SI_FURC_STRING_MENU_CROWN = 				"Crown store items",
diff --git a/FurnitureCatalogue/locale/en.lua b/FurnitureCatalogue/locale/en.lua
index 1f9d70c..2172dd2 100644
--- a/FurnitureCatalogue/locale/en.lua
+++ b/FurnitureCatalogue/locale/en.lua
@@ -123,7 +123,22 @@ local strings = {
 	SI_FURC_STRING_MENU_CROWN = 				"Crown store items",
 	SI_FURC_STRING_MENU_CROWN_N = 				"Hide crown store items?",
 	SI_FURC_STRING_MENU_CROWN_DESC = 			"The furniture database will update whenever the tooltip shows a furniture item. \nSome items can only be acquired via crown store. \nCheck this box to exclude them from the default filters (disable crown store filter below).",
-
+
+    -- Filter text search
+    SI_FURC_STRING_MENU_HEADER_F_ALL_ON_TEXT =  "Filter settings for text search",
+    SI_FURC_STRING_MENU_F_ALL_ON_TEXT =         "Configure this filter",
+    SI_FURC_STRING_MENU_HEADER_F_ALL_DESC =     "Configure filter settings for text search with disabled dropdowns. \nThese settings will only take effect when you have not set a source, character or version filter.",
+
+    SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT =    "Search filtered items when doing a text search with no dropdown filters set?",
+    SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT_TT = "When doing a text search without any dropdown ",
+    SI_FURC_STRING_MENU_FALL_HIDE_BOOKS =       "Hide books anyway",
+    SI_FURC_STRING_MENU_FALL_HIDE_BOOKS_TT =    "Even when filtering all items, still hide books?",
+    SI_FURC_STRING_MENU_FALL_HIDE_CROWN =       "Hide crown store items anyway",
+    SI_FURC_STRING_MENU_FALL_HIDE_CROWN_TT =    "Even when filtering all items, still hide crown store items?",
+    SI_FURC_STRING_MENU_FALL_HIDE_RUMOUR =      "Hide rumour items anyway",
+    SI_FURC_STRING_MENU_FALL_HIDE_RUMOUR_TT =   "Even when filtering all items, still hide rumour items?",
+
+    -- Hide menu entries
 	SI_FURC_STRING_MENU_HIDE_MENU = 				"Hide menu entries?",
 	SI_FURC_STRING_MENU_HIDE_MENU_TT = 				"Hides \"Crown store\" and \"Rumour recipes\" from the dropdown \nactivated for crown store by default, as there aren't any items yet",
 	SI_FURC_STRING_MENU_HIDE_MENU_RUMOUR = 			"Hide \"Rumour recipes\" drop down entry?",
@@ -196,6 +211,27 @@ local strings = {
 	-- =============================== --

 	SI_FURC_LABEL_ENTRIES							= " entries -",
+
+    -- =============================== --
+	-- ========= Item Sources ======== --
+	-- =============================== --
+	SI_FURC_CANBEPICKED 					        = "can be pickpocketed",
+	SI_FURC_CANBESTOLEN 					        = "can be stolen",
+    SI_FURC_CROWNSTORESOURCE				        = "Crown Store ",
+    SI_FURC_CANBEFISHED				                = "can be fished",
+    SI_FURC_HARVEST				                    = "from harvesting nodes",
+    SI_FURC_PLANTS						            = "from harvesting plants",
+    SI_FURC_SCAMBOX						            = "Crown Crates",
+    SI_FURC_AUTOMATON						        = "from automatons",
+    SI_FURC_TOMBS 						            = "Ancestor tombs and ruins on Vvardenfell",
+    SI_FURC_DAEDRA_SOURCE 						    = "from Daedra and Dolmen chests",
+    SI_FURC_DB					                    = "The Dark Brotherhood supplies vendor hands these out ",
+    SI_FURC_DB_POISON					            = "with poison",
+    SI_FURC_DB_STEALTH					            = "as a way to be less obtrusive",
+    SI_FURC_DAILY_ASHLANDERS			            = "Ashlander daily quest rewards",
+    SI_FURC_PLUNDERSKULL			                = "Drops from Plunder Skulls during Witches' Festival",
+    SI_FURC_DROP_CHEST_VVARDENFELL	                = "From chests on Vvardenfell",
+    SI_FURC_FLAME_ATRONACH	                        = "Flame Atronach",
 }


diff --git a/FurnitureCatalogue/locale/fr.lua b/FurnitureCatalogue/locale/fr.lua
index 2a98ebb..f7de8da 100644
--- a/FurnitureCatalogue/locale/fr.lua
+++ b/FurnitureCatalogue/locale/fr.lua
@@ -102,6 +102,7 @@ local strings = {
 	SI_FURC_STRING_MENU_CROWN = 				"Crown store items",
 	SI_FURC_STRING_MENU_CROWN_N = 				"Hide crown store items?",
 	SI_FURC_STRING_MENU_CROWN_DESC = 			"The furniture database will update whenever the tooltip shows a furniture item. \nSome items can only be acquired via crown store. \nCheck this box to exclude them from the default filters (disable crown store filter below).",
+	SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT =    "Search filtered items when doing a text search with no dropdown filters set?",

 	SI_FURC_STRING_MENU_HIDE_MENU = 				"Hide menu entries?",
 	SI_FURC_STRING_MENU_HIDE_MENU_TT = 				"Hides \"Crown store\" and \"Rumour recipes\" from the dropdown \nactivated for crown store by default, as there aren't any items yet",
diff --git a/FurnitureCatalogue/locale/jp.lua b/FurnitureCatalogue/locale/jp.lua
index b6d46ea..b231d86 100644
--- a/FurnitureCatalogue/locale/jp.lua
+++ b/FurnitureCatalogue/locale/jp.lua
@@ -102,6 +102,7 @@ local strings = {
 	SI_FURC_STRING_MENU_CROWN = 				"Crown store items",
 	SI_FURC_STRING_MENU_CROWN_N = 				"Hide crown store items?",
 	SI_FURC_STRING_MENU_CROWN_DESC = 			"The furniture database will update whenever the tooltip shows a furniture item. \nSome items can only be acquired via crown store. \nCheck this box to exclude them from the default filters (disable crown store filter below).",
+	SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT =    "Search filtered items when doing a text search with no dropdown filters set?",

 	SI_FURC_STRING_MENU_HIDE_MENU = 				"Hide menu entries?",
 	SI_FURC_STRING_MENU_HIDE_MENU_TT = 				"Hides \"Crown store\" and \"Rumour recipes\" from the dropdown \nactivated for crown store by default, as there aren't any items yet",
diff --git a/FurnitureCatalogue/locale/ru.lua b/FurnitureCatalogue/locale/ru.lua
index b6d46ea..920c51c 100644
--- a/FurnitureCatalogue/locale/ru.lua
+++ b/FurnitureCatalogue/locale/ru.lua
@@ -97,6 +97,7 @@ local strings = {
 	SI_FURC_STRING_MENU_LUXURY_WARN = 			"Hiding the dropdown entry requires UI reload (won't happen automatically for your convenience)",
 	SI_FURC_STRING_MENU_RUMOUR = 				"Rumour recipes",
 	SI_FURC_STRING_MENU_RUMOUR_DESC = 		 	"The furniture database contains a list of recipes that I have datamined.\nHowever, not all of those have been seen in-game.\nEnable this option to exclude them from the default filters.\nYou can still view them with their own filter, which you can disable below.",
+	SI_FURC_STRING_MENU_FILTER_ALL_ON_TEXT =    "Search filtered items when doing a text search with no dropdown filters set?",

 	SI_FURC_STRING_MENU_RUMOUR_N = 				"Hide rumour recipes?",
 	SI_FURC_STRING_MENU_CROWN = 				"Crown store items",
diff --git a/FurnitureCatalogue/startup.lua b/FurnitureCatalogue/startup.lua
index 482cb01..b7b6461 100644
--- a/FurnitureCatalogue/startup.lua
+++ b/FurnitureCatalogue/startup.lua
@@ -73,7 +73,7 @@ local defaults 						= {
 	hideDoubtfuls					= true,
 	hideCrownstore					= true,
 	hideRumourEntry					= false,
-	hideCrownStoreEntry				= true,
+	hideCrownStoreEntry				= false,
 	wipeDatabase					= false,
 	startupSilently					= true,

@@ -103,10 +103,22 @@ FURC_GUILDSTORE 		= FURC_FISHING +1
 FURC_FESTIVAL_DROP 		= FURC_GUILDSTORE +1

 local function updateSourceIndices()
-	FURC_CROWN 				= FURC_PVP + tonumber((FurC.GetHideCrownStoreEntry() and 0) or 1)
-	FURC_RUMOUR 			= FURC_CROWN + tonumber((FurC.GetHideRumourRecipesEntry() and 0) or 1)
-	FURC_LUXURY 			= FURC_RUMOUR + tonumber((FurC.GetMergeLuxuryAndSales() and 0) or 1)
-	FURC_OTHER 				= FURC_LUXURY +1
+
+    local previousIndex = FURC_PVP
+    if not FurC.GetHideCrownStoreEntry() then
+        FURC_CROWN 				= previousIndex + 1
+        previousIndex           = FURC_CROWN
+    end
+    if not FurC.GetHideRumourRecipesEntry() then
+        FURC_RUMOUR 			= previousIndex + 1
+        previousIndex           = FURC_RUMOUR
+    end
+    if not FurC.GetMergeLuxuryAndSales() then
+        FURC_LUXURY 			= previousIndex + 1
+        previousIndex           = FURC_LUXURY
+    end
+
+	FURC_OTHER 				= previousIndex +1
 	FURC_ROLLIS 			= FURC_OTHER +1
 	FURC_WRIT_VENDOR 		= FURC_ROLLIS +1
 	FURC_DROP 				= FURC_WRIT_VENDOR +1
@@ -165,6 +177,7 @@ local function getChoicesSource()
 	end
 	return choicesSource
 end
+FurC.GetChoicesSource = getChoicesSource

 local tooltipsSource = {}
 local function getTooltipsSource()
@@ -229,7 +242,7 @@ local function setupSourceDropdown()
 	updateDropdownData()
 	sourceIndices = {}

-	for idx, key in pairs(getSourceIndicesKeys()) do
+	for idx, key in ipairs(getSourceIndicesKeys()) do
 		sourceIndices[key] = idx
 	end
 	FurC.SourceIndices = sourceIndices
@@ -306,6 +319,8 @@ function FurnitureCatalogue_Initialize(eventCode, addOnName)
 	FurC.RegisterEvents()

 	FurnitureCatalogue.InitGui()
+    FurC.SetHideRumourRecipesEntry(false)
+    FurC.SetHideCrownStoreEntry(false)
 	
	FurnitureCatalogue.CreateTooltips()
 	FurC.InitRightclickMenu()