added auto quest accept/turnin, fixed disconnect by using asynchroneous chat handling

git [04-08-18 - 22:17]
added auto quest accept/turnin, fixed disconnect by using asynchroneous chat handling
Filename
DailyAutoShare/DASData.lua
DailyAutoShare/DASMenu.lua
DailyAutoShare/DASUserSettingsAdapter.lua
DailyAutoShare/DailyAutoShare.txt
DailyAutoShare/DasGui.lua
DailyAutoShare/locale/de.lua
DailyAutoShare/locale/en.lua
DailyAutoShare/locale/fr.lua
DailyAutoShare/locale/jp.lua
DailyAutoShare/locale/ru.lua
DailyAutoShare/questData/ClockworkCity.lua
DailyAutoShare/questData/GoldCoast.lua
DailyAutoShare/questData/HewsBane.lua
DailyAutoShare/questData/Morrowind.lua
DailyAutoShare/questData/Wrothgar.lua
DailyAutoShare/startup.lua
diff --git a/DailyAutoShare/DASData.lua b/DailyAutoShare/DASData.lua
index ecd4d34..d865809 100644
--- a/DailyAutoShare/DASData.lua
+++ b/DailyAutoShare/DASData.lua
@@ -4,14 +4,20 @@ local p = DAS.debug

 DAS.subzones = {
 	-- Morrowind
+	[921]			= 849,		-- Khartag Point
 	[922]			= 849,		-- Zainsipilu
 	[923]			= 849,		-- Zainsipilu
 	[924]			= 849,		-- Zainsipilu

+    -- CC
 	[985]			= 980,		-- Halls of Regulation
 	[986]			= 980,		-- Shadow Cleft
 	[993]			= 980,		-- Planisphere

+    -- Gold Coast
+	[824]			= 823,		-- Hrota Cave
+
+    -- Wrothgar
 	[689]			= 684,		-- Nikolovara's Kennel
 	[690]			= 684,		--
 	[691]			= 684,		--
@@ -45,7 +51,9 @@ function DAS.RefreshFullBingoString()
     for _, questName in ipairs(DAS.GetActiveQuestNames()) do
         ret = ret .. DAS.GetBingoStringFromQuestName(questName) .. " "
     end
-    ret = ret .. "+any"
+    if (#ret > 0) then
+        ret = ret .. "+any"
+    end
     DAS.fullBingoString = ret
 end

diff --git a/DailyAutoShare/DASMenu.lua b/DailyAutoShare/DASMenu.lua
index e314459..c4f7fbb 100644
--- a/DailyAutoShare/DASMenu.lua
+++ b/DailyAutoShare/DASMenu.lua
@@ -4,9 +4,9 @@ function DAS.CreateMenu(savedVars, defaults)

 	local LAM = LibStub:GetLibrary("LibAddonMenu-2.0")
 	local panelData = {
-		type = "panel",
-		name = DAS.name,
-		displayName = name,
+		type    = "panel",
+		name    = DAS.name,
+		displayname    = name,
 	 	author = DAS.author,
 		version = DAS.version,
 		slashCommand = "/das",
@@ -16,40 +16,40 @@ function DAS.CreateMenu(savedVars, defaults)

 	local optionsData = { -- optionsData
 		{ -- Use global configuration?
-			type = "checkbox",
-			name = "Turn on debugging?",
+			type    = "checkbox",
+			name    = "Turn on debugging?",
 			getFunc = function() return DAS.GetDebugMode() end,
 			setFunc = function(value) DAS.SetDebugMode(value) end
 		},

 		{ -- header: Use global variables?
-			type = "header",
-			name = "Use global variables?"
+			type    = "header",
+			name    = "Use global variables?"
 		},
 		{ -- Use global configuration?
-			type = "checkbox",
+			type    = "checkbox",
 			tooltip = "Use the same settings for all characters?",
-			name = "Use global configuration?",
+			name    = "Use global configuration?",
 			getFunc = function() return DAS.GetUseGlobalSettings() end,
 			setFunc = function(value) DAS.SetUseGlobalSettings(value) end
 			},
 		{ -- header: Show/Hide?
-			type = "header",
-			name = "Show/Hide?"
+			type    = "header",
+			name    = "Show/Hide?"
 		},
 		{ -- checkbox: Hide UI window
-			type = "checkbox",
-			name = "Hide UI window",
+			type    = "checkbox",
+			name    = "Hide UI window",
 			getFunc = function() return DAS.GetHidden() end,
 			setFunc = function(value) DAS.SetHidden(value) end
 		},
 		{ -- header: be elaborate?
-			type = "header",
-			name = "Speak English instead of bingo?"
+			type    = "header",
+			name    = "Speak English instead of bingo?"
 		},
 		{ -- checkbox: don't use bingo
-			type = "checkbox",
-			name = "Soeak in whole sentences?",
+			type    = "checkbox",
+			name    = "Soeak in whole sentences?",
 			tooltip = "While this is optional, you will sound far less ludicrous if you don't talk like a telegram.\nIf you don't know what that is, please get older before unchecking this box.",
 			getFunc = function() return not DAS.GetSpeakStupid() end,
 			setFunc = function(value) DAS.SetSpeakStupid(not value) end
@@ -57,14 +57,14 @@ function DAS.CreateMenu(savedVars, defaults)


 		{ -- header: activate add-on in...
-			type = "submenu",
-			name = "Activate auto quest stuff in...",
+			type    = "submenu",
+			name    = "Activate auto quest stuff in...",
 			controls = {

 				{ -- checkbox: Clockwork City?
-					type = "checkbox",
+					type    = "checkbox",
 					tooltip = "Clockwork City?",
-					name = "Activate in Clockwork City?",
+					name    = "Activate in Clockwork City?",
 					getFunc = function() return DAS.GetActiveIn(980) end,
 					setFunc = function(value)
 						DAS.SetActiveIn(980, value)
@@ -73,13 +73,13 @@ function DAS.CreateMenu(savedVars, defaults)
 					end
 				},
 				{
-					type = "submenu",
-					name = "Clockwork City",
+					type    = "submenu",
+					name    = "Clockwork City",
 					controls = {
                         { -- checkbox: Clockwork City?
-                            type = "checkbox",
+                            type    = "checkbox",
                             tooltip = "activate",
-                            name = "Activate in Clockwork City?",
+                            name    = "Activate in Clockwork City?",
                             getFunc = function() return DAS.GetActiveIn(980) end,
                             setFunc = function(value)
                                 DAS.SetActiveIn(980, value)
@@ -87,49 +87,49 @@ function DAS.CreateMenu(savedVars, defaults)
                                 DAS.SetActiveIn(983, value)
                             end
                         },
-						{ -- header: Ashlander: Relics
-							type = "header",
-							name = "Worldbosses"
+						{ -- header: CC Worldbosses
+							type    = "header",
+							name    = "Worldbosses"
 						},
 						{ -- checkbox: relic
-							type = "checkbox",
+							type    = "checkbox",
 							tooltip = "Enable world boss dailies",
-							name = "Enable?",
+							name    = "Enable?",
 							getFunc = function() return DAS.GetQuestListItem(980, "boss", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "boss", "active", value) end
 						},
 						{ -- checkbox: relic
-							type = "checkbox",
-							name = "Hide",
+							type    = "checkbox",
+							name    = "Hide",
 							tooltip = "Don't show world boss dailies on UI list \nKeeps sharing on group invite",
 							getFunc = function() return DAS.GetQuestListItem(980, "boss", "invisible")end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "boss", "invisible", value) end
 						},
-						{ -- header: Slagtown gathering dailies
-							type = "header",
-							name = "Slagtown: Gathering dailies"
+						{ -- header: CC Slagtown gathering dailies
+							type    = "header",
+							name    = "Slagtown: Gathering dailies"
 						},
 						{ -- checkbox: Slagtown gathering dailies
-							type = "checkbox",
-							name = "Enable?",
+							type    = "checkbox",
+							name    = "Enable?",
 							tooltip = "Slagtown gathering dailies?",
 							getFunc = function() return DAS.GetQuestListItem(980, "craft", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "craft", "active", value) end
 						},
 						{ -- checkbox: Hide Slagtown gathering dailies
-							type = "checkbox",
-							name = "Hide",
+							type    = "checkbox",
+							name    = "Hide",
 							tooltip = "Don't show Slagtown gathering dailies on UI list",
 							getFunc = function() return DAS.GetQuestListItem(980, "craft", "invisible") end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "craft", "invisible", value) end
 						},
 						{ -- header: CC: Delves
-							type = "header",
-							name = "Clockwork City: Delves"
+							type    = "header",
+							name    = "Clockwork City: Delves"
 						},
 						{ -- checkbox: delve
-							type = "checkbox",
-							name = "Enable?",
+							type    = "checkbox",
+							name    = "Enable?",
 							tooltip = "Clockwork City delve dailies?",
 							getFunc = function() return DAS.GetQuestListItem(980, "delve", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "delve", "active", value) end
@@ -143,19 +143,19 @@ function DAS.CreateMenu(savedVars, defaults)
 							setFunc = function(value) DAS.SetQuestListItem(980, "delve", "invisible", value) end
 						},
 						{ -- header: Vivec: Delves
-							type = "header",
-							name = "Clockwork City: Crow"
+							type    = "header",
+							name    = "Clockwork City: Crow"
 						},
 						{ -- checkbox: Clockwork City crow
-							type = "checkbox",
-							name = "Enable?",
+							type    = "checkbox",
+							name    = "Enable?",
 							tooltip = "Enable Clockwork City crow dailies?",
 							getFunc = function() return DAS.GetQuestListItem(980, "crow", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "crow", "active", value) end
 						},
 						{ -- checkbox: Clockwork City crow hide
-							type = "checkbox",
-							name = "Hide?",
+							type    = "checkbox",
+							name    = "Hide?",
 							tooltip = "Don't show Clockwork City crow dailies on UI list",
 							getFunc = function() return DAS.GetQuestListItem(980, "crow", "invisible") end,
 							setFunc = function(value) DAS.SetQuestListItem(980, "crow", "invisible", value) end
@@ -163,84 +163,84 @@ function DAS.CreateMenu(savedVars, defaults)
 					},
 				},
 				{ -- checkbox: Morrowind
-					type = "checkbox",
+					type    = "checkbox",
 					tooltip = "Vvardenfell?",
-					name = "Activate in Vvardenfell?",
+					name    = "Activate in Vvardenfell?",
 					getFunc = function() return DAS.GetActiveIn(849) end,
 					setFunc = function(value) DAS.SetActiveIn(849, value) end
 				},
 				{
-					type = "submenu",
-					name = "Vvardenfell",
-					controls = {
+					type        = "submenu",
+					name        = "Vvardenfell",
+					controls    = {
 						{ -- header: Ashlander: Relics
-							type = "header",
-							name = "Ashlander: Relics"
+							type    = "header",
+							name    = "Ashlander: Relics"
 						},
 						{ -- checkbox: relic
-							type = "checkbox",
+							type    = "checkbox",
 							tooltip = "Go relic hunting for the Urshilaku?",
-							name = "Enable?",
+							name    = "Enable?",
 							getFunc = function() return DAS.GetQuestListItem(849, "relic", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "relic", "active", value) end
 						},
 						{ -- checkbox: relic
-							type = "checkbox",
-							name = "Hide",
+							type    = "checkbox",
+							name    = "Hide",
 							tooltip = "Don't show Ashlander relic dailies on UI list \nKeeps sharing on group invite",
 							getFunc = function() return DAS.GetQuestListItem(849, "relic", "invisible")end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "relic", "invisible", value) end
 						},
 						{ -- header: Ashlander: Hunt
-							type = "header",
-							name = "Ashlander: Hunt"
+							type    = "header",
+							name    = "Ashlander: Hunt"
 						},
 						{ -- checkbox: Wrothgar
-							type = "checkbox",
-							name = "Enable?",
+							type    = "checkbox",
+							name    = "Enable?",
 							tooltip = "Ashlander hunt dailies?",
 							getFunc = function() return DAS.GetQuestListItem(849, "hunt", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "hunt", "active", value) end
 						},
 						{ -- checkbox: Wrothgar
-							type = "checkbox",
-							name = "Hide",
+							type    = "checkbox",
+							name    = "Hide",
 							tooltip = "Don't show Ashlander hunt dailies on UI list",
 							getFunc = function() return DAS.GetQuestListItem(849, "hunt", "invisible") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "hunt", "invisible", value) end
 						},
 						{ -- header: Vivec: Delves
-							type = "header",
-							name = "Vivec: Delves"
+							type    = "header",
+							name    = "Vivec: Delves"
 						},
 						{ -- checkbox: Wrothgar
-							type = "checkbox",
-							name = "Enable?",
+							type    = "checkbox",
+							name    = "Enable?",
 							tooltip = "Hall of Justice delve dailies?",
 							getFunc = function() return DAS.GetQuestListItem(849, "delve", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "delve", "active", value) end
 						},
 						{ -- checkbox: Vivec: Delves
-							type = "checkbox",
-							name = "Hide?",
+							type    = "checkbox",
+							name    = "Hide?",
 							tooltip = "Don't show Hall of Justice delve dailies on UI list",
 							getFunc = function() return DAS.GetQuestListItem(849, "delve", "invisible") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "delve", "invisible", value) end
 						},
 						{ -- header: Vivec: Delves
-							type = "header",
-							name = "Vivec: Worldbosses"
+							type    = "header",
+							name    = "Vivec: Worldbosses"
 						},
 						{ -- checkbox: Wrothgar
-							type = "checkbox",
-							name = "Enable?",
+							type    = "checkbox",
+							name    = "Enable?",
 							tooltip = "Enable Hall of Justice boss dailies?",
 							getFunc = function() return DAS.GetQuestListItem(849, "boss", "active") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "boss", "active", value) end
 						},
 						{ -- checkbox: Wrothgar
-							type = "checkbox",
-							name = "Hide?",
+							type    = "checkbox",
+							name    = "Hide?",
 							tooltip = "Don't show Hall of Justice boss dailies on UI list",
 							getFunc = function() return DAS.GetQuestListItem(849, "boss", "invisible") end,
 							setFunc = function(value) DAS.SetQuestListItem(849, "boss", "invisible", value) end
@@ -248,33 +248,33 @@ function DAS.CreateMenu(savedVars, defaults)
 					},
 				},
 				{ -- checkbox: Wrothgar
-					type = "checkbox",
+					type    = "checkbox",
 					tooltip = "Wrothgar?",
-					name = "Activate in Wrothgar?",
+					name    = "Activate in Wrothgar?",
 					getFunc = function() return DAS.GetActiveIn(684) end,
 					setFunc = function(value) DAS.SetActiveIn(684, value) end
 				},
 				{ -- checkbox: The Gold Coast
-					type = "checkbox",
+					type    = "checkbox",
 					tooltip = "The Gold Coast?",
-					name = "Activate in The Gold Coast?",
+					name    = "Activate in The Gold Coast?",
 					getFunc = function() return DAS.GetActiveIn(823) end,
 					setFunc = function(value) DAS.SetActiveIn(823, value) end
 				},
 				{ -- checkbox: The Gold Coast
-					type = "checkbox",
+					type    = "checkbox",
 					tooltip = "Craglorn?",
-					name = "Activate in Craglorn?",
+					name    = "Activate in Craglorn?",
 					getFunc = function() return DAS.GetActiveIn(888) end,
 					setFunc = function(value) DAS.SetActiveIn(888, value) end
 				},
 				{
-					type = "submenu",
-					name = "Festivals",
+					type        = "submenu",
+					name        = "Festivals",
 					controls = {
 						{ -- checkbox: relic
-							type = "checkbox",
-							name = "New Life",
+							type    = "checkbox",
+							name    = "New Life",
 							tooltip = "Enable New Life festival",
 							getFunc = function() return DAS.GetActiveIn(101) end,
 							setFunc = function(value)
@@ -288,52 +288,52 @@ function DAS.CreateMenu(savedVars, defaults)


 		{ -- header: Use global variables?
-			type = "header",
-			name = "User UI settings"
+			type    = "header",
+			name    = "User UI settings"
 		},

 		{ -- submenu: User UI settings
-			type = "submenu",
-			name = "Look and feel and behavior",
-			controls = {
+			type        = "submenu",
+			name        = "Look and feel and behavior",
+			controls    = {

 				{ -- checkbox: Lock UI window
-					type = "checkbox",
-					name = "Lock UI window",
+					type    = "checkbox",
+					name    = "Lock UI window",
 					getFunc = function() return DAS.GetLocked() end,
 					setFunc = function(value) DAS.SetLocked(value) end
 				},
 				{ -- checkbox: Tooltip position
-					type = "checkbox",
-					name = "Tooltip to the right?",
+					type    = "checkbox",
+					name    = "Tooltip to the right?",
 					tooltip = "Check this box to display the tooltip on the left side of the window",
 					getFunc = function() return DAS.GetTooltipRight() end,
 					setFunc = function(value) DAS.SetTooltipRight(value) end
 				},
 				{ -- checkbox: Reposition DropDown
-					type = "checkbox",
-					name = "DropUp instead of DropDown?",
+					type    = "checkbox",
+					name    = "DropUp instead of DropDown?",
 					tooltip = "Check this if you want the questList to appear above the drag bar instead of below",
 					getFunc = function() return DAS.GetUpsideDown() end,
 					setFunc = function(value) DAS.SetUpsideDown(value) end
 				},
 				{ -- checkbox: AutoHide
-					type = "checkbox",
-					name = "Auto-hide when no open daily present?",
+					type    = "checkbox",
+					name    = "Auto-hide when no open daily present?",
 					tooltip = "Check this if you want the DASWindow to be hidden when you're done",
 					getFunc = function() return DAS.GetAutoHide() end,
 					setFunc = function(value) DAS.SetAutoHide(value) end
 				},
 				{ -- checkbox: AutoMinimize
-					type = "checkbox",
-					name = "Auto-minimize when no open daily present?",
+					type    = "checkbox",
+					name    = "Auto-minimize when no open daily present?",
 					tooltip = "Check this if you want the DASWindow to be minimized when you're done. Will obviously be overridden by hide.",
 					getFunc = function() return DAS.GetAutoMinimize() end,
 					setFunc = function(value) DAS.SetAutoMinimize(value) end
 				},
 				{ -- checkbox: hide completed
-					type = "checkbox",
-					name = "Hide completed quests?",
+					type    = "checkbox",
+					name    = "Hide completed quests?",
 					tooltip = "Usually, completed dailies will be shown in the list. Check this to make them vanish.",
 					getFunc = function() return DAS.GetHideCompleted() end,
 					setFunc = function(value) DAS.SetHideCompleted(value) end
@@ -352,12 +352,12 @@ function DAS.CreateMenu(savedVars, defaults)
 			},
 		}, -- submenu UI settings end
 		{ -- behavior if hidden
-			type = "submenu",
-			name = "Behavior in inactive zones",
+			type    = "submenu",
+			name    = "Behavior in inactive zones",
 			controls = {
 				{ -- checkbox: hide completed
-					type = "checkbox",
-					name = "Hide?",
+					type    = "checkbox",
+					name    = "Hide?",
 					tooltip = "Usually, completed dailies will be shown in the list. Check this to make them vanish.",
 					getFunc = function() return DAS.GetHiddenInInactiveZones() end,
 					setFunc = function(value) DAS.SetHiddenInInactiveZones(value) end
@@ -365,28 +365,28 @@ function DAS.CreateMenu(savedVars, defaults)
 			}
 		},
 		{ -- submenu: Guild settings
-			type = "submenu",
-			name = " Guild settings",
+			type    = "submenu",
+			name    = " Guild settings",
 			controls = {
 				{ -- checkbox: Mute add-on output?
-					type = "dropdown",
+					type    = "dropdown",
 					tooltip = "Which guild should the add-on listen to?",
 					choices = {"1","2","3","4","5",},
-					name = "Auto-invite for guild...",
+					name    = "Auto-invite for guild...",
 					getFunc = function() return DAS.GetGuildInviteNumber() end,
 					setFunc = function(value) DAS.SetGuildInviteNumber(value) end
 				},
 				{ -- checkbox: Lock UI window
-					type = "editbox",
+					type    = "editbox",
 					tooltip = "Invite on what..? Leave blank to disable invite. \nNeeds to be like 'word', will invite on '+word'",
-					name = "invite string",
+					name    = "invite string",
 					getFunc = function() return DAS.GetGuildInviteText() end,
 					setFunc = function(value) DAS.SetGuildInviteText(value) end
 				},
 				{ -- checkbox: inviteFromGuild
-					type = "checkbox",
+					type    = "checkbox",
 					tooltip = "do the bingo thing in guilds?",
-					name = "listen in guild chat",
+					name    = "listen in guild chat",
 					getFunc = function() return DAS.GetListenInGuilds() end,
 					setFunc = function(value) DAS.SetListenInGuilds(value) end
 				},
@@ -395,61 +395,61 @@ function DAS.CreateMenu(savedVars, defaults)
 		}, -- submenu UI settings end

 		{ -- header: automatically
-			type = "header",
-			name = "automatically..."
+			type    = "header",
+			name    = "automatically..."
 		},

 		{ -- auto-track
-			type = "checkbox",
+			type    = "checkbox",
 			tooltip = "Auto-track active daily quest?",
-			name = "track active daily",
+			name    = "track active daily",
 			getFunc = function() return DAS.GetAutoTrack() end,
 			setFunc = function(value) DAS.SetAutoTrack(value) end
 		},

 		{ -- auto-accept
-			type = "checkbox",
+			type    = "checkbox",
 			tooltip = "Accept repeatable quest if they are shared?",
-			name = "accept shared dailies",
+			name    = "accept shared dailies",
 			getFunc = function() return DAS.GetAutoAcceptShared() end,
 			setFunc = function(value) DAS.SetAutoAcceptShared(value) end
 		},
 		{ -- auto-accept invites?
-			type = "checkbox",
-			tooltip = "Accept repeatable quest if they are shared?",
-			name = "accept shared dailies",
-			getFunc = function() return DAS.GetAutoAcceptShared() end,
-			setFunc = function(value) DAS.SetAutoAcceptShared(value) end
+			type    = "checkbox",
+			tooltip = "Skip quest accept dialogue? \n Needs localization to work",
+			name    = "accept dailies from questgiver?",
+			getFunc = function() return DAS.GetSettings().autoAcceptQuest end,
+			setFunc = function(value) DAS.GetSettings().autoAcceptQuest = value end
 		},

 		{ --auto-invite
-			type = "checkbox",
-			tooltip = "Are you the active kind? Check this box to be the group-starting kind?",
-			name = "invite from zone chat",
+			type    = "checkbox",
+			tooltip = "Are you the active kind? Check this box to auto-invite",
+			name    = "invite from zone chat",
 			getFunc = function() return DAS.GetAutoInvite() end,
 			setFunc = function(value) DAS.SetAutoInvite(value) end
 		},
 		{ --auto-invite
-			type = "checkbox",
+			type    = "checkbox",
 			tooltip = "Stop inviting when you leave a group?",
-			name = "stop inviting when the group disbands",
+			name    = "stop inviting when the group disbands",
 			getFunc = function() return DAS.GetStopInviteOnDegroup() end,
 			setFunc = function(value) DAS.SetStopInviteOnDegroup(value) end
 		},

 		{ --auto-leave
-			type = "checkbox",
+			type    = "checkbox",
 			tooltip = "Automatically leave group when you're searching while still grouped?",
-			name = "groupleave on new search",
+			name    = "groupleave on new search",
 			getFunc = function() return DAS.GetAutoLeave() end,
 			setFunc = function(value) DAS.SetAutoLeave(value) end
 		},
 		{ -- auto-accept interval
-			type = "slider",
+			type    = "slider",
 			tooltip = "After using the DAS spam button, auto-accept invites for how many seconds?",
-			name = "Accept auto-invite after hitting the spam buton for",
-			min = 0,
-			max = 60,
+			name    = "Accept auto-invite after hitting the spam buton for",
+			min     = 0,
+			max     = 60,
 			getFunc = function() return DAS.GetAutoAcceptInviteInterval() end,
 			setFunc = function(value) DAS.SetAutoAcceptInviteInterval(value) end
 		},
diff --git a/DailyAutoShare/DASUserSettingsAdapter.lua b/DailyAutoShare/DASUserSettingsAdapter.lua
index 55da38e..1c64c4a 100644
--- a/DailyAutoShare/DASUserSettingsAdapter.lua
+++ b/DailyAutoShare/DASUserSettingsAdapter.lua
@@ -9,8 +9,6 @@ function DAS.SetUseGlobalSettings(value)
 	DAS.settings.useGlobalSettings = value
 end

-
-
 -- called internally a lot
 local function GetSettings()
 	if DAS.GetUseGlobalSettings() then
@@ -19,6 +17,7 @@ local function GetSettings()
 		return DAS.settings
 	end
 end
+DAS.GetSettings = GetSettings

 local function CanInvite(unitTag, unitName)
 	if (nil == unitTag) and (nil == unitName) then
@@ -141,9 +140,12 @@ function DAS.SetAutoAcceptInviteInterval(value)
 end

 function DAS.GetAutoInvite()
-	return (GetSettings().autoInvite and CanInvite(nil, nil))
+	return GetSettings().autoInvite
 end
 function DAS.SetAutoInvite(value)
+    if value then
+        value = IsUnitSoloOrGroupLeader('player')
+    end
 	GetSettings().autoInvite = value
     DAS.autoInviting = value
 	DAS.SetButtonStates()
diff --git a/DailyAutoShare/DailyAutoShare.txt b/DailyAutoShare/DailyAutoShare.txt
index 702a19b..7bdb8ae 100644
--- a/DailyAutoShare/DailyAutoShare.txt
+++ b/DailyAutoShare/DailyAutoShare.txt
@@ -1,6 +1,6 @@
 ## Title: DailyAutoShare
 ## Author: manavortex
-## Version: 2.96b
+## Version: 3.0
 ## APIVersion: 100022
 ## SavedVariables: DAS_Settings DAS_Globals
 ## OptionalDependsOn: LibStub LibAddonMenu-2.0 LibMediaProvider-1.0
@@ -47,9 +47,11 @@ questData/ClockworkCity.lua
 DASData.lua
 DASHelper.lua
 DASUserSettingsAdapter.lua
+DasChatMessage.lua

 DASContextMenu.lua
 DasGui.lua
+DasQuestAccept.lua
 DasGuiStringBuilder.lua
 DasTooltip.lua
 DASMenu.lua
diff --git a/DailyAutoShare/DasGui.lua b/DailyAutoShare/DasGui.lua
index 6372adc..7df01c5 100644
--- a/DailyAutoShare/DasGui.lua
+++ b/DailyAutoShare/DasGui.lua
@@ -24,7 +24,6 @@ DAS.cacheVisibilityStatus = cacheVisibilityStatus

 function DAS.RefreshControl(refreshQuestCache)

-    DAS.RefreshFullBingoString()

 	if not DAS.HasActiveDaily() then
 		DAS.SetAutoInvite(false)
@@ -213,7 +212,8 @@ function DAS.RefreshLabels(forceQuestRefresh, forceSkipQuestRefresh)
             DAS.labels[buttonIndex]:SetText("")
 		end
 	end
-
+
+	DAS.RefreshFullBingoString()
 	DAS.SetLabelFontSize()
 end

diff --git a/DailyAutoShare/locale/de.lua b/DailyAutoShare/locale/de.lua
index 3a9c24c..2ecea78 100644
--- a/DailyAutoShare/locale/de.lua
+++ b/DailyAutoShare/locale/de.lua
@@ -30,21 +30,32 @@ local strings  = {
 	DAS_SI_SETOPEN_FALSE	= "Toggle complete",


-
-
-
-
-
 	-- Clockwork City
 	DAS_CLOCK_IMP		 = "Das Reizen des Unvollendeten",
 	DAS_CLOCK_FOE		 = "Ein feingefiederter Feind",

+    -- Clockwork City
+	DAS_CLOCK_BOSS_START	 = "I'll take on a contract.",
+	DAS_CLOCK_CRAFT_START    = "Got any work?",
+	DAS_CLOCK_CAVE_START     = "What's the job?",
+	DAS_CLOCK_CROW_START     = "How can I help?",
+
+	DAS_CLOCK_IMP_TURNIN     = "IMPLEMENT_ME",
+	DAS_CLOCK_FOE_TURNIN	 = "IMPLEMENT_ME",
+
 	DAS_CLOCK_CRAFT_CLOTH	 = "Lose Fasern",
 	DAS_CLOCK_CRAFT_WATER	 = "Eine klebrige Lösung",
 	DAS_CLOCK_CRAFT_RUNE	 = "Verzauberte Ansammlung",
 	DAS_CLOCK_CRAFT_SMITH	 = "Das tägliche Zermahlen",
 	DAS_CLOCK_CRAFT_ALCH	 = "Eine bittere Pille",
 	DAS_CLOCK_CRAFT_WOOD	 = "Brennstoff für unsere Feuer",
+
+	DAS_CLOCK_CRAFT_CLOTH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WATER_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_RUNE_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_SMITH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_ALCH_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WOOD_TURNIN	 = "IMPLEMENT_ME",

 	DAS_CLOCK_DELVE_FILT	 = "Filterwechsel",
 	DAS_CLOCK_DELVE_FANS	 = "Die Ventilatoren ölen",
@@ -52,14 +63,38 @@ local strings  = {
 	DAS_CLOCK_DELVE_MALF	 = "Eine schattige Fehlfunktion",
 	DAS_CLOCK_DELVE_MISP	 = "Ein verlegter Schatten",
 	DAS_CLOCK_DELVE_AGAI	 = "Zurück in die Schatten",
+
+	DAS_CLOCK_DELVE_FILT_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_FANS_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_COMM_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MALF_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MISP_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_AGAI_TURNIN	 = "IMPLEMENT_ME",

 	DAS_CLOCK_CROW_GLIT		 = "Glitzern und Funkeln",
 	DAS_CLOCK_CROW_TRIB		 = "Eine Frage des Tributs",
 	DAS_CLOCK_CROW_NIBB		 = "Stückchen und Häppchen",
 	DAS_CLOCK_CROW_MORS		 = "Bröckchen und Bisschen",
 	DAS_CLOCK_CROW_RESP		 = "Eine Frage des Respekts",
+	DAS_CLOCK_CROW_LEIS		 = "A Matter of Leisure",

-
+	DAS_CLOCK_CROW_GLIT_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_TRIB_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_NIBB_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_MORS_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_RESP_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_LEIS_TURNIN = "IMPLEMENT_ME",
+
+    DAS_M_BOSS_START = "Is there a job available?",
+    DAS_M_DELVE_START = "I'd like to help with any work you have available.",
+    DAS_M_HUNT_START = "I'm interested in a hunt.",
+    DAS_M_RELIC_START = "What kind of help do you need?",
+
+    DAS_M_BOSS_TURNIN = "I've done what you requested.",
+    DAS_M_DELVE_TURNIN = "I'd like to help with any work you have available.",
+    DAS_M_HUNT_TURNIN = "Here's a trophy from my kill.",
+    DAS_M_RELIC_TURNIN = "Here are the relics I recovered.",
+
 	-- Morrowind dailies
 	DAS_M_REL_ASHAL =  "Relikte von Ashalmawia",
 	DAS_M_REL_ASSAR =  "Relikte von Assarnatamat",
@@ -84,15 +119,31 @@ local strings  = {
 	DAS_M_DELVE_TAXES =  "Steuerabzug",
 	DAS_M_DELVE_TRIBA =  "Stammessorgen",
 	DAS_M_DELVE_SYNDI =  "Ein Syndikat in Unruhe",
-
+
+    -- Cave dailies (Hall of Justice) turn-in
+	DAS_M_DELVE_DAEDR_TURNIN =  "I was able to stop the Daedra summoning rituals.",
+	DAS_M_DELVE_KWAMA_TURNIN =  "I planted the misleading notes.",
+	DAS_M_DELVE_MISIN_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TAXES_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TRIBA_TURNIN =  "I have the items you asked for.",
+	DAS_M_DELVE_SYNDI_TURNIN =  "IMPLEMENT_ME",
+
+
 	-- World boss dailies (Hall of Justice)
-	DAS_M_BOSS_WUYWU =  "Ein schleichender Hunger",
-	DAS_M_BOSS_SWARM =  "Das Ausdünnen des Schwarms",
-	DAS_M_BOSS_NILTH =  "Frei laufende Ochsen",
-	DAS_M_BOSS_SALOT =  "Salothans Fluch",
-	DAS_M_BOSS_SIREN =  "Sirenensang",
-	DAS_M_BOSS_APPRE =  "Der besorgte Lehrling",
+	DAS_M_BOSS_WUYWU        =  "Ein schleichender Hunger",
+	DAS_M_BOSS_SWARM        =  "Das Ausdünnen des Schwarms",
+	DAS_M_BOSS_NILTH        =  "Frei laufende Ochsen",
+	DAS_M_BOSS_SALOT        =  "Salothans Fluch",
+	DAS_M_BOSS_SIREN        =  "Sirenensang",
+	DAS_M_BOSS_APPRE        =  "Der besorgte Lehrling",

+
+	DAS_M_BOSS_WUYWU_TURNIN =  "I dealt with the Hunger.",
+    DAS_M_BOSS_SWARM_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_NILTH_TURNIN =  "I took care of the nix-ox and have the mushroom samples.",
+    DAS_M_BOSS_SALOT_TURNIN =  "No, I'm here to tell you that the Salothan ghosts have been laid to rest.",
+    DAS_M_BOSS_SIREN_TURNIN =  "I defeated the Nereid and recovered these goods.",
+    DAS_M_BOSS_APPRE_TURNIN =  "IMPLEMENT_ME",



@@ -104,33 +155,74 @@ local strings  = {
     DAS_W_DOLMEN       	  = "Der Frevel des Unwissens",
     DAS_W_OGRE            = "Gelehrtes Bergungsgut",

+    DAS_W_POA_TURNIN        = "I retrieved the meat and got rid of the poachers.",
+    DAS_W_EDU_TURNIN        = "The Riekr chieftain is dead, and I've rescued a few of your lost travelers.",
+    DAS_W_NYZ_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_CORI_TURNIN       = "The corruption is cleansed and Corintthac is dead.",
+    DAS_W_DOLMEN_TURNIN     = "Yes, I disrupted the obelisks and destroyed Zandadunoz the Reborn.",
+    DAS_W_OGRE_TURNIN       = "Here's your book. And Mad Urkazbur is dead.",
+
+    DAS_W_HARPIES_TURNIN    = "I've got your eggs right here. The hagraven is dead as well.",
+    DAS_W_SPIRITS_TURNIN    = "The spirits are free and Gorlar the Dark has been defeated.",
+    DAS_W_DURZOGS_TURNIN    = "Here are some more pelts, and I killed the pack leader.",
+    DAS_W_DWEMER_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_WEREWOLVES_TURNIN = "IMPLEMENT_ME",
+    DAS_W_THAT_OTHER_TURNIN = "IMPLEMENT_ME",
+
+    DAS_W_BOSS_START        = "I'm here to work. What do you have for me?",
+    DAS_W_DELVE_START       = "What do you have for me?",
+

+    -- need to be translated to make the auto accept work
+    DAS_W_POA_TURNIN        = "I retrieved the meat and got rid of the poachers.",
+    DAS_W_EDU_TURNIN        = "The Riekr chieftain is dead, and I've rescued a few of your lost travelers.",
+    DAS_W_NYZ_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_CORI_TURNIN       = "IMPLEMENT_ME",
+    DAS_W_DOLMEN_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_OGRE_TURNIN       = "Here's your book. And Mad Urkazbur is dead.",
+
+    DAS_W_HARPIES_TURNIN    = "I've got your eggs right here. The hagraven is dead as well.",
+    DAS_W_SPIRITS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DURZOGS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DWEMER_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_WEREWOLVES_TURNIN = "IMPLEMENT_ME",
+    DAS_W_THAT_OTHER_TURNIN = "IMPLEMENT_ME",
+
+    DAS_W_BOSS_START        = "I'm here to work. What do you have for me?",
+    DAS_W_DELVE_START       = "What do you have for me?",
+
+
 	-- wrothgar single
-	DAS_W_HARPIES 		 = "Ein bizarres Frühstück",
-	DAS_W_SPIRITS 		 = "Freie Geister",
-	DAS_W_DURZOGS 		 = "Der volle Bauch",
-	DAS_W_DWEMER 		 = "Teile des Ganzen",
-	DAS_W_WEREWOLVES	 = "Das Geschäft mit der Haut",
-	DAS_W_THAT_OTHER	 = "Feuer in der Feste",
+	DAS_W_HARPIES 		    = "Ein bizarres Frühstück",
+	DAS_W_SPIRITS 		    = "Freie Geister",
+	DAS_W_DURZOGS 		    = "Der volle Bauch",
+	DAS_W_DWEMER 		    = "Teile des Ganzen",
+	DAS_W_WEREWOLVES	    = "Das Geschäft mit der Haut",
+	DAS_W_THAT_OTHER	    = "Feuer in der Feste",


 	-- gold coast
-	DAS_DB_MINO			 = "Drohende Schatten",
-	DAS_DB_ARENA 		 = "Das Jubeln der Menge",
-	DAS_DB_GOOD 		 = "Das Gemeinwohl",
-	DAS_DB_EVIL 		 = "Das Übel unter der Erde",
+	DAS_DB_MINO			    = "Drohende Schatten",
+	DAS_DB_ARENA 		    = "Das Jubeln der Menge",
+	DAS_DB_GOOD 		    = "Das Gemeinwohl",
+	DAS_DB_EVIL 		    = "Das Übel unter der Erde",

-
+	DAS_DB_QUEST_START       = "",
+	DAS_DB_ARENA_TURNIN     = "",
+	DAS_DB_MINO_TURNIN      = "",
+	DAS_DB_GOOD_TURNIN      = "",
+	DAS_DB_EVIL_TURNIN      = "",
+
 	-- new life
-	DAS_NL_STORMHAVEN	 = "Burgbardenherausforderung",
-	DAS_NL_STONEFALLS	 = "Lavafußstampfer",
-	DAS_NL_ALIKR		 = "Signalfeuersprint",
-	DAS_NL_SHADOWFEN	 = "Fischgunstfestmahl",
-	DAS_NL_GRAHTWOOD	 = "Kriegsweisenreise",
-	DAS_NL_REAPERSMARCH	 = "Prüfung der Fünfkrallenlist",
-	DAS_NL_BETNIKH		 = "Steinzahnsause",
-	DAS_NL_AURIDON		 = "Schlammballspiele",
-	DAS_NL_EASTMARCH	 = "Schneebärensprung",
+	DAS_NL_STORMHAVEN	    = "Burgbardenherausforderung",
+	DAS_NL_STONEFALLS	    = "Lavafußstampfer",
+	DAS_NL_ALIKR		    = "Signalfeuersprint",
+	DAS_NL_SHADOWFEN	    = "Fischgunstfestmahl",
+	DAS_NL_GRAHTWOOD	    = "Kriegsweisenreise",
+	DAS_NL_REAPERSMARCH	    = "Prüfung der Fünfkrallenlist",
+	DAS_NL_BETNIKH		    = "Steinzahnsause",
+	DAS_NL_AURIDON		    = "Schlammballspiele",
+	DAS_NL_EASTMARCH	    = "Schneebärensprung",


 	-- craglorn
diff --git a/DailyAutoShare/locale/en.lua b/DailyAutoShare/locale/en.lua
index bf57e0d..59891d7 100644
--- a/DailyAutoShare/locale/en.lua
+++ b/DailyAutoShare/locale/en.lua
@@ -27,15 +27,32 @@ local strings  = {

 	-- Clockwork City
 	DAS_CLOCK_IMP			 = "Inciting the Imperfect",
-	DAS_CLOCK_FOE			 = "A Fine-Feathered Foe",
+	DAS_CLOCK_FOE			 = "A Fine-Feathered Foe",
+
+	DAS_CLOCK_IMP_TURNIN     = "IMPLEMENT_ME",
+	DAS_CLOCK_FOE_TURNIN	 = "IMPLEMENT_ME",
+
+    -- Clockwork City
+	DAS_CLOCK_BOSS_START	 = "I'll take on a contract.",
+	DAS_CLOCK_CRAFT_START    = "Got any work?",
+	DAS_CLOCK_CAVE_START     = "What's the job?",
+	DAS_CLOCK_CROW_START     = "How can I help?",

 	DAS_CLOCK_CRAFT_CLOTH	 = "Loose Strands",
 	DAS_CLOCK_CRAFT_WATER	 = "A Sticky Solution",
 	DAS_CLOCK_CRAFT_RUNE	 = "Enchanted Accumulation",
 	DAS_CLOCK_CRAFT_SMITH	 = "A Daily Grind",
 	DAS_CLOCK_CRAFT_ALCH	 = "A Bitter Pill",
-	DAS_CLOCK_CRAFT_WOOD	 = "Fuel for our Fires",
+	DAS_CLOCK_CRAFT_WOOD	 = "Fuel for our Fires",
+
+	DAS_CLOCK_CRAFT_CLOTH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WATER_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_RUNE_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_SMITH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_ALCH_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WOOD_TURNIN	 = "IMPLEMENT_ME",

+
 	DAS_CLOCK_DELVE_FILT	 = "Changing the Filters",
 	DAS_CLOCK_DELVE_FANS	 = "Oiling the Fans",
 	DAS_CLOCK_DELVE_COMM	 = "Replacing the Commutators",
@@ -43,6 +60,13 @@ local strings  = {
 	DAS_CLOCK_DELVE_MISP	 = "A Shadow Misplaced",
 	DAS_CLOCK_DELVE_AGAI	 = "Again Into the Shadows",

+	DAS_CLOCK_DELVE_FILT_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_FANS_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_COMM_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MALF_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MISP_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_AGAI_TURNIN	 = "IMPLEMENT_ME",
+
 	DAS_CLOCK_CROW_GLIT		 = "Glitter and Gleam",
 	DAS_CLOCK_CROW_TRIB		 = "A Matter of Tributes",
 	DAS_CLOCK_CROW_NIBB		 = "Nibbles and Bits",
@@ -50,6 +74,12 @@ local strings  = {
 	DAS_CLOCK_CROW_RESP		 = "A Matter of Respect",
 	DAS_CLOCK_CROW_LEIS		 = "A Matter of Leisure",

+	DAS_CLOCK_CROW_GLIT_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_TRIB_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_NIBB_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_MORS_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_RESP_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_LEIS_TURNIN = "IMPLEMENT_ME",

 	-- Morrowind dailies
 	DAS_M_REL_ASHAL =  "Relics of Ashalmawia",
@@ -66,15 +96,17 @@ local strings  = {
 	DAS_M_HUNT_JAGGE =  "Mother Jagged-Claw Hunt",
 	DAS_M_HUNT_STOMP =  "Old Stomper Hunt",
 	DAS_M_HUNT_TARRA =  "Tarra-Suj Hunt",
-	DAS_M_HUNT_SVEET =  "Writhing Sveeth Hunt",
+	DAS_M_HUNT_SVEET =  "Writhing Sveeth Hunt",

-	-- Cave dailies (Hall of Justice)
-	DAS_M_DELVE_DAEDR =  "Daedric Disruptions",
-	DAS_M_DELVE_KWAMA =  "Kwama Conundrum",
-	DAS_M_DELVE_MISIN =  "Planting Misinformation",
-	DAS_M_DELVE_TAXES =  "Tax Deduction",
-	DAS_M_DELVE_TRIBA =  "Tribal Troubles",
-	DAS_M_DELVE_SYNDI =  "Unsettled Syndicate",
+    DAS_M_BOSS_START = "Is there a job available?",
+    DAS_M_DELVE_START = "I'd like to help with any work you have available.",
+    DAS_M_HUNT_START = "I'm interested in a hunt.",
+    DAS_M_RELIC_START = "What kind of help do you need?",
+
+    DAS_M_BOSS_TURNIN = "I've done what you requested.",
+    DAS_M_DELVE_TURNIN = "I'd like to help with any work you have available.",
+    DAS_M_HUNT_TURNIN = "Here's a trophy from my kill.",
+    DAS_M_RELIC_TURNIN = "Here are the relics I recovered.",

 	-- World boss dailies (Hall of Justice)
 	DAS_M_BOSS_WUYWU =  "A Creeping Hunger",
@@ -83,62 +115,107 @@ local strings  = {
 	DAS_M_BOSS_SALOT =  "Salothan's Curse",
 	DAS_M_BOSS_SIREN =  "Siren's Song",
 	DAS_M_BOSS_APPRE =  "The Anxious Apprentice",
+
+	DAS_M_BOSS_WUYWU_TURNIN =  "I dealt with the Hunger.",
+    DAS_M_BOSS_SWARM_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_NILTH_TURNIN =  "I took care of the nix-ox and have the mushroom samples.",
+    DAS_M_BOSS_SALOT_TURNIN =  "No, I'm here to tell you that the Salothan ghosts have been laid to rest.",
+    DAS_M_BOSS_SIREN_TURNIN =  "I defeated the Nereid and recovered these goods.",
+    DAS_M_BOSS_APPRE_TURNIN =  "IMPLEMENT_ME",

+	-- Cave dailies (Hall of Justice)
+	DAS_M_DELVE_DAEDR        =  "Daedric Disruptions",
+	DAS_M_DELVE_KWAMA        =  "Kwama Conundrum",
+	DAS_M_DELVE_MISIN        =  "Planting Misinformation",
+	DAS_M_DELVE_TAXES        =  "Tax Deduction",
+	DAS_M_DELVE_TRIBA        =  "Tribal Troubles",
+	DAS_M_DELVE_SYNDI        =  "Unsettled Syndicate",

-	-- wrothgar dailies
-    DAS_W_POACHERS        = "Meat for the Masses",
-    DAS_W_EDU             = "Reeking of Foul Play",
-    DAS_W_NYZ             = "Snow and Steam",
-    DAS_W_CORI            = "Nature's Bounty",
-    DAS_W_DOLMEN          = "Heresy of Ignorance",
-    DAS_W_OGRE            = "Scholarly Salvage",
+    -- Cave dailies (Hall of Justice) turn-in
+	DAS_M_DELVE_DAEDR_TURNIN =  "I was able to stop the Daedra summoning rituals.",
+	DAS_M_DELVE_KWAMA_TURNIN =  "I planted the misleading notes.",
+	DAS_M_DELVE_MISIN_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TAXES_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TRIBA_TURNIN =  "I have the items you asked for.",
+	DAS_M_DELVE_SYNDI_TURNIN =  "IMPLEMENT_ME",

-
+
+
+	-- wrothgar dailies
+    DAS_W_POACHERS          = "Meat for the Masses",
+    DAS_W_EDU               = "Reeking of Foul Play",
+    DAS_W_NYZ               = "Snow and Steam",
+    DAS_W_CORI              = "Nature's Bounty",
+    DAS_W_DOLMEN            = "Heresy of Ignorance",
+    DAS_W_OGRE              = "Scholarly Salvage",
+
+    DAS_W_POA_TURNIN        = "I retrieved the meat and got rid of the poachers.",
+    DAS_W_EDU_TURNIN        = "The Riekr chieftain is dead, and I've rescued a few of your lost travelers.",
+    DAS_W_NYZ_TURNIN        = "Yes, I defeated Nyzchaleft.",
+    DAS_W_CORI_TURNIN       = "The corruption is cleansed and Corintthac is dead.",
+    DAS_W_DOLMEN_TURNIN     = "Yes, I disrupted the obelisks and destroyed Zandadunoz the Reborn.",
+    DAS_W_OGRE_TURNIN       = "Here's your book. And Mad Urkazbur is dead.",
+
+    DAS_W_HARPIES_TURNIN    = "I've got your eggs right here. The hagraven is dead as well.",
+    DAS_W_SPIRITS_TURNIN    = "The spirits are free and Gorlar the Dark has been defeated.",
+    DAS_W_DURZOGS_TURNIN    = "Here are some more pelts, and I killed the pack leader.",
+    DAS_W_DWEMER_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_WEREWOLVES_TURNIN = "IMPLEMENT_ME",
+    DAS_W_THAT_OTHER_TURNIN = "IMPLEMENT_ME",
+
+    DAS_W_BOSS_START        = "I'm here to work. What do you have for me?",
+    DAS_W_DELVE_START       = "What do you have for me?",
+
 	-- wrothgar single
-	DAS_W_HARPIES 		 = "Breakfast of the Bizarre",
-	DAS_W_SPIRITS 		 = "Free Spirits",
-	DAS_W_DURZOGS 		 = "Getting a Bellyful",
-	DAS_W_DWEMER 		 = "Parts of the Whole",
-	DAS_W_WEREWOLVES	 = "The Skin Trade",
-	DAS_W_THAT_OTHER	 = "Fire in the Hold",
+	DAS_W_HARPIES 		    = "Breakfast of the Bizarre",
+	DAS_W_SPIRITS 		    = "Free Spirits",
+	DAS_W_DURZOGS 		    = "Getting a Bellyful",
+	DAS_W_DWEMER 		    = "Parts of the Whole",
+	DAS_W_WEREWOLVES	    = "The Skin Trade",
+	DAS_W_THAT_OTHER	    = "Fire in the Hold",


 	-- gold coast
-	DAS_DB_MINO			 = "Looming Shadows",
-	DAS_DB_ARENA 		 = "The Roar of the Crowds",
-	DAS_DB_GOOD 		 = "The Common Good",
-	DAS_DB_EVIL 		 = "Buried Evil",
+	DAS_DB_MINO			    = "Looming Shadows",
+	DAS_DB_ARENA 		    = "The Roar of the Crowds",
+	DAS_DB_GOOD 		    = "The Common Good",
+	DAS_DB_EVIL 		    = "Buried Evil",
+
+	DAS_DB_QUEST_START      = "<Read the bounty board.>",
+	DAS_DB_ARENA_TURNIN     = "I'm here to claim my reward.",
+	DAS_DB_MINO_TURNIN      = "The site has been cleared and I recovered your relics.",
+	DAS_DB_GOOD_TURNIN      = "I destroyed Exulus and retrieved the pauldrons of your fallen comrades.",
+	DAS_DB_EVIL_TURNIN      = "",

 	-- new life
-	DAS_NL_STORMHAVEN	 = "Castle Charm Challenge",
-	DAS_NL_STONEFALLS	 = "Lava Foot Stomp",
-	DAS_NL_ALIKR		 = "Signal Fire Sprint",
-	DAS_NL_SHADOWFEN	 = "Fish Boon Feast",
-	DAS_NL_GRAHTWOOD	 = "War Orphan's Sojourn",
-	DAS_NL_REAPERSMARCH	 = "The Trial of Five-Clawed Guile",
-	DAS_NL_BETNIKH		 = "Stonetooth Bash",
-	DAS_NL_AURIDON		 = "Mud Ball Merriment",
-	DAS_NL_EASTMARCH	 = "Snow Bear Plunge",
-
+	DAS_NL_STORMHAVEN	    = "Castle Charm Challenge",
+	DAS_NL_STONEFALLS	    = "Lava Foot Stomp",
+	DAS_NL_ALIKR		    = "Signal Fire Sprint",
+	DAS_NL_SHADOWFEN	    = "Fish Boon Feast",
+	DAS_NL_GRAHTWOOD	    = "War Orphan's Sojourn",
+	DAS_NL_REAPERSMARCH	    = "The Trial of Five-Clawed Guile",
+	DAS_NL_BETNIKH		    = "Stonetooth Bash",
+	DAS_NL_AURIDON		    = "Mud Ball Merriment",
+	DAS_NL_EASTMARCH	    = "Snow Bear Plunge",

 	-- craglorn
 	-- lower
-	DAS_CRAG_SARA 		 = "Critical Mass",
-	DAS_CRAG_SHADA 		 = "The Fallen City of Shada",
-	DAS_CRAG_NEDE 		 = "The Reason We Fight",
-	DAS_CRAG_HERMY 		 = "The Seeker’s Archive",
-	DAS_CRAG_ELINHIR 	 = "Supreme Power",
-	DAS_CRAG_TUWHACCA 	 = "The Trials of Rahni’Za",
-	DAS_CRAG_NEREID 	 = "Waters Run Foul",
+	DAS_CRAG_SARA 		    = "Critical Mass",
+	DAS_CRAG_SHADA 		    = "The Fallen City of Shada",
+	DAS_CRAG_NEDE 		    = "The Reason We Fight",
+	DAS_CRAG_HERMY 		    = "The Seeker’s Archive",
+	DAS_CRAG_ELINHIR 	    = "Supreme Power",
+	DAS_CRAG_TUWHACCA 	    = "The Trials of Rahni’Za",
+	DAS_CRAG_NEREID 	    = "Waters Run Foul",

 	-- upper
-	DAS_CRAG_NIRNCRUX	 = "The Blood of Nirn",
-	DAS_CRAG_WORLDTRIP 	 = "The Gray Passage",
-	DAS_CRAG_SCALES 	 = "Iron and Scales",
-	DAS_CRAG_NECRO 		 = "Souls of the Betrayed",
-	DAS_CRAG_KIDNAP 	 = "Taken Alive",
-	DAS_CRAG_HITMAN 	 = "The Truer Fangs",
-	DAS_CRAG_DUNGEON 	 = "Uncaged",
+	DAS_CRAG_NIRNCRUX	    = "The Blood of Nirn",
+	DAS_CRAG_WORLDTRIP 	    = "The Gray Passage",
+	DAS_CRAG_SCALES 	    = "Iron and Scales",
+	DAS_CRAG_NECRO 		    = "Souls of the Betrayed",
+	DAS_CRAG_KIDNAP 	    = "Taken Alive",
+	DAS_CRAG_HITMAN 	    = "The Truer Fangs",
+	DAS_CRAG_DUNGEON 	    = "Uncaged",

 }
 DailyAutoShare.EnglishQuestNames = strings
diff --git a/DailyAutoShare/locale/fr.lua b/DailyAutoShare/locale/fr.lua
index c952c53..f61c4c0 100644
--- a/DailyAutoShare/locale/fr.lua
+++ b/DailyAutoShare/locale/fr.lua
@@ -29,6 +29,16 @@ local strings  = {
 	DAS_CLOCK_IMP			= "Attirer l'Imparfait",
 	DAS_CLOCK_FOE			= "Un si beau plumage",

+	DAS_CLOCK_IMP_TURNIN     = "IMPLEMENT_ME",
+	DAS_CLOCK_FOE_TURNIN	 = "IMPLEMENT_ME",
+
+    -- Clockwork City
+	DAS_CLOCK_BOSS_START	 = "I'll take on a contract.",
+	DAS_CLOCK_CRAFT_START    = "Got any work?",
+	DAS_CLOCK_CAVE_START     = "What's the job?",
+	DAS_CLOCK_CROW_START     = "How can I help?",
+
+
 	DAS_CLOCK_CRAFT_CLOTH	= "Détails à régler",
 	DAS_CLOCK_CRAFT_WATER	= "La poisse",
 	DAS_CLOCK_CRAFT_RUNE	= "Accumulation enchantée",
@@ -36,6 +46,14 @@ local strings  = {
 	DAS_CLOCK_CRAFT_ALCH	= "Pilule amère",
 	DAS_CLOCK_CRAFT_WOOD	= "Ce qui alimente nos feux",

+
+	DAS_CLOCK_CRAFT_CLOTH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WATER_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_RUNE_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_SMITH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_ALCH_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WOOD_TURNIN	 = "IMPLEMENT_ME",
+
 	DAS_CLOCK_DELVE_FILT	= "Changer les filtres",
 	DAS_CLOCK_DELVE_FANS	= "Graisser les ventilateurs",
 	DAS_CLOCK_DELVE_COMM	= "Remplacer les commutateurs",
@@ -43,11 +61,26 @@ local strings  = {
 	DAS_CLOCK_DELVE_MISP	= "Une ombre égarée",
 	DAS_CLOCK_DELVE_AGAI	= "Retour dans les ombres vertes",

+	DAS_CLOCK_DELVE_FILT_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_FANS_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_COMM_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MALF_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MISP_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_AGAI_TURNIN	 = "IMPLEMENT_ME",
+
 	DAS_CLOCK_CROW_GLIT		= "Lueur et Chatoiement",
 	DAS_CLOCK_CROW_TRIB		= "Une affaire de tributs",
 	DAS_CLOCK_CROW_NIBB		= "Petites bouchées",
 	DAS_CLOCK_CROW_MORS		= "Morceaux de choix",
 	DAS_CLOCK_CROW_RESP		= "Une histoire de respect",
+	DAS_CLOCK_CROW_LEIS		 = "A Matter of Leisure",
+
+	DAS_CLOCK_CROW_GLIT_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_TRIB_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_NIBB_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_MORS_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_RESP_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_LEIS_TURNIN = "IMPLEMENT_ME",


 	-- Morrowind dailies
@@ -75,6 +108,22 @@ local strings  = {
 	DAS_M_DELVE_TRIBA 		= "Tribus troublées",
 	DAS_M_DELVE_SYNDI 		= "Mouvement syndical",

+    -- Cave dailies (Hall of Justice) turn-in
+	DAS_M_DELVE_DAEDR_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_KWAMA_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_MISIN_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TAXES_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TRIBA_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_SYNDI_TURNIN =  "IMPLEMENT_ME",
+
+    -- Cave dailies (Hall of Justice) turn-in
+	DAS_M_DELVE_DAEDR_TURNIN =  "I was able to stop the Daedra summoning rituals.",
+	DAS_M_DELVE_KWAMA_TURNIN =  "I planted the misleading notes.",
+	DAS_M_DELVE_MISIN_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TAXES_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TRIBA_TURNIN =  "I have the items you asked for.",
+	DAS_M_DELVE_SYNDI_TURNIN =  "IMPLEMENT_ME",
+
 	-- World boss dailies (Hall of Justice)
 	DAS_M_BOSS_WUYWU 		= "Une faim dévorante",
 	DAS_M_BOSS_SWARM 		= "Réduire le troupeau",
@@ -82,10 +131,20 @@ local strings  = {
 	DAS_M_BOSS_SALOT 		= "Malédiction de Salothan",
 	DAS_M_BOSS_SIREN 		= "Chant de la sirène",
 	DAS_M_BOSS_APPRE 		= "L'Apprenti anxieux",
+
+	DAS_M_BOSS_WUYWU_TURNIN =  "I dealt with the Hunger.",
+    DAS_M_BOSS_SWARM_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_NILTH_TURNIN =  "I took care of the nix-ox and have the mushroom samples.",
+    DAS_M_BOSS_SALOT_TURNIN =  "No, I'm here to tell you that the Salothan ghosts have been laid to rest.",
+    DAS_M_BOSS_SIREN_TURNIN =  "I defeated the Nereid and recovered these goods.",
+    DAS_M_BOSS_APPRE_TURNIN =  "IMPLEMENT_ME",

-
-
-
+	DAS_M_BOSS_WUYWU_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_SWARM_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_NILTH_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_SALOT_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_SIREN_TURNIN =  "IMPLEMENT_ME",
+    DAS_M_BOSS_APPRE_TURNIN =  "IMPLEMENT_ME",

 	-- wrothgar dailies
     DAS_W_POACHERS      	= "Nourrir les foules",
@@ -95,7 +154,24 @@ local strings  = {
     DAS_W_DOLMEN       		= "Hérésie par l'ignorance",
     DAS_W_OGRE           	= "Sauvetage académique",

-
+
+    DAS_W_POA_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_EDU_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_NYZ_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_CORI_TURNIN       = "IMPLEMENT_ME",
+    DAS_W_DOLMEN_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_OGRE_TURNIN       = "IMPLEMENT_ME",
+
+    DAS_W_HARPIES_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_SPIRITS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DURZOGS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DWEMER_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_WEREWOLVES_TURNIN = "IMPLEMENT_ME",
+    DAS_W_THAT_OTHER_TURNIN = "IMPLEMENT_ME",
+
+    DAS_W_BOSS_START        = "I'm here to work. What do you have for me?",
+    DAS_W_DELVE_START       = "What do you have for me?",
+
 	-- wrothgar single
 	DAS_W_HARPIES 			= "Petit-déjeuner de l'étrange",
 	DAS_W_SPIRITS 			= "Esprits libres",
@@ -104,12 +180,18 @@ local strings  = {
 	DAS_W_WEREWOLVES		= "Commerce de peaux",
 	DAS_W_THAT_OTHER		= "Incendie au fort",

-
 	-- gold coast
 	DAS_DB_MINO				= "Ombres menaçantes",
 	DAS_DB_ARENA 			= "Le hurlement des foules",
 	DAS_DB_EVIL 			= "Mal enfoui",
-
+	DAS_DB_GOOD 			= "Le bien commun",
+
+	DAS_DB_QUEST_START      = "",
+	DAS_DB_ARENA_TURNIN     = "",
+	DAS_DB_MINO_TURNIN      = "",
+	DAS_DB_GOOD_TURNIN      = "",
+	DAS_DB_EVIL_TURNIN      = "",
+
 	-- new life
 	DAS_NL_STORMHAVEN		= "Castle Charm Challenge",
 	DAS_NL_STONEFALLS		= "Lava Foot Stomp",
diff --git a/DailyAutoShare/locale/jp.lua b/DailyAutoShare/locale/jp.lua
index 57d5e40..44ce654 100644
--- a/DailyAutoShare/locale/jp.lua
+++ b/DailyAutoShare/locale/jp.lua
@@ -29,6 +29,16 @@ local strings  = {
 	DAS_CLOCK_IMP			 = "Inciting the Imperfect",
 	DAS_CLOCK_FOE			 = "A Fine-Feathered Foe",

+	DAS_CLOCK_IMP_TURNIN     = "IMPLEMENT_ME",
+	DAS_CLOCK_FOE_TURNIN	 = "IMPLEMENT_ME",
+
+    -- Clockwork City
+	DAS_CLOCK_BOSS_START	 = "I'll take on a contract.",
+	DAS_CLOCK_CRAFT_START    = "Got any work?",
+	DAS_CLOCK_CAVE_START     = "What's the job?",
+	DAS_CLOCK_CROW_START     = "How can I help?",
+
+
 	DAS_CLOCK_CRAFT_CLOTH	 = "Loose Strands",
 	DAS_CLOCK_CRAFT_WATER	 = "A Sticky Solution",
 	DAS_CLOCK_CRAFT_RUNE	 = "Enchanted Accumulation",
@@ -36,6 +46,13 @@ local strings  = {
 	DAS_CLOCK_CRAFT_ALCH	 = "A Bitter Pill",
 	DAS_CLOCK_CRAFT_WOOD	 = "Fuel for our Fires",

+	DAS_CLOCK_CRAFT_CLOTH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WATER_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_RUNE_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_SMITH_TURNIN = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_ALCH_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_CRAFT_WOOD_TURNIN	 = "IMPLEMENT_ME",
+
 	DAS_CLOCK_DELVE_FILT	 = "Changing the Filters",
 	DAS_CLOCK_DELVE_FANS	 = "Oiling the Fans",
 	DAS_CLOCK_DELVE_COMM	 = "Replacing the Commutators",
@@ -43,6 +60,14 @@ local strings  = {
 	DAS_CLOCK_DELVE_MISP	 = "A Shadow Misplaced",
 	DAS_CLOCK_DELVE_AGAI	 = "Again Into the Shadows",

+	DAS_CLOCK_DELVE_FILT_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_FANS_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_COMM_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MALF_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_MISP_TURNIN	 = "IMPLEMENT_ME",
+	DAS_CLOCK_DELVE_AGAI_TURNIN	 = "IMPLEMENT_ME",
+
+
 	DAS_CLOCK_CROW_GLIT		 = "Glitter and Gleam",
 	DAS_CLOCK_CROW_TRIB		 = "A Matter of Tributes",
 	DAS_CLOCK_CROW_NIBB		 = "Nibbles and Bits",
@@ -51,6 +76,14 @@ local strings  = {
 	DAS_CLOCK_CROW_LEIS		 = "A Matter of Leisure",


+	DAS_CLOCK_CROW_GLIT_TURNIN		 = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_TRIB_TURNIN		 = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_NIBB_TURNIN		 = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_MORS_TURNIN		 = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_RESP_TURNIN		 = "IMPLEMENT_ME",
+	DAS_CLOCK_CROW_LEIS_TURNIN		 = "IMPLEMENT_ME",
+
+
 	-- Morrowind dailies
 	DAS_M_REL_ASHAL =  "Relics of Ashalmawia",
 	DAS_M_REL_ASSAR =  "Relics of Assarnatamat",
@@ -76,6 +109,14 @@ local strings  = {
 	DAS_M_DELVE_TRIBA =  "Tribal Troubles",
 	DAS_M_DELVE_SYNDI =  "Unsettled Syndicate",

+    -- Cave dailies (Hall of Justice) turn-in
+	DAS_M_DELVE_DAEDR_TURNIN =  "I was able to stop the Daedra summoning rituals.",
+	DAS_M_DELVE_KWAMA_TURNIN =  "I planted the misleading notes.",
+	DAS_M_DELVE_MISIN_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TAXES_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TRIBA_TURNIN =  "I have the items you asked for.",
+	DAS_M_DELVE_SYNDI_TURNIN =  "IMPLEMENT_ME",
+
 	-- World boss dailies (Hall of Justice)
 	DAS_M_BOSS_WUYWU =  "A Creeping Hunger",
 	DAS_M_BOSS_SWARM =  "Culling the Swarm",
@@ -93,7 +134,25 @@ local strings  = {
     DAS_W_DOLMEN          = "Heresy of Ignorance",
     DAS_W_OGRE            = "Scholarly Salvage",

-
+
+
+    DAS_W_POA_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_EDU_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_NYZ_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_CORI_TURNIN       = "IMPLEMENT_ME",
+    DAS_W_DOLMEN_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_OGRE_TURNIN       = "IMPLEMENT_ME",
+
+    DAS_W_HARPIES_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_SPIRITS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DURZOGS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DWEMER_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_WEREWOLVES_TURNIN = "IMPLEMENT_ME",
+    DAS_W_THAT_OTHER_TURNIN = "IMPLEMENT_ME",
+
+    DAS_W_BOSS_START        = "I'm here to work. What do you have for me?",
+    DAS_W_DELVE_START       = "What do you have for me?",
+
 	-- wrothgar single
 	DAS_W_HARPIES 		 = "Breakfast of the Bizarre",
 	DAS_W_SPIRITS 		 = "Free Spirits",
@@ -110,6 +169,12 @@ local strings  = {
 	DAS_DB_GOOD 		 = "Common Good",
 	DAS_DB_EVIL 		 = "Buried Evil",

+	DAS_DB_QUEST_START      = "",
+	DAS_DB_ARENA_TURNIN     = "",
+	DAS_DB_MINO_TURNIN      = "",
+	DAS_DB_GOOD_TURNIN      = "",
+	DAS_DB_EVIL_TURNIN      = "",
+


 	-- new life
diff --git a/DailyAutoShare/locale/ru.lua b/DailyAutoShare/locale/ru.lua
index 18599e4..7e5e9f1 100644
--- a/DailyAutoShare/locale/ru.lua
+++ b/DailyAutoShare/locale/ru.lua
@@ -28,6 +28,15 @@ local strings  = {
 	-- Clockwork City
 	DAS_CLOCK_IMP			 = "Пробуждение Несовершенства",
 	DAS_CLOCK_FOE			 = "Враг в прекрасном оперении",
+
+    -- Clockwork City
+	DAS_CLOCK_BOSS_START	 = "I'll take on a contract.",
+	DAS_CLOCK_CRAFT_START    = "Got any work?",
+	DAS_CLOCK_CAVE_START     = "What's the job?",
+	DAS_CLOCK_CROW_START     = "How can I help?",
+
+	DAS_CLOCK_IMP_TURNIN     = "IMPLEMENT_ME",
+	DAS_CLOCK_FOE_TURNIN	 = "IMPLEMENT_ME",

 	DAS_CLOCK_CRAFT_CLOTH	 = "Свободные нити",
 	DAS_CLOCK_CRAFT_WATER	 = "Липкое решение",
@@ -76,6 +85,14 @@ local strings  = {
 	DAS_M_DELVE_TRIBA =  "Проблемы племени",
 	DAS_M_DELVE_SYNDI =  "Беспокойный синдикат",

+    -- Cave dailies (Hall of Justice) turn-in
+	DAS_M_DELVE_DAEDR_TURNIN =  "I was able to stop the Daedra summoning rituals.",
+	DAS_M_DELVE_KWAMA_TURNIN =  "I planted the misleading notes.",
+	DAS_M_DELVE_MISIN_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TAXES_TURNIN =  "IMPLEMENT_ME",
+	DAS_M_DELVE_TRIBA_TURNIN =  "I have the items you asked for.",
+	DAS_M_DELVE_SYNDI_TURNIN =  "IMPLEMENT_ME",
+
 	-- World boss dailies (Hall of Justice)
 	DAS_M_BOSS_WUYWU =  "Затаившийся алчущий",
 	DAS_M_BOSS_SWARM =  "Отбраковка колонии",
@@ -94,6 +111,23 @@ local strings  = {
     DAS_W_OGRE            = "Спасение во имя знаний",


+    DAS_W_POA_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_EDU_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_NYZ_TURNIN        = "IMPLEMENT_ME",
+    DAS_W_CORI_TURNIN       = "IMPLEMENT_ME",
+    DAS_W_DOLMEN_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_OGRE_TURNIN       = "IMPLEMENT_ME",
+
+    DAS_W_HARPIES_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_SPIRITS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DURZOGS_TURNIN    = "IMPLEMENT_ME",
+    DAS_W_DWEMER_TURNIN     = "IMPLEMENT_ME",
+    DAS_W_WEREWOLVES_TURNIN = "IMPLEMENT_ME",
+    DAS_W_THAT_OTHER_TURNIN = "IMPLEMENT_ME",
+
+    DAS_W_BOSS_START        = "I'm here to work. What do you have for me?",
+    DAS_W_DELVE_START       = "What do you have for me?",
+
 	-- wrothgar single
 	DAS_W_HARPIES 		 = "Завтрак чудака",
 	DAS_W_SPIRITS 		 = "Свободные духи",
@@ -109,8 +143,13 @@ local strings  = {
 	DAS_DB_ARENA 		 = "Рев толпы",
 	DAS_DB_GOOD 		 = "Всеобщее благо",
 	DAS_DB_EVIL 		 = "Захороненное зло",
-
-
+
+	DAS_DB_QUEST_START      = "",
+	DAS_DB_ARENA_TURNIN     = "",
+	DAS_DB_MINO_TURNIN      = "",
+	DAS_DB_GOOD_TURNIN      = "",
+	DAS_DB_EVIL_TURNIN      = "",
+

 	-- new life
 	DAS_NL_STORMHAVEN	 = "Замковое состязание очарования",
diff --git a/DailyAutoShare/questData/ClockworkCity.lua b/DailyAutoShare/questData/ClockworkCity.lua
index fcc7c34..5acea29 100644
--- a/DailyAutoShare/questData/ClockworkCity.lua
+++ b/DailyAutoShare/questData/ClockworkCity.lua
@@ -142,3 +142,40 @@ DAS.shareables[zoneId3] = DAS.shareables[zoneId]
 DAS.bingo[zoneId2] = DAS.bingo[zoneId]
 DAS.bingo[zoneId3] = DAS.bingo[zoneId]

+
+DAS.questStartStrings[zoneId] = {
+    [GetString(DAS_CLOCK_BOSS_START)] = true,
+    [GetString(DAS_CLOCK_CAVE_START)] = true,
+}
+DAS.questStartStrings[zoneId2] = DAS.questStartStrings[zoneId]
+DAS.questStartStrings[zoneId3] = DAS.questStartStrings[zoneId]
+
+DAS.questTurninStrings[zoneId] = {
+
+    [GetString(DAS_CLOCK_CRAFT_CLOTH_TURNIN )] = true,
+    [GetString(DAS_CLOCK_CRAFT_WATER_TURNIN )] = true,
+    [GetString(DAS_CLOCK_CRAFT_RUNE_TURNIN	 )] = true,
+    [GetString(DAS_CLOCK_CRAFT_SMITH_TURNIN )] = true,
+    [GetString(DAS_CLOCK_CRAFT_ALCH_TURNIN	 )] = true,
+    [GetString(DAS_CLOCK_CRAFT_WOOD_TURNIN	 )] = true,
+
+    [GetString(DAS_CLOCK_DELVE_FILT_TURNIN)] = true,
+    [GetString(DAS_CLOCK_DELVE_FANS_TURNIN)] = true,
+    [GetString(DAS_CLOCK_DELVE_COMM_TURNIN)] = true,
+    [GetString(DAS_CLOCK_DELVE_MALF_TURNIN)] = true,
+    [GetString(DAS_CLOCK_DELVE_MISP_TURNIN)] = true,
+    [GetString(DAS_CLOCK_DELVE_AGAI_TURNIN)] = true,
+
+    [GetString(DAS_CLOCK_CROW_GLIT_TURNIN)] = true,
+    [GetString(DAS_CLOCK_CROW_TRIB_TURNIN)] = true,
+    [GetString(DAS_CLOCK_CROW_NIBB_TURNIN)] = true,
+    [GetString(DAS_CLOCK_CROW_MORS_TURNIN)] = true,
+    [GetString(DAS_CLOCK_CROW_RESP_TURNIN)] = true,
+    [GetString(DAS_CLOCK_CROW_LEIS_TURNIN)] = true,
+
+    [GetString(DAS_CLOCK_IMP_TURNIN)] = true,
+    [GetString(DAS_CLOCK_FOE_TURNIN)] = true,
+
+}
+DAS.questTurninStrings[zoneId2] = DAS.questTurninStrings[zoneId]
+DAS.questTurninStrings[zoneId3] = DAS.questTurninStrings[zoneId]
\ No newline at end of file
diff --git a/DailyAutoShare/questData/GoldCoast.lua b/DailyAutoShare/questData/GoldCoast.lua
index 926ea6e..5438541 100644
--- a/DailyAutoShare/questData/GoldCoast.lua
+++ b/DailyAutoShare/questData/GoldCoast.lua
@@ -17,7 +17,21 @@ DAS.shareables[zoneId] = tbl
 local tbl2 = {}
 table.insert(tbl2, "mino")
 table.insert(tbl2, "arena")
-table.insert(tbl2, "good")
-table.insert(tbl2, "evil")
+table.insert(tbl2, {[1] = "good", [2] = "common"})
+table.insert(tbl2, {[1] = "evil", [2] = "buried"})

 DAS.makeBingoTable(zoneId, tbl2)
+
+
+DAS.questStartStrings[zoneId] = {
+    [GetString(DAS_DB_QUEST_START)] = true,
+}
+
+DAS.questTurninStrings[zoneId] = {
+
+    [GetString(DAS_DB_ARENA_TURNIN)] = true,
+    [GetString(DAS_DB_MINO_TURNIN)] = true,
+    [GetString(DAS_DB_GOOD_TURNIN)] = true,
+    [GetString(DAS_DB_EVIL_TURNIN)] = true,
+
+}
diff --git a/DailyAutoShare/questData/HewsBane.lua b/DailyAutoShare/questData/HewsBane.lua
index 1e69747..5360256 100644
--- a/DailyAutoShare/questData/HewsBane.lua
+++ b/DailyAutoShare/questData/HewsBane.lua
@@ -3,8 +3,10 @@ DAS.bingo 		    = DAS.bingo 	    or {}


 local zoneId	= 816
+local zoneId2	= 821

 DAS.shareables[zoneId] = {
+
 }

 local tbl2 = {}
diff --git a/DailyAutoShare/questData/Morrowind.lua b/DailyAutoShare/questData/Morrowind.lua
index aa585c0..2a3a941 100644
--- a/DailyAutoShare/questData/Morrowind.lua
+++ b/DailyAutoShare/questData/Morrowind.lua
@@ -1,5 +1,7 @@
-DAS.shareables 	    = DAS.shareables    or {}
-DAS.bingo 		    = DAS.bingo 	    or {}
+DAS.shareables 	        = DAS.shareables    or {}
+DAS.bingo 		        = DAS.bingo 	    or {}
+DAS.questTurninStrings  = DAS.questTurninStrings    or {}
+DAS.questStartStrings   = DAS.questStartStrings     or {}


 local zoneId	= 849
@@ -52,9 +54,9 @@ table.insert(tbl, GetString(DAS_M_DELVE_SYNDI))
 table.insert(tbl2, "syndicate")

 table.insert(tbl, GetString(DAS_M_BOSS_WUYWU))
-table.insert(tbl2, {[1] = "wuyu", [2] = "wyu", [3] = "wuyuvus"})
+table.insert(tbl2, {[1] = "wuyu", [2] = "wyu", [3] = "wuyuvus", [4] = "wuju"})
 table.insert(tbl, GetString(DAS_M_BOSS_SWARM))
-table.insert(tbl2, {[1] ="queen", [2] = "swarm", [3] = "kwama"})
+table.insert(tbl2, {[1] ="queen", [2] = "swarm"})
 table.insert(tbl, GetString(DAS_M_BOSS_NILTH))
 table.insert(tbl2, {[1] ="nil", [2] = "nilthog", [3] = "oxen"})
 table.insert(tbl, GetString(DAS_M_BOSS_SALOT))
@@ -125,4 +127,36 @@ DAS.shareables[925] = {
 }

 DAS.makeBingoTable(zoneId, tbl2)
-
\ No newline at end of file
+
+
+DAS.questStartStrings[zoneId] = {
+    [GetString(DAS_M_BOSS_START)] = true,
+    [GetString(DAS_M_DELVE_START)] = true,
+    [GetString(DAS_M_HUNT_START)] = true,
+    [GetString(DAS_M_RELIC_START)] = true,
+}
+
+DAS.questTurninStrings[zoneId] = {
+
+    [GetString(DAS_M_BOSS_TURNIN)] = true,
+    [GetString(DAS_M_HUNT_TURNIN)] = true,
+    [GetString(DAS_M_RELIC_TURNIN)] = true,
+
+    [GetString(DAS_M_DELVE_DAEDR_TURNIN)] = true,
+    [GetString(DAS_M_DELVE_KWAMA_TURNIN)] = true,
+    [GetString(DAS_M_DELVE_MISIN_TURNIN)] = true,
+    [GetString(DAS_M_DELVE_TAXES_TURNIN)] = true,
+    [GetString(DAS_M_DELVE_TRIBA_TURNIN)] = true,
+    [GetString(DAS_M_DELVE_SYNDI_TURNIN)] = true,
+
+    [GetString(DAS_M_BOSS_WUYWU_TURNIN)] = true,
+    [GetString(DAS_M_BOSS_SWARM_TURNIN)] = true,
+    [GetString(DAS_M_BOSS_NILTH_TURNIN)] = true,
+    [GetString(DAS_M_BOSS_SALOT_TURNIN)] = true,
+    [GetString(DAS_M_BOSS_SIREN_TURNIN)] = true,
+    [GetString(DAS_M_BOSS_APPRE_TURNIN)] = true,
+
+
+
+}
+
diff --git a/DailyAutoShare/questData/Wrothgar.lua b/DailyAutoShare/questData/Wrothgar.lua
index d5ab93c..e42aa73 100644
--- a/DailyAutoShare/questData/Wrothgar.lua
+++ b/DailyAutoShare/questData/Wrothgar.lua
@@ -1,6 +1,7 @@
-DAS.shareables 	    = DAS.shareables    or {}
-DAS.bingo 		    = DAS.bingo 	    or {}
-
+DAS.shareables 	        = DAS.shareables            or {}
+DAS.bingo 		        = DAS.bingo 	            or {}
+DAS.questTurninStrings  = DAS.questTurninStrings    or {}
+DAS.questStartStrings   = DAS.questStartStrings     or {}

 local zoneId	= 684

@@ -20,22 +21,43 @@ DAS.shareables[zoneId] = {
     [11] = GetString(DAS_W_WEREWOLVES),
     [12] = GetString(DAS_W_THAT_OTHER),
 }
-
-
 local tbl2 = {}

-table.insert(tbl2, {"poa", "poacher"})
+table.insert(tbl2, {[1] = "poa", [2] = "poacher"})
 table.insert(tbl2, "edu")
 table.insert(tbl2, "nyz")
 table.insert(tbl2, "cori")
-table.insert(tbl2, {"dolmen", "zan"})
-table.insert(tbl2, {"ogre", "mad", "shrek"})
+table.insert(tbl2, {[1] ="dolmen", [2] = "zan"})
+table.insert(tbl2, {[1] = "ogre", [2] = "mad", [3] = "shrek"})

 table.insert(tbl2, "harpy")
 table.insert(tbl2, "spirits")
 table.insert(tbl2, "durzog")
 table.insert(tbl2, "dwemer")
-table.insert(tbl2, "wolf")
-table.insert(tbl2, "bandit")
+table.insert(tbl2, {[1] = "wolf", [2] = "skintrade"})
+table.insert(tbl2, {[1] = "bandit", [2] = "fire"})

 DAS.makeBingoTable(zoneId, tbl2)
+
+DAS.questStartStrings[zoneId] = {
+    [GetString(DAS_W_BOSS_START)] = true,
+    [GetString(DAS_W_DELVE_START)] = true,
+}
+
+DAS.questTurninStrings[zoneId] = {
+
+    [GetString(DAS_W_POA_TURNIN)] = true,
+    [GetString(DAS_W_EDU_TURNIN)] = true,
+    [GetString(DAS_W_NYZ_TURNIN)] = true,
+    [GetString(DAS_W_CORI_TURNIN)] = true,
+    [GetString(DAS_W_DOLMEN_TURNIN)] = true,
+    [GetString(DAS_W_OGRE_TURNIN)] = true,
+
+    [GetString(DAS_W_HARPIES_TURNIN)] = true,
+    [GetString(DAS_W_SPIRITS_TURNIN)] = true,
+    [GetString(DAS_W_DURZOGS_TURNIN)] = true,
+    [GetString(DAS_W_DWEMER_TURNIN)] = true,
+    [GetString(DAS_W_WEREWOLVES_TURNIN)] = true,
+    [GetString(DAS_W_THAT_OTHER_TURNIN)] = true,
+
+}
diff --git a/DailyAutoShare/startup.lua b/DailyAutoShare/startup.lua
index 9e4a866..890c92f 100644
--- a/DailyAutoShare/startup.lua
+++ b/DailyAutoShare/startup.lua
@@ -3,7 +3,7 @@ DAS                         = DailyAutoShare
 local DailyAutoShare        = DailyAutoShare

 DAS.name                    = "Daily Autoshare"
-DAS.version                 = "2.96b"
+DAS.version                 = "3.0"
 DAS.author                  = "manavortex"
 DAS.settings                = {}
 DAS.globalSettings          = {}
@@ -12,6 +12,9 @@ DAS.shareables   	        = {}
 DAS.bingo 			        = {}
 DAS.subzones 		        = {}

+DAS.questTurninStrings      = {}
+DAS.questStartStrings       = {}
+
 DAS.channelTypes 	        = {
     [CHAT_CHANNEL_PARTY]    = true,
     [CHAT_CHANNEL_SAY ]     = false,
@@ -84,6 +87,7 @@ local defaults = {
 	autoTrack 					= false,
 	autoAcceptInvite 			= false,
 	autoAcceptInviteInterval 	= 5,
+	autoAcceptQuest		        = true,
 	autoAcceptShared 			= true,
 	autoDeclineShared 			= false,
 	autoAcceptAllDailies 		= false,
@@ -107,12 +111,10 @@ local defaults = {

 }

-local cachedDisplayName = GetUnitDisplayName('player')
 local characterName     = zo_strformat(GetUnitName('player'))

 local allDailyQuestIds = DAS_QUEST_IDS

-local lastUnitName = nil
 local em = EVENT_MANAGER

 local function debugOut(p1, p2, p3, p4, p5, p6, p7, p8)
@@ -180,66 +182,10 @@ local function OnQuestShared(eventCode, questId)
     end
 end

-local function onGroupMessage(messageText)
-    if 	string.find(messageText, "share") or
-        string.find(messageText, "quest") then
-        DAS.TryShareActiveDaily()
-    elseif string.find(messageText, "stop sharing") then
-        DAS.SetAutoShare(false)
-    end
-end
-
-local channelTypes = DAS.channelTypes
 local function OnChatMessage(eventCode, channelType, fromName, messageText, _, fromDisplayName)
-
-        -- react to the group asking for shares
-	if (channelType == CHAT_CHANNEL_PARTY) then
-		return pcall(onGroupMessage, messageText)
-	end
-
-    local status, result = pcall(string.find, messageText, "%+")
-    if not result then return end
-
-    local bingoCode = string.match(messageText, "%+%s?(%S+)")
-    if not bingoCode then return end
-
-    local isPlayerMessage = cachedDisplayName:find(fromDisplayName)
-    -- we're not listening in the chat channel.
-    if not channelTypes[channelType] and isPlayerMessage then
-       if IsUnitGrouped('player') then
-            if DAS.GetGroupLeaveOnNewSearch() then return GroupLeave() end
-        else
-            return DAS.TryTriggerAutoAcceptInvite()
-        end
-    elseif isPlayerMessage then
-        return
-    end
-
-    if not DAS.autoInviting then return end
-
-    local bingoCode = string.match(messageText, "%+%s?(%S+)")
-    if not bingoCode then return end
-    if not string.find(DAS.fullBingoString, bingoCode:lower()) then return end
-
-	-- try invite if we are group lead
-	if IsUnitSoloOrGroupLeader('player') then
-        GroupInviteByName(fromDisplayName)
-    end
+    return DAS.OnChatMessage(eventCode, channelType, fromName, messageText, _, fromDisplayName)
 end

-function DAS.SetChatListenerStatus(status)
-
-    DAS.channelTypes[CHAT_CHANNEL_SAY ]     = status
-    DAS.channelTypes[CHAT_CHANNEL_YELL]     = status
-    DAS.channelTypes[CHAT_CHANNEL_ZONE]     = status
-	if status then
-		em:RegisterForEvent("DailyAutoShare", EVENT_CHAT_MESSAGE_CHANNEL,  OnChatMessage)
-	else
-		em:UnregisterForEvent("DailyAutoShare", EVENT_CHAT_MESSAGE_CHANNEL, OnChatMessage)
-	end
-end
-
-
 DAS.bingoFallback = {}
 function DAS.makeBingoTable(zoneId, tbl)
 	DAS.bingo[zoneId] = {}
@@ -263,6 +209,20 @@ function DAS.getBingoTable(zoneId)
     return DAS.bingo[zoneId] or {}
 end

+
+function DAS.SetChatListenerStatus(status)
+
+    DAS.channelTypes[CHAT_CHANNEL_SAY ]     = status
+    DAS.channelTypes[CHAT_CHANNEL_YELL]     = status
+    DAS.channelTypes[CHAT_CHANNEL_ZONE]     = status
+	if status then
+		em:RegisterForEvent("DailyAutoShare", EVENT_CHAT_MESSAGE_CHANNEL, OnChatMessage)
+	else
+		em:UnregisterForEvent("DailyAutoShare", EVENT_CHAT_MESSAGE_CHANNEL, OnChatMessage)
+	end
+end
+
+
 local function OnPlayerActivated(eventCode)
 	local active 		= DAS.GetActiveIn()
 	DAS.SetHidden(not active)
@@ -270,6 +230,7 @@ local function OnPlayerActivated(eventCode)
     DAS.SetChatListenerStatus(DAS.autoInviting)
 	DAS.RefreshControl(true)
     DAS.guildInviteText = DAS.GetGuildInviteText()
+    DAS.cacheChatterData()
 end

 -- local function OnGroupMemberAdded(eventCode, memberName)
@@ -297,7 +258,6 @@ local function OnQuestRemoved(eventCode, isCompleted, journalIndex, questName, z
 	if not DAS.HasActiveDaily() then
 		DAS.SetAutoInvite(false)
 	end
-
 	DAS.RefreshControl(true)
 end

@@ -344,7 +304,7 @@ local function RegisterEventHooks()


 	em:RegisterForEvent(ADDON_NAME, EVENT_GROUP_INVITE_RECEIVED,	OnGroupInvite)
-	-- em:RegisterForEvent(ADDON_NAME, EVENT_GROUP_MEMBER_JOINED,		OnGroupMemberAdded)
+	-- em:RegisterForEvent(ADDON_NAME, EVENT_GROUP_MEMBER_JOINED,	OnGroupMemberAdded)
 	em:RegisterForEvent(ADDON_NAME, EVENT_UNIT_CREATED,	 			OnUnitCreated)
 	em:RegisterForEvent(ADDON_NAME, EVENT_UNIT_DESTROYED, 			OnGroupTypeChanged)