Index: GridCore.lua
===================================================================
--- GridCore.lua	(revision 303)
+++ GridCore.lua	(working copy)
@@ -10,6 +10,7 @@
 --{{{  Initialization
 
 Grid2 = LibStub("AceAddon-3.0"):NewAddon("Grid2", "AceEvent-3.0", "AceConsole-3.0")
+Grid2.versionstring="Grid2 v"..GetAddOnMetadata("Grid2", "Version")
 Grid2.debugFrame = Grid2DebugFrame or ChatFrame1
 function Grid2:Debug(s, ...)
 	if self.debugging then
@@ -140,12 +141,16 @@
 
 	self:RegisterChatCommand("grid2", "OnChatCommand")
 	self:RegisterChatCommand("gr2", "OnChatCommand")
-	local optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Grid2", "Grid2")
 
+	--if you want to convine yourself that my settings hacks have done no harm, enable this:
+	--local optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Grid2", "Grid2 old")
+	local optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("Grid2", Grid2.versionstring, nil, "General")
+
 	local prev_OnShow = optionsFrame:GetScript("OnShow")
 	optionsFrame:SetScript("OnShow", function (self, ...)
 		Grid2:LoadOptions()
 		if (Grid2Options) then
+			--this is to force the options to rebuild whenever the menu is shown
 			Grid2Options:MakeOptions(Grid2.db.profile.setup)
 		end
 		self:SetScript("OnShow", prev_OnShow)
@@ -153,6 +158,7 @@
 	end)
 
 	self.optionsFrame = optionsFrame
+
 	self:RegisterModules()
 
 	for _, location in self:IterateLocations() do
@@ -175,13 +181,19 @@
 end
 
 function Grid2:LoadOptions()
-	if Grid2Options then return end
+	--make Grid2Options loading slightly more failsafe
+	if Grid2Options and not Grid2Options.Initialize then 
+		return 
+	end
 	if not IsAddOnLoaded("Grid2Options") then
+		--self:Print("Grid2Options loading")
 		LoadAddOn("Grid2Options")
-		if Grid2Options then
-			Grid2Options:Initialize()
-		end
 	end
+	if Grid2Options then
+		Grid2Options:Initialize()
+	else
+		--self:Print("Grid2Options not found")
+	end
 end
 
 function Grid2:OnChatCommand(input)
Index: Options/core.lua
===================================================================
--- Options/core.lua	(revision 303)
+++ Options/core.lua	(working copy)
@@ -12,6 +12,8 @@
 	plugins = {},
 }
 
+Grid2Options.versionstring = "Grid2 v"..GetAddOnMetadata("Grid2", "Version")
+
 function Grid2Options:AddModule(parent, name, module, extraOptions)
 	extraOptions = extraOptions or module.extraOptions
 	module.extraOptions = nil
@@ -39,6 +41,16 @@
 end
 
 function Grid2Options:AddElement(elementType, element, extraOptions)
+	--Elementtype: a string representing the options
+	--Element: The element itself
+	--ExtraOptions: The aceconfig structure
+	--
+	--Addes options for this element to the main menu.
+	--Will create a menu of type elementType if it doesn't already exist.
+	--That in turn must be a group, with elements matching 'element'
+	--
+	--The OO here is a bit laboured :(
+	
 	extraOptions = extraOptions or element.extraOptions
 	element.extraOptions = nil
 	if not extraOptions then return end
@@ -232,7 +244,9 @@
 
 function Grid2Options:Initialize()
 	LibStub("AceConfig-3.0"):RegisterOptionsTable("Grid2", self.options.Grid2)
+	Grid2:Print("Grid2Options Initializing...")
 
+
 	local function InitializeModuleOptions(parent)
 		for name, module in parent:IterateModules() do
 			Grid2Options:AddModule(parent.name, name, module)
@@ -246,6 +260,37 @@
 
 	self:InitializeSetup()
 
+	--can't do this immediately :(
+	--Grid2Options:MakeOptions(Grid2.db.profile.setup)
+	--why? Well it looks like GridDefaults calls LoadOptions which causes this to run...
+	--here's an example:
+	
+	--[[ --fixMe: Shoudl this every happen?
+	Message: Interface\AddOns\Grid2Options\GridIndicators.lua:671: attempt to index local 'element' (a nil value)
+Time: 01/05/10 23:50:28
+Count: 1
+Stack: Interface\AddOns\Grid2Options\GridIndicators.lua:671: in function `AddIndicatorElement'
+Interface\AddOns\Grid2Options\GridIndicators.lua:416: in function <Interface\AddOns\Grid2Options\GridIndicators.lua:375>
+Interface\AddOns\Grid2Options\GridIndicators.lua:698: in function `AddSetupIndicatorsOptions'
+Interface\AddOns\Grid2Options\core.lua:311: in function `MakeOptions'
+Interface\AddOns\Grid2Options\core.lua:262: in function `Initialize'
+Interface\AddOns\Grid2\GridCore.lua:188: in function <Interface\AddOns\Grid2\GridCore.lua:183>
+...ns\Grid2StatusRaidDebuffs\Grid2StatusRaidDebuffs.lua:375: in function <...ns\Grid2StatusRaidDebuffs\Grid2StatusRaidDebuffs.lua:374>
+...dOns\Grid2StatusTargetIcon\Grid2StatusTargetIcon.lua:170: in function `LoadOptions'
+...dOns\Grid2StatusTargetIcon\Grid2StatusTargetIcon.lua:186: in function `GetCurrentSetup'
+Interface\AddOns\Grid2\GridDefaults.lua:176: in function `Setup'
+Interface\AddOns\Grid2\GridCore.lua:216: in function <Interface\AddOns\Grid2\GridCore.lua:203>
+(tail call): ?
+[C]: ?
+[string "safecall Dispatcher[1]"]:9: in function <[string "safecall Dispatcher[1]"]:5>
+(tail call): ?
+...face\AddOns\Grid2\Libs\AceAddon-3.0\AceAddon-3.0.lua:539: in function `EnableAddon
+	]]
+
+	--so feed in a dummy
+	Grid2Options:MakeOptions()
+	
+	--which makes all this obsolete I think:
 	for _, location in Grid2:IterateLocations() do
 		self:AddElement("location", location)
 	end
@@ -260,6 +305,17 @@
 		self:AddLayout(name, layout)
 	end
 
+	--instead put through a quick empty call...
+	--
+
+	local ACD3 = LibStub("AceConfigDialog-3.0")
+	--self.optionsFrame = ACD3:AddToBlizOptions("Grid2", Grid2.versionstring, nil, "General")
+	for key,value in pairs( self.options.Grid2.args ) do
+		if(key~="General") then
+			ACD3:AddToBlizOptions("Grid2", value.name, Grid2.versionstring, key)
+		end
+	end
+
 	self.Initialize = nil
 end
 
@@ -283,22 +339,27 @@
 end
 
 -- Plugins can overide this to add their options
+-- This method gets called just before the options menu is shown
 function Grid2Options:MakeOptions(setup)
 	self:AddSetupLocationOptions(setup)
 	self:AddSetupIndicatorsOptions(setup)
 	self:AddSetupStatusesOptions(setup)
 	self:AddSetupCategoryOptions(setup)
 
-	for name, data in pairs(setup.buffs) do
-		Grid2Options:AddAura("Buff", name, unpack(data))
+	if(setup~=nil) then
+		for name, data in pairs(setup.buffs) do
+			Grid2Options:AddAura("Buff", name, unpack(data))
+		end
+		for name, data in pairs(setup.debuffs) do
+			Grid2Options:AddAura("Debuff", name, unpack(data))
+		end
 	end
-	for name, data in pairs(setup.debuffs) do
-		Grid2Options:AddAura("Debuff", name, unpack(data))
-	end
 end
 
 
 function Grid2Options:OnChatCommand(input)
+	--This will have been called shortly before invokation.
+	--Grid2Options:MakeOptions(Grid2.db.profile.setup)
     if not input or input:trim() == "" then
         InterfaceOptionsFrame_OpenToCategory(Grid2.optionsFrame)
     else
@@ -314,3 +375,4 @@
 end
 
 _G.Grid2Options = Grid2Options
+
Index: Options/GridCategories.lua
===================================================================
--- Options/GridCategories.lua	(revision 303)
+++ Options/GridCategories.lua	(working copy)
@@ -224,7 +224,7 @@
 		name = {
 			type = "input",
 			order = 71,
-			width = "full",
+			--width = "full",
 			name = L["Name"],
 			usage = L["<CharacterOnlyString>"],
 			get = getCategoryValue,
@@ -315,7 +315,7 @@
 		name = {
 			type = "input",
 			order = 1,
-			width = "full",
+			--width = "full",
 			name = L["Name"],
 			usage = L["<CharacterOnlyString>"],
 			get = getNewCategoryNameValue,
Index: Options/GridCore.lua
===================================================================
--- Options/GridCore.lua	(revision 303)
+++ Options/GridCore.lua	(working copy)
@@ -12,6 +12,21 @@
 			name = L["Debug"],
 		},
 --]]
+
+		["General"] = {
+			order = 1,
+			type = "group",
+			name = L["General Settings"],
+			desc = L["General Settings"],
+			args = {
+				intro = {
+					order = 1,
+					type = "description",
+					name = L["GRID2_DESC"],
+				},
+			},
+		},
+
 		["debug"] = {
 			type = "group",
 			name = L["Debugging"],
Index: Options/GridIndicators.lua
===================================================================
--- Options/GridIndicators.lua	(revision 303)
+++ Options/GridIndicators.lua	(working copy)
@@ -31,7 +31,7 @@
 	indicators.square[indicatorKey] = nil
 	indicators.icon[indicatorKey] = nil
 	indicators.text[indicatorKey] = nil
-	Grid2Options:DeleteElement("indicator", indicatorKey)
+	Grid2Options:DeleteIndicatorElement(indicatorKey)
 end
 
 -- Wrapper for indicator:SetStatusPriority that sets priority in setup as well
@@ -58,6 +58,11 @@
 	return false
 end
 
+function SettingsFromIndicator(info)
+	--was info.options.args.indicator
+	return(info.options.args.indicator.args.indicators)
+end
+
 function Grid2Options.SetIndicatorStatusCurrent(info, value)
 	local indicator = info.arg
 	local statusKey = info[# info]
@@ -75,7 +80,8 @@
 			Grid2Frame:ResetAllFrames()
 			Grid2Frame:UpdateAllFrames()
 
-			local parentOption = info.options.args.indicator.args[indicator.name].args.statusesCurrent
+			local settings = SettingsFromIndicator(info)
+			local parentOption = settings.args[indicator.name].args.statusesCurrent
 			wipe(parentOption.args)
 			Grid2Options:AddIndicatorCurrentStatusOptions(indicator, parentOption.args)
 		end
@@ -99,7 +105,8 @@
 			Grid2Frame:ResetAllFrames()
 			Grid2Frame:UpdateAllFrames()
 
-			local parentOption = info.options.args.indicator.args[indicator.name].args.statusesCurrent
+			local settings = SettingsFromIndicator(info)
+			local parentOption = settings.args[indicator.name].args.statusesCurrent
 			wipe(parentOption.args)
 			Grid2Options:AddIndicatorCurrentStatusOptions(indicator, parentOption.args)
 		end
@@ -122,7 +129,8 @@
 				Grid2Options:SetStatusPriority(indicator, higherStatus, lowerPriority)
 				Grid2Options:SetStatusPriority(indicator, lowerStatus, higherPriority)
 
-				local parentOption = info.options.args.indicator.args[indicator.name].args.statusesCurrent
+				local settings = SettingsFromIndicator(info)
+				local parentOption = settings.args[indicator.name].args.statusesCurrent
 				wipe(parentOption.args)
 				Grid2Options:AddIndicatorCurrentStatusOptions(indicator, parentOption.args)
 			end
@@ -145,7 +153,8 @@
 				Grid2Options:SetStatusPriority(indicator, higherStatus, lowerPriority)
 				Grid2Options:SetStatusPriority(indicator, lowerStatus, higherPriority)
 
-				local parentOption = info.options.args.indicator.args[indicator.name].args.statusesCurrent
+				local settings = SettingsFromIndicator(info)
+				local parentOption = settings.args[indicator.name].args.statusesCurrent
 				wipe(parentOption.args)
 				Grid2Options:AddIndicatorCurrentStatusOptions(indicator, parentOption.args)
 			end
@@ -358,7 +367,7 @@
 	Grid2Options:AddIndicatorStatusOptions(Text, options)
 	Grid2Options:AddIndicatorDeleteOptions(Text, options)
 
-	Grid2Options:AddElement("indicator", Text, options)
+	Grid2Options:AddIndicatorElement( Text, options)
 
 	local TextColor = Grid2.indicators[Text.name .. "-color"]
 	if (not TextColor) then
@@ -368,14 +377,14 @@
 	options = {}
 	Grid2Options:AddIndicatorStatusOptions(TextColor, options)
 
-	Grid2Options:AddElement("indicator", TextColor, options)
+	Grid2Options:AddIndicatorElement(TextColor, options)
 end
 
 local function AddAlphaIndicatorOptions(status)
 	local options = {}
 	Grid2Options:AddIndicatorStatusOptions(status, options)
 
-	Grid2Options:AddElement("indicator", status, options)
+	Grid2Options:AddIndicatorElement( status, options)
 end
 
 local function AddBarIndicatorOptions(Bar)
@@ -419,14 +428,14 @@
 		options.texture = textureOption
 	end
 
-	Grid2Options:AddElement("indicator", Bar, options)
+	Grid2Options:AddIndicatorElement( Bar, options)
 end
 
 local function AddBorderIndicatorOptions(status)
 	local options = {}
 	Grid2Options:AddIndicatorStatusOptions(status, options)
 
-	Grid2Options:AddElement("indicator", status, options)
+	Grid2Options:AddIndicatorElement( status, options)
 end
 
 local function AddIconIndicatorOptions(Icon)
@@ -453,7 +462,7 @@
 	Grid2Options:AddIndicatorStatusOptions(Icon, options)
 	Grid2Options:AddIndicatorDeleteOptions(Icon, options)
 
-	Grid2Options:AddElement("indicator", Icon, options)
+	Grid2Options:AddIndicatorElement( Icon, options)
 end
 
 local function AddSquareIndicatorOptions(Square)
@@ -480,7 +489,7 @@
 	Grid2Options:AddIndicatorStatusOptions(Square, options)
 	Grid2Options:AddIndicatorDeleteOptions(Square, options)
 
-	Grid2Options:AddElement("indicator", Square, options)
+	Grid2Options:AddIndicatorElement( Square, options)
 end
 
 local function AddBarColorIndicatorOptions(BarColor)
@@ -500,7 +509,7 @@
 		},
 	}
 	Grid2Options:AddIndicatorStatusOptions(BarColor, options)
-	Grid2Options:AddElement("indicator", BarColor, options)
+	Grid2Options:AddIndicatorElement( BarColor, options)
 end
 
 
@@ -576,59 +585,121 @@
 end
 
 local function AddIndicatorsGroup(reset)
+	local indicator = {}
 	local options = {
-		newIndicatorName = {
-			type = "input",
-			order = 1,
-			width = "full",
-			name = L["Name"],
-			desc = L["Name of the new indicator"],
-			usage = L["<CharacterOnlyString>"],
-			get = getNewIndicatorNameValue,
-			set = setNewIndicatorNameValue,
-		},
-		newIndicatorType = {
-		    type = 'select',
-			order = 3,
-			name = L["Type"],
-			desc = L["Type of indicator to create"],
-		    values = Grid2Options.GetNewIndicatorTypes,
-			get = getNewIndicatorType,
-			set = setNewIndicatorType,
-		},
-		newIndicatorLocation = {
-		    type = 'select',
-			order = 5,
-			name = L["Location"],
-			desc = L["Select the location of the indicator"],
-		    values = Grid2Options.GetLocationValues,
-			get = getNewIndicatorLocation,
-			set = setNewIndicatorLocation,
-		},
-		newIndicator = {
-			type = "execute",
-			order = 9,
-			name = L["New Indicator"],
-			desc = L["Create a new indicator."],
-			func = NewIndicator,
-			disabled = NewIndicatorDisabled,
-		},
-		resetIndicatorsHeader = {
-			type = "header",
-			order = 10,
-			name = "",
-		},
-		resetIndicators = {
-			type = "execute",
-			order = 11,
-			name = L["Reset Indicators"],
-			desc = L["Reset indicators to defaults."],
-			func = ResetIndicators,
-		},
+		--tabs = {
+			type = "group",
+			name = L["indicator"] or type,
+			desc = L["Options for %s."]:format("indicator"),
+			childGroups = "tab",
+			order = 50,
+			args = {
+				newIndicator = {
+					type = "group",
+					order = 100,
+					name = L["New Indicator"],
+					desc = L["Add a new indicator"],
+					args = {
+						newIndicatorName = {
+							type = "input",
+							order = 1,
+							--width = "full",
+							name = L["Name"],
+							desc = L["Name of the new indicator"],
+							usage = L["<CharacterOnlyString>"],
+							get = getNewIndicatorNameValue,
+							set = setNewIndicatorNameValue,
+						},
+						newIndicatorType = {
+							type = 'select',
+							order = 3,
+							name = L["Type"],
+							desc = L["Type of indicator to create"],
+							values = Grid2Options.GetNewIndicatorTypes,
+							get = getNewIndicatorType,
+							set = setNewIndicatorType,
+						},
+						newIndicatorLocation = {
+							type = 'select',
+							order = 5,
+							name = L["Location"],
+							desc = L["Select the location of the indicator"],
+							values = Grid2Options.GetLocationValues,
+							get = getNewIndicatorLocation,
+							set = setNewIndicatorLocation,
+						},
+						newIndicator = {
+							type = "execute",
+							order = 9,
+							name = L["New Indicator"],
+							desc = L["Create a new indicator."],
+							func = NewIndicator,
+							disabled = NewIndicatorDisabled,
+						},
+					},
+				}, --end NewIndicator tab
+				indicators = {
+					type = "group",
+					order = 10,
+					name = L["Indicators"],
+					desc = L["List of Indicators"],
+					args = {}
+					--list of existing indicators go here:
+				},
+				reset = {
+					type = "group",
+					order = 400,
+					name = L["Reset Indicators"],
+					desc = L["Reset indicators to defaults."],
+					args = {
+						resetIndicators = {
+							type = "execute",
+							order = 11,
+							name = L["Reset Indicators"],
+							desc = L["Reset indicators to defaults."],
+							func = ResetIndicators,
+						},
+					},
+				},
+			}, --end tab args
+		--}, --end tabs
+	} --end Options
+	
+	--Going off-piste, see comment below
+	--Grid2Options:AddElementGroup("indicator", tabs, 50, reset)
+	--settings.args["indicator"] = tabs
+	Grid2Options.options.Grid2.args["indicator"] = options
+end
+
+--[[
+I'm going to go off-piste here and skip the Grid2Options:AddElement. It's not clear to me if it's provided as convinence or as a potential hook point. 
+if it's the former then it certainly insn't convinent. If it's the latter, well *shrug* the whole options thing is pretty untidy I can't imagine anyone trying
+to hook anything.
+]]
+--/dump Grid2Options.options.Grid2.args.indicator
+function Grid2Options:AddIndicatorElement(element, extraOptions)
+	--assume Grid2Options:AddElementGroup("indicator",... ) has already been called.
+	local indicatorOptions = self.options.Grid2.args.indicator
+	local insersionPoint = indicatorOptions.args.indicators
+	--see also SettingsFromIndicator(info)
+
+	local options = {}
+	insersionPoint.args[element.name] = {
+		type = "group",
+		name = element.name,
+		desc = L["Options for %s."]:format(element.name),
+		args = options,
 	}
-	Grid2Options:AddElementGroup("indicator", options, 50, reset)
+	for name, option in pairs(extraOptions) do
+		options[name] = option
+	end
 end
 
+function Grid2Options:DeleteIndicatorElement( indicatorKey)
+	local indicatorOptions = self.options.Grid2.args.indicator
+	local insersionPoint = indicatorOptions.args.indicators
+	insersionPoint.args[elementKey] = nil
+end
 
 --[[
 /dump Grid2.db.profile.setup.indicators.bar
@@ -636,19 +707,25 @@
 --]]
 function Grid2Options:AddSetupIndicatorsOptions(setup, reset)
 	AddIndicatorsGroup(reset)
+	if setup then
+		local indicators = setup.indicators 
 
-	local indicators = setup.indicators
-	for indicatorKey in pairs(indicators.bar) do
-		AddBarIndicatorOptions(Grid2.indicators[indicatorKey])
-		AddBarColorIndicatorOptions(Grid2.indicators[indicatorKey.."-color"])
-	end
+		for indicatorKey in pairs(indicators.bar) do
+			--bar indicator options
+			AddBarIndicatorOptions(Grid2.indicators[indicatorKey])
+			AddBarColorIndicatorOptions(Grid2.indicators[indicatorKey.."-color"])
+		end
 
-	AddAlphaIndicatorOptions(Grid2.indicators.alpha)
-	AddBorderIndicatorOptions(Grid2.indicators.border)
+		--constant indicators...
+		AddAlphaIndicatorOptions(Grid2.indicators.alpha)
+		AddBorderIndicatorOptions(Grid2.indicators.border)
 
-	Grid2Options:RegisterIndicators(indicators.square, "square", L["Square"], Grid2.CreateSquareIndicator, AddSquareIndicatorOptions)
-	Grid2Options:RegisterIndicators(indicators.icon, "icon", L["Icon"], Grid2.CreateIconIndicator, AddIconIndicatorOptions)
-	Grid2Options:RegisterIndicators(indicators.text, "text", L["Text"], Grid2.CreateTextIndicator, AddTextIndicatorOptions)
+		--options for the other indicator types[?]
+		Grid2Options:RegisterIndicators(indicators.square, "square", L["Square"], Grid2.CreateSquareIndicator, AddSquareIndicatorOptions)
+		Grid2Options:RegisterIndicators(indicators.icon, "icon", L["Icon"], Grid2.CreateIconIndicator, AddIconIndicatorOptions)
+		Grid2Options:RegisterIndicators(indicators.text, "text", L["Text"], Grid2.CreateTextIndicator, AddTextIndicatorOptions)
+	end
+	
 end
 
 -- /dump Grid2.db.profile.setup.indicators.square
Index: Options/GridLayout.lua
===================================================================
--- Options/GridLayout.lua	(revision 303)
+++ Options/GridLayout.lua	(working copy)
@@ -9,23 +9,206 @@
 Grid2Layout.menuOrder = 10
 
 Grid2Options:AddModule("Grid2", "Grid2Layout", Grid2Layout, {
-	["display"] = {
-		type = "select",
-		name = L["Show Frame"],
-		desc = L["Sets when the Grid is visible: Choose 'Always', 'Grouped', or 'Raid'."],
+	--FixMe: I'm pretty sure this would look nicer if it were flat. And I reckon there's too many options here
+	["layoutsettings"] = {
+		type = "group",
+		name = L["Layout Settings"],
+		desc = L["Layout Settings"],
 		order = ORDER_LAYOUT + 1,
-		get = function() return Grid2Layout.db.profile.FrameDisplay end,
-		set = function(_, v)
-			Grid2Layout.db.profile.FrameDisplay = v
-			Grid2Layout:CheckVisibility()
-		end,
-		values={["Always"] = L["Always"], ["Grouped"] = L["Grouped"], ["Raid"] = L["Raid"]},
+		args = {
+			["display"] = {
+				type = "select",
+				name = L["Show Frame"],
+				desc = L["Sets when the Grid is visible: Choose 'Always', 'Grouped', or 'Raid'."],
+				order = ORDER_LAYOUT + 10,
+				get = function() return Grid2Layout.db.profile.FrameDisplay end,
+				set = function(_, v)
+					Grid2Layout.db.profile.FrameDisplay = v
+					Grid2Layout:CheckVisibility()
+				end,
+				values={["Always"] = L["Always"], ["Grouped"] = L["Grouped"], ["Raid"] = L["Raid"]},
+			},
+			["horizontal"] = {
+				type = "toggle",
+				name = L["Horizontal groups"],
+				desc = L["Switch between horzontal/vertical groups."],
+				order = ORDER_LAYOUT + 4,
+				get = function ()
+						  return Grid2Layout.db.profile.horizontal
+					  end,
+				set = function ()
+						  Grid2Layout.db.profile.horizontal = not Grid2Layout.db.profile.horizontal
+						  Grid2Layout:ReloadLayout()
+					  end,
+			},
+			["lock"] = {
+				type = "toggle",
+				name = L["Frame lock"],
+				desc = L["Locks/unlocks the grid for movement."],
+				order = ORDER_LAYOUT + 6,
+				get = function() return Grid2Layout.db.profile.FrameLock end,
+				set = function()
+					Grid2Layout:FrameLock()
+				end,
+			},
+			["clickthrough"] = {
+				type = "toggle",
+				name = L["Click through the Grid Frame"],
+				desc = L["Allows mouse click through the Grid Frame."],
+				order = ORDER_LAYOUT + 7,
+				get = function() return Grid2Layout.db.profile.ClickThrough end,
+				set = function()
+					local v = not Grid2Layout.db.profile.ClickThrough
+					Grid2Layout.db.profile.ClickThrough = v
+					Grid2Layout.frame:EnableMouse(not v)
+				end,
+				disabled = function () return not Grid2Layout.db.profile.FrameLock end,
+			},
+
+			["DisplayHeader"] = {
+				type = "header",
+				order = ORDER_DISPLAY,
+				name = L["Display"],
+			},
+			["padding"] = {
+				type = "range",
+				name = L["Padding"],
+				desc = L["Adjust frame padding."],
+				order = ORDER_DISPLAY + 1,
+				max = 20,
+				min = 0,
+				step = 1,
+				get = function ()
+						  return Grid2Layout.db.profile.Padding
+					  end,
+				set = function (_, v)
+						  Grid2Layout.db.profile.Padding = v
+						  Grid2Layout:ReloadLayout()
+					  end,
+			},
+			["spacing"] = {
+				type = "range",
+				name = L["Spacing"],
+				desc = L["Adjust frame spacing."],
+				order = ORDER_DISPLAY + 2,
+				max = 25,
+				min = 0,
+				step = 1,
+				get = function ()
+						  return Grid2Layout.db.profile.Spacing
+					  end,
+				set = function (_, v)
+						  Grid2Layout.db.profile.Spacing = v
+						  Grid2Layout:ReloadLayout()
+					  end,
+			},
+			["scale"] = {
+				type = "range",
+				name = L["Scale"],
+				desc = L["Adjust Grid scale."],
+				order = ORDER_DISPLAY + 3,
+				min = 0.5,
+				max = 2.0,
+				step = 0.05,
+				isPercent = true,
+				get = function ()
+						  return Grid2Layout.db.profile.ScaleSize
+					  end,
+				set = function (_, v)
+						  Grid2Layout.db.profile.ScaleSize = v
+						  Grid2Layout:Scale()
+					  end,
+			},
+			["border"] = {
+				type = "color",
+				name = L["Border"],
+				desc = L["Adjust border color and alpha."],
+				order = ORDER_DISPLAY + 4,
+				get = function ()
+						  local settings = Grid2Layout.db.profile
+						  return settings.BorderR, settings.BorderG, settings.BorderB, settings.BorderA
+					  end,
+				set = function (_, r, g, b, a)
+						  local settings = Grid2Layout.db.profile
+						  settings.BorderR, settings.BorderG, settings.BorderB, settings.BorderA = r, g, b, a
+						  Grid2Layout:UpdateColor()
+					  end,
+				hasAlpha = true
+			},
+			["background"] = {
+				type = "color",
+				name = L["Background"],
+				desc = L["Adjust background color and alpha."],
+				order = ORDER_DISPLAY + 5,
+				get = function ()
+						  local settings = Grid2Layout.db.profile
+						  return settings.BackgroundR, settings.BackgroundG, settings.BackgroundB, settings.BackgroundA
+					  end,
+				set = function (_, r, g, b, a)
+						  local settings = Grid2Layout.db.profile
+						  settings.BackgroundR, settings.BackgroundG, settings.BackgroundB, settings.BackgroundA = r, g, b, a
+						  Grid2Layout:UpdateColor()
+					  end,
+				hasAlpha = true
+			},
+
+			["AnchorHeader"] = {
+				type = "header",
+				order = ORDER_ANCHOR,
+				name = L["Position and Anchor"],
+			},
+			["layoutanchor"] = {
+				type = "select",
+				name = L["Layout Anchor"],
+				desc = L["Sets where Grid is anchored relative to the screen."],
+				order = ORDER_ANCHOR + 1,
+				get = function () return Grid2Layout.db.profile.anchor end,
+				set = function (_, v)
+						  Grid2Layout.db.profile.anchor = v
+						  Grid2Layout:SavePosition()
+						  Grid2Layout:RestorePosition()
+					  end,
+				values={["CENTER"] = L["CENTER"], ["TOP"] = L["TOP"], ["BOTTOM"] = L["BOTTOM"], ["LEFT"] = L["LEFT"], ["RIGHT"] = L["RIGHT"], ["TOPLEFT"] = L["TOPLEFT"], ["TOPRIGHT"] = L["TOPRIGHT"], ["BOTTOMLEFT"] = L["BOTTOMLEFT"], ["BOTTOMRIGHT"] = L["BOTTOMRIGHT"] },
+			},
+			["groupanchor"] = {
+				type = "select",
+				name = L["Group Anchor"],
+				desc = L["Sets where groups are anchored relative to the layout frame."],
+				order = ORDER_ANCHOR + 2,
+				get = function () return Grid2Layout.db.profile.groupAnchor end,
+				set = function (_, v)
+						  Grid2Layout.db.profile.groupAnchor = v
+						  Grid2Layout:ReloadLayout()
+					  end,
+				values={["TOPLEFT"] = L["TOPLEFT"], ["TOPRIGHT"] = L["TOPRIGHT"], ["BOTTOMLEFT"] = L["BOTTOMLEFT"], ["BOTTOMRIGHT"] = L["BOTTOMRIGHT"] },
+			},
+			["clamp"] = {
+				type = "toggle",
+				name = L["Clamped to screen"],
+				desc = L["Toggle whether to permit movement out of screen."],
+				order = ORDER_ANCHOR + 3,
+				get = function ()
+						  return Grid2Layout.db.profile.clamp
+					  end,
+				set = function ()
+						  Grid2Layout.db.profile.clamp = not Grid2Layout.db.profile.clamp
+						  Grid2Layout:SetClamp()
+					  end,
+			},
+			["reset"] = {
+				type = "execute",
+				name = L["Reset"],
+				desc = L["Resets the layout frame's position and anchor."],
+				order = ORDER_ANCHOR + 4,
+				func = function () Grid2Layout:ResetPosition() end,
+			},
+		},
 	},
 	["layouts"] = {
 		type = "group",
 		name = L["Layouts"],
 		desc = L["Layouts for each type of groups you're in."],
-		order = ORDER_LAYOUT + 2,
+		order = ORDER_LAYOUT + 20,
 		args = {
 			solo = {
 				type = "select",
@@ -141,180 +324,7 @@
 			},
 		},
 	},
-	["horizontal"] = {
-		type = "toggle",
-		name = L["Horizontal groups"],
-		desc = L["Switch between horzontal/vertical groups."],
-		order = ORDER_LAYOUT + 4,
-		get = function ()
-				  return Grid2Layout.db.profile.horizontal
-			  end,
-		set = function ()
-				  Grid2Layout.db.profile.horizontal = not Grid2Layout.db.profile.horizontal
-				  Grid2Layout:ReloadLayout()
-			  end,
-	},
-	["lock"] = {
-		type = "toggle",
-		name = L["Frame lock"],
-		desc = L["Locks/unlocks the grid for movement."],
-		order = ORDER_LAYOUT + 6,
-		get = function() return Grid2Layout.db.profile.FrameLock end,
-		set = function()
-			Grid2Layout:FrameLock()
-		end,
-	},
-	["clickthrough"] = {
-		type = "toggle",
-		name = L["Click through the Grid Frame"],
-		desc = L["Allows mouse click through the Grid Frame."],
-		order = ORDER_LAYOUT + 7,
-		get = function() return Grid2Layout.db.profile.ClickThrough end,
-		set = function()
-			local v = not Grid2Layout.db.profile.ClickThrough
-			Grid2Layout.db.profile.ClickThrough = v
-			Grid2Layout.frame:EnableMouse(not v)
-		end,
-		disabled = function () return not Grid2Layout.db.profile.FrameLock end,
-	},
 
-	["DisplayHeader"] = {
-		type = "header",
-		order = ORDER_DISPLAY,
-		name = L["Display"],
-	},
-	["padding"] = {
-		type = "range",
-		name = L["Padding"],
-		desc = L["Adjust frame padding."],
-		order = ORDER_DISPLAY + 1,
-		max = 20,
-		min = 0,
-		step = 1,
-		get = function ()
-				  return Grid2Layout.db.profile.Padding
-			  end,
-		set = function (_, v)
-				  Grid2Layout.db.profile.Padding = v
-				  Grid2Layout:ReloadLayout()
-			  end,
-	},
-	["spacing"] = {
-		type = "range",
-		name = L["Spacing"],
-		desc = L["Adjust frame spacing."],
-		order = ORDER_DISPLAY + 2,
-		max = 25,
-		min = 0,
-		step = 1,
-		get = function ()
-				  return Grid2Layout.db.profile.Spacing
-			  end,
-		set = function (_, v)
-				  Grid2Layout.db.profile.Spacing = v
-				  Grid2Layout:ReloadLayout()
-			  end,
-	},
-	["scale"] = {
-		type = "range",
-		name = L["Scale"],
-		desc = L["Adjust Grid scale."],
-		order = ORDER_DISPLAY + 3,
-		min = 0.5,
-		max = 2.0,
-		step = 0.05,
-		isPercent = true,
-		get = function ()
-				  return Grid2Layout.db.profile.ScaleSize
-			  end,
-		set = function (_, v)
-				  Grid2Layout.db.profile.ScaleSize = v
-				  Grid2Layout:Scale()
-			  end,
-	},
-	["border"] = {
-		type = "color",
-		name = L["Border"],
-		desc = L["Adjust border color and alpha."],
-		order = ORDER_DISPLAY + 4,
-		get = function ()
-				  local settings = Grid2Layout.db.profile
-				  return settings.BorderR, settings.BorderG, settings.BorderB, settings.BorderA
-			  end,
-		set = function (_, r, g, b, a)
-				  local settings = Grid2Layout.db.profile
-				  settings.BorderR, settings.BorderG, settings.BorderB, settings.BorderA = r, g, b, a
-				  Grid2Layout:UpdateColor()
-			  end,
-		hasAlpha = true
-	},
-	["background"] = {
-		type = "color",
-		name = L["Background"],
-		desc = L["Adjust background color and alpha."],
-		order = ORDER_DISPLAY + 5,
-		get = function ()
-				  local settings = Grid2Layout.db.profile
-				  return settings.BackgroundR, settings.BackgroundG, settings.BackgroundB, settings.BackgroundA
-			  end,
-		set = function (_, r, g, b, a)
-				  local settings = Grid2Layout.db.profile
-				  settings.BackgroundR, settings.BackgroundG, settings.BackgroundB, settings.BackgroundA = r, g, b, a
-				  Grid2Layout:UpdateColor()
-			  end,
-		hasAlpha = true
-	},
-
-	["AnchorHeader"] = {
-		type = "header",
-		order = ORDER_ANCHOR,
-		name = L["Position and Anchor"],
-	},
-	["layoutanchor"] = {
-		type = "select",
-		name = L["Layout Anchor"],
-		desc = L["Sets where Grid is anchored relative to the screen."],
-		order = ORDER_ANCHOR + 1,
-		get = function () return Grid2Layout.db.profile.anchor end,
-		set = function (_, v)
-				  Grid2Layout.db.profile.anchor = v
-				  Grid2Layout:SavePosition()
-				  Grid2Layout:RestorePosition()
-			  end,
-		values={["CENTER"] = L["CENTER"], ["TOP"] = L["TOP"], ["BOTTOM"] = L["BOTTOM"], ["LEFT"] = L["LEFT"], ["RIGHT"] = L["RIGHT"], ["TOPLEFT"] = L["TOPLEFT"], ["TOPRIGHT"] = L["TOPRIGHT"], ["BOTTOMLEFT"] = L["BOTTOMLEFT"], ["BOTTOMRIGHT"] = L["BOTTOMRIGHT"] },
-	},
-	["groupanchor"] = {
-		type = "select",
-		name = L["Group Anchor"],
-		desc = L["Sets where groups are anchored relative to the layout frame."],
-		order = ORDER_ANCHOR + 2,
-		get = function () return Grid2Layout.db.profile.groupAnchor end,
-		set = function (_, v)
-				  Grid2Layout.db.profile.groupAnchor = v
-				  Grid2Layout:ReloadLayout()
-			  end,
-		values={["TOPLEFT"] = L["TOPLEFT"], ["TOPRIGHT"] = L["TOPRIGHT"], ["BOTTOMLEFT"] = L["BOTTOMLEFT"], ["BOTTOMRIGHT"] = L["BOTTOMRIGHT"] },
-	},
-	["clamp"] = {
-		type = "toggle",
-		name = L["Clamped to screen"],
-		desc = L["Toggle whether to permit movement out of screen."],
-		order = ORDER_ANCHOR + 3,
-		get = function ()
-				  return Grid2Layout.db.profile.clamp
-			  end,
-		set = function ()
-				  Grid2Layout.db.profile.clamp = not Grid2Layout.db.profile.clamp
-				  Grid2Layout:SetClamp()
-			  end,
-	},
-	["reset"] = {
-		type = "execute",
-		name = L["Reset"],
-		desc = L["Resets the layout frame's position and anchor."],
-		order = ORDER_ANCHOR + 4,
-		func = function () Grid2Layout:ResetPosition() end,
-	},
 })
 
 
Index: Options/GridLocations.lua
===================================================================
--- Options/GridLocations.lua	(revision 303)
+++ Options/GridLocations.lua	(working copy)
@@ -243,7 +243,7 @@
 		name = {
 			type = "input",
 			order = 1,
-			width = "full",
+			--width = "full",
 			name = L["Name"],
 			usage = L["<CharacterOnlyString>"],
 			get = getNewLocationNameValue,
@@ -264,7 +264,7 @@
 		},
 		resetLocations = {
 			type = "execute",
-			order = 11,
+			order = 111,
 			name = L["Reset Locations"],
 			desc = L["Reset locations to the default list."],
 			func = ResetLocations,
@@ -277,8 +277,10 @@
 function Grid2Options:AddSetupLocationOptions(setup, reset)
 	AddLocationGroup(reset)
 
-	local locations = setup.locations
-	for key, location in pairs(locations) do
-		AddLocationOptions(key, location)
+	if setup then
+		local locations = setup.locations 
+		for key, location in pairs(locations) do
+			AddLocationOptions(key, location)
+		end
 	end
 end
Index: Options/GridStatuses.lua
===================================================================
--- Options/GridStatuses.lua	(revision 303)
+++ Options/GridStatuses.lua	(working copy)
@@ -570,6 +570,9 @@
 
 function Grid2Options:AddSetupStatusesOptions(setup, reset)
 	AddStatusesGroup(reset)
+
+	if(setup==nil) then return end
+
 	local status, options
 
 	for _, name in ipairs{
Index: Options/locales/enUS.lua
===================================================================
--- Options/locales/enUS.lua	(revision 303)
+++ Options/locales/enUS.lua	(working copy)
@@ -1,6 +1,9 @@
 local L =  LibStub:GetLibrary("AceLocale-3.0"):NewLocale("Grid2Options", "enUS", true)
 if not L then return end
 
+L["General Settings" ] = true
+L["GRID2_DESC"] = "Welcome to Grid2"
+
 L["Debug"] = true
 L["Debugging"] = true
 L["Module debugging menu."] = true
@@ -47,6 +50,7 @@
 
 L["Layouts"] = true
 L["Layouts for each type of groups you're in."] = true
+L["Layout Settings"] = true
 L["Solo Layout"] = true
 L["Select which layout to use for solo."] = true
 L["Party Layout"] = true
@@ -181,6 +185,9 @@
 L["Name of the new indicator"] = true
 L["New Category"] = true
 L["New Indicator"] = true
+L["Add a new indicator"] = true
+L["Indicators"] = true
+L["List of Indicators"] = true
 L["New Location"] = true
 L["New Status"] = true
 L["Range"] = true
