diff --git a/source/config/__init__.py b/source/config/__init__.py
index c02396d..26a2934 100644
--- a/source/config/__init__.py
+++ b/source/config/__init__.py
@@ -418,6 +418,8 @@ def addConfigDirsToPythonPackagePath(module, subdir=None):
 	@param subdir: The subdirectory to be used, C{None} for the name of C{module}.
 	@type subdir: str
 	"""
+	if globalVars.appArgs.disableAddons:
+		return
 	if not subdir:
 		subdir = module.__name__
 	# Python 2.x doesn't properly handle unicode import paths, so convert them.
diff --git a/source/core.py b/source/core.py
index ad7be89..8f5a5f7 100644
--- a/source/core.py
+++ b/source/core.py
@@ -62,7 +62,7 @@ def doStartupDialogs():
 		from gui import upgradeAlerts
 		upgradeAlerts.NewLaptopKeyboardLayout.run()
 
-def restart():
+def restart(disableAddons=False):
 	"""Restarts NVDA by starting a new copy with -r."""
 	if globalVars.appArgs.launcher:
 		import wx
@@ -71,9 +71,20 @@ def restart():
 		return
 	import subprocess
 	import shellapi
+	options=[]
+	try:
+		sys.argv.index('-r')
+	except:
+		options.append("-r")
+	try:
+		sys.argv.pop(sys.argv.index('--disable-addons'))
+	except:
+		pass
+	if disableAddons:
+		options.append('--disable-addons')
 	shellapi.ShellExecute(None, None,
 		sys.executable.decode("mbcs"),
-		subprocess.list2cmdline(sys.argv + ["-r"]).decode("mbcs"),
+		subprocess.list2cmdline(sys.argv + options).decode("mbcs"),
 		None, 0)
 
 def resetConfiguration(factoryDefaults=False):
diff --git a/source/gui/__init__.py b/source/gui/__init__.py
index 5929f08..5b1645b 100644
--- a/source/gui/__init__.py
+++ b/source/gui/__init__.py
@@ -192,16 +192,12 @@ class MainFrame(wx.Frame):
 		self._popupSettingsDialog(DictionaryDialog,_("Temporary dictionary"),speechDictHandler.dictionaries["temp"])
 
 	def onExitCommand(self, evt):
-		canExit=False
 		if config.conf["general"]["askToExit"]:
-			if isInMessageBox:
-				return
-			# Translators: Message shown to ask if user really wishes to quit NVDA.
-			if messageBox(_("Are you sure you want to quit NVDA?"), _("Exit NVDA"), wx.YES_NO|wx.ICON_WARNING) == wx.YES:
-				canExit=True
+			self.prePopup()
+			self.exitDialog = ExitDialog(self)
+			self.exitDialog.Show()
+			self.postPopup()
 		else:
-			canExit=True
-		if canExit:
 			wx.GetApp().ExitMainLoop()
 
 	def onGeneralSettingsCommand(self,evt):
@@ -677,6 +673,51 @@ class LauncherDialog(wx.Dialog):
 		d.Show()
 		mainFrame.postPopup()
 
+class ExitDialog(wx.Dialog):
+
+	def __init__(self, parent):
+		# Translators: The title of the dialog to exit NVDA
+		super(ExitDialog, self).__init__(parent, title=_("Exit NVDA"))
+		mainSizer = wx.BoxSizer(wx.VERTICAL)
+
+		actionSizer=wx.BoxSizer(wx.HORIZONTAL)
+		# Translators: The label for actions list in the Exit dialog.
+		actionsLabel=wx.StaticText(self,-1,label=_("What to &do:"))
+		actionSizer.Add(actionsLabel)
+		actionsListID=wx.NewId()
+		self.actions = [
+		# Translators: An option in the combo box to choose exit action.
+		_("Exit"),
+		# Translators: An option in the combo box to choose exit action.
+		_("Restart"),
+		# Translators: An option in the combo box to choose exit action.
+		_("Restart with addons disabled")]
+		# Translators: A combo box to choose exit action (possible options are exit, restart, restart with addons disabled).
+		self.actionsList=wx.Choice(self,actionsListID,name=_("Action"),choices=self.actions)
+		self.actionsList.SetSelection(0)
+		actionSizer.Add(self.actionsList)
+		mainSizer.Add(actionSizer,border=10,flag=wx.CENTER)
+
+		mainSizer.Add(self.CreateButtonSizer(wx.OK | wx.CANCEL))
+		self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK)
+		self.Bind(wx.EVT_BUTTON, self.onCancel, id=wx.ID_CANCEL)
+		mainSizer.Fit(self)
+		self.Sizer = mainSizer
+		self.actionsList.SetFocus()
+
+	def onOk(self, evt):
+		action=self.actionsList.GetSelection()
+		if action == 0:
+			wx.GetApp().ExitMainLoop()
+		elif action == 1:
+			queueHandler.queueFunction(queueHandler.eventQueue,core.restart)
+		elif action == 2:
+			queueHandler.queueFunction(queueHandler.eventQueue,core.restart,True)
+		self.Destroy()
+
+	def onCancel(self, evt):
+		self.Destroy()
+
 class ExecAndPump(threading.Thread):
 	"""Executes the given function with given args and kwargs in a background thread while blocking and pumping in the current thread."""
 
diff --git a/source/gui/addonGui.py b/source/gui/addonGui.py
index 76a1bd6..c1fddc8 100644
--- a/source/gui/addonGui.py
+++ b/source/gui/addonGui.py
@@ -11,6 +11,7 @@ import languageHandler
 import gui
 from logHandler import log
 import addonHandler
+import globalVars
 
 class AddonsDialog(wx.Dialog):
 	_instance = None
@@ -29,6 +30,11 @@ class AddonsDialog(wx.Dialog):
 		mainSizer=wx.BoxSizer(wx.VERTICAL)
 		settingsSizer=wx.BoxSizer(wx.VERTICAL)
 		entriesSizer=wx.BoxSizer(wx.VERTICAL)
+		if globalVars.appArgs.disableAddons:
+			addonsDisabledSizer=wx.BoxSizer(wx.VERTICAL)
+			addonsDisabledLabel=wx.StaticText(self,-1,label=_("All addons are now disabled. To enable addons you must restart NVDA."))
+			addonsDisabledSizer.Add(addonsDisabledLabel)
+			mainSizer.Add(addonsDisabledSizer)
 		# Translators: the label for the installed addons list in the addons manager.
 		entriesLabel=wx.StaticText(self,-1,label=_("Installed Add-ons"))
 		entriesSizer.Add(entriesLabel)
@@ -170,6 +176,9 @@ class AddonsDialog(wx.Dialog):
 		elif addon.isPendingRemove:
 			# Translators: The status shown for an addon that has been marked as removed, before NVDA has been restarted.
 			return _("remove")
+		elif globalVars.appArgs.disableAddons:
+			# Translators: The status shown for an addon when its currently suspended do to addons been disabled.
+			return _("suspended")
 		else:
 			# Translators: The status shown for an addon when its currently running in NVDA.
 			return _("running")
diff --git a/source/gui/settingsDialogs.py b/source/gui/settingsDialogs.py
index c833bf0..6a7f263 100644
--- a/source/gui/settingsDialogs.py
+++ b/source/gui/settingsDialogs.py
@@ -150,8 +150,8 @@ class GeneralSettingsDialog(SettingsDialog):
 		if globalVars.appArgs.secure:
 			self.saveOnExitCheckBox.Disable()
 		settingsSizer.Add(self.saveOnExitCheckBox,border=10,flag=wx.BOTTOM)
-		# Translators: The label for a setting in general settings to ask before quitting NVDA (if not checked, NVDA will exit without asking the user for confirmation).
-		self.askToExitCheckBox=wx.CheckBox(self,wx.NewId(),label=_("&Warn before exiting NVDA"))
+		# Translators: The label for a setting in general settings to ask before quitting NVDA (if not checked, NVDA will exit without asking the user for action).
+		self.askToExitCheckBox=wx.CheckBox(self,wx.NewId(),label=_("Sho&w exit options on exiting NVDA"))
 		self.askToExitCheckBox.SetValue(config.conf["general"]["askToExit"])
 		settingsSizer.Add(self.askToExitCheckBox,border=10,flag=wx.BOTTOM)
 		# Translators: The label for a setting in general settings to play sounds when NVDA starts or exits.
diff --git a/source/nvda.pyw b/source/nvda.pyw
index cf2d155..909ad38 100755
--- a/source/nvda.pyw
+++ b/source/nvda.pyw
@@ -75,6 +75,7 @@ parser.add_option('-l','--log-level',type="int",dest='logLevel',default=0,help="
 parser.add_option('-c','--config-path',dest='configPath',default=None,help="The path where all settings for NVDA are stored")
 parser.add_option('-m','--minimal',action="store_true",dest='minimal',default=False,help="No sounds, no interface, no start message etc")
 parser.add_option('-s','--secure',action="store_true",dest='secure',default=False,help="Secure mode (disable Python console)")
+parser.add_option('--disable-addons',action="store_true",dest='disableAddons',default=False,help="Addons will have no effect")
 parser.add_option('--no-sr-flag',action="store_false",dest='changeScreenReaderFlag',default=True,help="Don't change the global system screen reader flag")
 parser.add_option('--install',action="store_true",dest='install',default=False,help="Silently installs NVDA")
 parser.add_option('--launcher',action="store_true",dest='launcher',default=False,help="Started from the launcher")
diff --git a/user_docs/en/userGuide.t2t b/user_docs/en/userGuide.t2t
index 6fbdc54..e24dcdf 100644
--- a/user_docs/en/userGuide.t2t
+++ b/user_docs/en/userGuide.t2t
@@ -131,6 +131,7 @@ Press OK to dismiss this dialog.
 ++ Launching NVDA ++
 If you have installed NVDA with the installer, then starting NVDA is as simple as either pressing control+alt+n, or choosing NVDA from the NVDA menu under Programs on the Start Menu.
 Additionally you can type NVDA into the Run dialog and press Enter.
+You can also pass some [command line options #CommandLineOptions] which allows you to restart NVDA (-r), quit (-q), disable addons (--disable-addons) and many more.
 
 To start the portable version, go to the directory you unpacked NVDA to, and press enter or double click on nvda.exe.
 
@@ -593,9 +594,10 @@ Press OK, and NVDA will restart.
 ==== Save Configuration on Exit ====
 This option is a checkbox that, when checked, tells NVDA to automatically save the current configuration when you exit NVDA.
 
-==== Warn before exiting NVDA ====
-This option is a checkbox that allows you to choose whether or not a dialog appears when you exit NVDA that asks whether or not you would like to exit.
-When checked, a dialog will appear when you attempt to exit NVDA asking whether or not you want to exit.
+==== Show exit options on exiting NVDA ====
+This option is a checkbox that allows you to choose whether or not a dialog appears when you exit NVDA that asks what action you want to perform.
+When checked, a dialog will appear when you attempt to exit NVDA asking whether you want to exit, restart or restart with addons disabled.
+When unchecked, NVDA will exit directly.
 
 ==== Play sounds when starting or exiting NVDA ====
 This option is a checkbox that, when checked, tells NVDA to play sounds when it starts or exits.
@@ -1884,6 +1886,44 @@ Please see the [BRLTTY key tables documentation http://mielke.cc/brltty/doc/driv
 
 + Advanced Topics +
 
+++ Command line options ++[CommandLineOptions]
+NVDA can accept one or more additional options when starts, which could change its behaviour. You can pass as many options as you need.
+Those options could be passed when starting from a shortcut (in the shortcut properties), from the Run dialog (StartMenu->Run or WindowsKey+R), or from the command interpretor (command prompt or cmd.exe) and should be separated by themselvs and from the name of NVDA's executable file with spaces.
+For example, the desktop shortcut that NVDA creates after install has the -r option, which tells NVDA to close the currently running copy before starting the new one.
+Another useful option is --disable-addons, which tells NVDA to suspend all running addons, which allows you to recover from bad situations and also helps you to determin the cause of some problem when such appear.
+
+For example, you can exit silently the currently running copy of NVDA by entering the following in the Run dialog:
+
+nvda -q -m
+
+Some of the command line options have a short and a long version, some of them have only one or the another. For those which have a short version, you can combine them like this:
+| nvda -rm | This will exit the currently running copy of NVDA and will start this one with startup sounds off, etc |
+| nvda -rm --disable-addons | Same as above, but with addons disabled |
+
+Some of the command line options accept additional parameters, for example how detailed the logging should be or the path to user config directory.
+Those parameters come right after the option, separated by a space (when using the short version) or an equal sign (=) - when using the long version of the option, for example:
+| nvda -l 10 | Tells NVDA to start with log level set to debug |
+| nvda --log-file=c:\nvda.log |  Tells NVDA to write its log to c:\nvda.log |
+| nvda --log-level=20 -f c:\nvda.log | Tels NVDA to start with log level set to info and to write its log to c:\nvda.log |
+
+Following are the command line options for NVDA:
+%kc:beginInclude
+|| Short | Long | Description |
+| -h | --help | show this help message and exit |
+| -q | --quit | Quit already running copy of NVDA |
+| -r | --replace | Quit already running copy of NVDA and start this one |
+| -k | --check-running | Report whether NVDA is running via the exit code; 0 if running, 1 if not running |
+| -f LOGFILENAME | --log-file=LOGFILENAME | The file where log messages should be written to |
+| -l LOGLEVEL | --log-level=LOGLEVEL | The lowest level of message logged (debug 10, info 20, warning 30, error 40, critical 50), default is warning |
+| -c CONFIGPATH | --config-path=CONFIGPATH | The path where all settings for NVDA are stored |
+| -m | --minimal | No sounds, no interface, no start message etc |
+| -s | --secure | Secure mode (disable Python console) |
+| None | --disable-addons | Addons will have no effect |
+| None | --no-sr-flag  | Don't change the global system screen reader flag |
+| None | --install | Silently installs NVDA |
+| None | --launcher | Started from the launcher |
+%kc:endInclude
+
 ++ Advanced Customization of Symbol Pronunciation ++
 It is possible to customize the pronunciation of punctuation and other symbols beyond what can be done using the [Punctuation/symbol pronunciation #SymbolPronunciation] dialog.
 For example, you can specify whether the raw symbol should be sent to the synthesizer (e.g. to cause a pause or change in inflection) and you can add custom symbols.
