[SCM] supercollider/upstream: Imported Upstream version 3.6.3~repack

danstowell-guest at users.alioth.debian.org danstowell-guest at users.alioth.debian.org
Sun Feb 24 22:09:53 UTC 2013


The following commit has been merged in the upstream branch:
commit f88d7062c30753f68cd3596427d282a719b54847
Author: Dan Stowell <danstowell at users.sourceforge.net>
Date:   Sun Feb 24 21:53:53 2013 +0000

    Imported Upstream version 3.6.3~repack

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 14244d0..909c24c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -148,7 +148,14 @@ option(SSE41 "Compile with support for SSE4.1 instructions.")
 option(SSE42 "Compile with support for SSE4.2 instructions.")
 
 set(AUDIOAPI "default" CACHE STRING "Audio API to use (one of {default,coreaudio,jack,portaudio})")
-option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
+
+if(NOT WIN32)
+	option(LIBSCSYNTH "Compile libscsynth as shared library" OFF)
+else()
+	# libscsynth has unresolved symbols, which are resolved when linked with server executable.
+	# On Windows, this is not supported for static libraries, so we build dynamic by default.
+	option(LIBSCSYNTH "Compile libscsynth as shared library" ON)
+endif()
 
 option(INSTALL_HELP "Install help docs and examples along with the software" ON)
 option(SC_DOC_RENDER "Pre-render SCDoc documentation. (For putting online, etc)" OFF)
@@ -167,8 +174,8 @@ option(SC_MEMORY_DEBUGGING "Build sclang&scsynth for memory debugging (disable m
 option(GC_SANITYCHECK "Enable sanity checks in the sclang garbage collector.")
 
 option(NO_LIBSNDFILE "Disable soundfile functionality. (Not recommended.)" OFF)
-
 option(NO_AVAHI "Disable Avahi support. (Not recommended.)" OFF)
+option(NO_GPL3 "Disable GPL3 code, for pure-GPL2 situations. (Not recommended.)" OFF)
 
 option(SCLANG_SERVER "Build with internal server." ON)
 
@@ -181,11 +188,6 @@ if (SC_QT)
   message( STATUS "Compiling with Qt GUI" )
 endif (SC_QT)
 
-if(WIN32)
-    option(SC_WIN_DEP_DIRS
-        "A list of directories where dependencies will be searched for when packaging.")
-endif()
-
 if(CMAKE_COMPILER_IS_GNUCXX)
     option(NATIVE "Optimize binary for this architecture (binaries may not run on other machines, requires gcc-4.3 or higher).")
     option(LTO "Use GCC's link time optimizer' (experimental).")
@@ -285,6 +287,15 @@ if (SC_MEMORY_DEBUGGING)
 	add_definitions(-DDISABLE_MEMORY_POOLS)
 endif()
 
+if(MINGW)
+	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mstackrealign")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mstackrealign")
+endif()
+
+if (NO_GPL3)
+	add_definitions(-DNO_GPL3)
+endif()
+
 #############################################
 # subdirectories
 add_subdirectory(external_libraries)
@@ -294,6 +305,10 @@ if(NOT YAMLCPP_FOUND)
   set(YAMLCPP_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/external_libraries/yaml-cpp-0.3.0/include)
 endif()
 
+
+configure_file(common/SC_Version.hpp.in common/SC_Version.hpp)
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/common)
+
 add_subdirectory(server)
 add_subdirectory(lang)
 add_subdirectory(editors)
@@ -386,9 +401,6 @@ else()
 	)
 endif()
 
-configure_file(platform/SCVersion.sc.in SCVersion/SCVersion.sc)
-install(DIRECTORY "${CMAKE_BINARY_DIR}/SCVersion" DESTINATION "${auxresourcesdir}/SCClassLibrary")
-
 install(DIRECTORY sounds
 	DESTINATION ${auxresourcesdir}
 )
diff --git a/HelpSource/Classes/BrownNoise.schelp b/HelpSource/Classes/BrownNoise.schelp
index d14e07a..d925720 100644
--- a/HelpSource/Classes/BrownNoise.schelp
+++ b/HelpSource/Classes/BrownNoise.schelp
@@ -20,8 +20,8 @@ Examples::
 
 compare:
 code::
-{ BrownNoise.ar(0.5) }.play;
-{ WhiteNoise.ar(0.5) }.play;
+{ BrownNoise.ar(0.1) }.play;
+{ WhiteNoise.ar(0.1) }.play;
 ::
 
 brownian noise as a frequency modulator:
@@ -33,4 +33,3 @@ filtered brown noise:
 code::
 { BPF.ar(BrownNoise.ar(0.1.dup), MouseX.kr(40, 17000, 1), 0.2) }.play;
 ::
-
diff --git a/HelpSource/Classes/Bus.schelp b/HelpSource/Classes/Bus.schelp
index 72cdc73..8053328 100644
--- a/HelpSource/Classes/Bus.schelp
+++ b/HelpSource/Classes/Bus.schelp
@@ -101,7 +101,7 @@ Get a new Bus that is a subset of this bus (see code::newFrom::).
 subsection:: Asynchronous Control Bus Methods
 
 The following commands apply only to control buses and are asynchronous. For synchronous access to control busses please
-consult link::Classes/Bus#synchronous_control_bus_methods::.
+consult link::#Synchronous control bus methods::.
 
 method:: value
 Set all channels to this float value. This command is asynchronous.
diff --git a/HelpSource/Classes/DragBoth.schelp b/HelpSource/Classes/DragBoth.schelp
index 3223e12..a9da3cd 100644
--- a/HelpSource/Classes/DragBoth.schelp
+++ b/HelpSource/Classes/DragBoth.schelp
@@ -12,7 +12,7 @@ Akin to link::Classes/StaticText:: they can store arbitrary content in the link:
 
 strong::DragBoth::, specifically, strong::accepts any:: dropped data and stores it into the strong::-object:: variable, as well as gives that variable as data strong::for dragging::.
 
-See: link::Classes/View#drag_and_drop:: for a general description of the drag and drop mechanism.
+See: link::Classes/View#Drag and drop:: for a general description of the drag and drop mechanism.
 
 
 
diff --git a/HelpSource/Classes/DragSink.schelp b/HelpSource/Classes/DragSink.schelp
index a67106a..6e68b3f 100644
--- a/HelpSource/Classes/DragSink.schelp
+++ b/HelpSource/Classes/DragSink.schelp
@@ -12,7 +12,7 @@ Akin to link::Classes/StaticText:: they can store arbitrary content in the link:
 
 strong::DragSink::, specifically, strong::accepts any:: dropped data and stores it into the strong::-object:: variable, but allows strong::no dragging::.
 
-See: link::Classes/View#drag_and_drop:: for a general description of the drag and drop mechanism.
+See: link::Classes/View#Drag and drop:: for a general description of the drag and drop mechanism.
 
 
 
diff --git a/HelpSource/Classes/DragSource.schelp b/HelpSource/Classes/DragSource.schelp
index ddf72df..bee710b 100644
--- a/HelpSource/Classes/DragSource.schelp
+++ b/HelpSource/Classes/DragSource.schelp
@@ -12,7 +12,7 @@ Akin to link::Classes/StaticText:: they can store arbitrary content in the link:
 
 strong::DragSource::, specifically, gives the strong::-object:: variable as the data strong::for dragging::, but strong::accepts no drop::.
 
-See: link::Classes/View#drag_and_drop:: for a general description of the drag and drop mechanism.
+See: link::Classes/View#Drag and drop:: for a general description of the drag and drop mechanism.
 
 
 
diff --git a/HelpSource/Classes/Env.schelp b/HelpSource/Classes/Env.schelp
index ff38c0b..6e39714 100644
--- a/HelpSource/Classes/Env.schelp
+++ b/HelpSource/Classes/Env.schelp
@@ -440,7 +440,7 @@ is used as a simple trigger. If it is an sustaining envelope
 (e.g. Env.adsr, Env.asr), the envelope is held open until the
 gate becomes 0, at which point is released.
 
-If strong::gate:: < 0, force release with time code:: -1.0 - gate ::, see link::#forced_release:: below.
+If strong::gate:: < 0, force release with time code:: -1.0 - gate ::. See link::Classes/EnvGen#Forced release:: example.
 
 
 argument::timeScale
diff --git a/HelpSource/Classes/EnvGen.schelp b/HelpSource/Classes/EnvGen.schelp
index b4d28c0..111da98 100644
--- a/HelpSource/Classes/EnvGen.schelp
+++ b/HelpSource/Classes/EnvGen.schelp
@@ -39,7 +39,7 @@ is used as a simple trigger. If it is an sustaining envelope
 (e.g. Env.adsr, Env.asr), the envelope is held open until the
 gate becomes 0, at which point is released.
 
-If strong::gate:: < 0, force release with time code:: -1.0 - gate ::, see link::#forced_release:: below.
+If strong::gate:: < 0, force release with time code:: -1.0 - gate ::. See link::#Forced release:: below.
 
 argument::levelScale
 
diff --git a/HelpSource/Classes/EnvelopeView.schelp b/HelpSource/Classes/EnvelopeView.schelp
index ebde5a5..fb113aa 100644
--- a/HelpSource/Classes/EnvelopeView.schelp
+++ b/HelpSource/Classes/EnvelopeView.schelp
@@ -141,6 +141,9 @@ METHOD:: connect
 	argument:: connections
 		An Array of Integers - indexes of nodes, each to become the second end to a new connection created.
 
+METHOD:: selection
+	note::Only in Qt GUI::
+	Returns an array of indexes of all selected nodes.
 
 
 SUBSECTION:: Appearance
diff --git a/HelpSource/Classes/GridLayout.schelp b/HelpSource/Classes/GridLayout.schelp
index aef1e6d..0b36ac0 100644
--- a/HelpSource/Classes/GridLayout.schelp
+++ b/HelpSource/Classes/GridLayout.schelp
@@ -49,7 +49,7 @@ METHOD:: rows
 
     You can make an item span more than one cell by wrapping it into an Array, followed by pairs of (\rows, number) and/or (\columns, number). You can also assign an alignment to an item by following it with a pair of (\align, alignment). \rows, \columns, and \align can be abbreviated with \r, \c, and \a, respectively.
 
-    The simplified syntax for placing key-value pairs into an array comes handy (see link::Reference/Syntax-Shortcuts#creating_arrays_with_key-value_pairs::, and the example below).
+    The simplified syntax for placing key-value pairs into an array comes handy (see link::Reference/Syntax-Shortcuts#Creating Arrays with key-value pairs::, and the example below).
 
     Example:
 Code::
diff --git a/HelpSource/Classes/InTrig.schelp b/HelpSource/Classes/InTrig.schelp
index 9c7bb16..449e33a 100644
--- a/HelpSource/Classes/InTrig.schelp
+++ b/HelpSource/Classes/InTrig.schelp
@@ -9,7 +9,7 @@ Any time the bus is "touched" ie. has its value set (using "/c_set"
 etc.), a single impulse trigger will be generated. Its amplitude is the
 value that the bus was set to.
 
-If the bus is set link::Classes/Bus#synchronous_control_bus_methods#synchrounosly:: no trigger will be generated.
+If the bus is set link::Classes/Bus#Synchronous control bus methods#synchronously:: no trigger will be generated.
 
 
 classmethods::
diff --git a/HelpSource/Classes/Linen.schelp b/HelpSource/Classes/Linen.schelp
index 059b661..fc2fb3b 100644
--- a/HelpSource/Classes/Linen.schelp
+++ b/HelpSource/Classes/Linen.schelp
@@ -16,7 +16,7 @@ argument::gate
 
 This triggers the envelope and holds it open while > 0.
 
-If strong::gate:: < 0, force release with time code:: -1.0 - gate ::, see link::Classes/EnvGen#forced_release::.
+If strong::gate:: < 0, force release with time code:: -1.0 - gate ::. See link::Classes/EnvGen#Forced release::.
 
 argument::attackTime
 
diff --git a/HelpSource/Classes/ListView.schelp b/HelpSource/Classes/ListView.schelp
index 1c681ef..e1b77e2 100644
--- a/HelpSource/Classes/ListView.schelp
+++ b/HelpSource/Classes/ListView.schelp
@@ -41,6 +41,9 @@ METHOD:: value
 METHOD:: valueAction
 	Sets link::#-value:: and triggers the link::#-action::.
 
+METHOD:: selection
+	note::Only in Qt GUI::
+	Returns an array of all selected indexes. See also: link::#-selectionMode::.
 
 
 SUBSECTION:: Appearance
diff --git a/HelpSource/Classes/MIDIOut.schelp b/HelpSource/Classes/MIDIOut.schelp
index df4e887..bd5071a 100644
--- a/HelpSource/Classes/MIDIOut.schelp
+++ b/HelpSource/Classes/MIDIOut.schelp
@@ -90,7 +90,7 @@ a = Pbind(\degree, Prand([1, 2, 3, [0, 5]], inf), \bend, Pwhite(0, 76, inf));
 (a <> (type: \midi, midiout: m)).play;
 ::
 
-See link::Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters#midi_output#PG_08_Event_Types_and_Parameters: MIDI Output:: for a list of midi commands supported by the 'midi' event type.
+See link::Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters#MIDI output:: for a list of midi commands supported by the 'midi' event type.
 
 subsection::Linux specific: Connecting and disconnecting ports
 
diff --git a/HelpSource/Classes/NodeProxy.schelp b/HelpSource/Classes/NodeProxy.schelp
index fd9287a..509395c 100644
--- a/HelpSource/Classes/NodeProxy.schelp
+++ b/HelpSource/Classes/NodeProxy.schelp
@@ -149,13 +149,13 @@ subsection::Setting the source
 
 NodeProxy keeps a number of slots which can be sources and are mixed on the same bus.. The default source is the slot 0. All objects can be exchanged while running, and also before and after. Normally, the source is active immediately. If sources are to be exchanged "quietly", set the node proxy to sleep (awake = false), or use the message prime().
 
-See the list under section link::#supported_sources::
+See the list under section link::#Supported sources::
 
 method::source
 Play a new synth through proxy and release/remove any old ones.
 
 argument::obj
-can be one of the supported inputs (see link::#supported_sources::)
+can be one of the supported inputs (see link::#Supported sources::)
 
 method::prime
 Set source without starting the synth. To start it, link::#-send:: can be used later. Running synths are released and proxy is initialized if still neutral.
@@ -176,7 +176,7 @@ argument::index
 where the object should be placed in the internal order. if code::-1::, all objects are freed
 
 argument::obj
-A valid source (see link::#supported_sources::).
+A valid source (see link::#Supported sources::).
 
 argument::channelOffset
 using a multichannel setup it can be useful to set this, when the objects numChannels is smaller than the proxy
diff --git a/HelpSource/Classes/Pbind.schelp b/HelpSource/Classes/Pbind.schelp
index 7c031ea..7df5275 100644
--- a/HelpSource/Classes/Pbind.schelp
+++ b/HelpSource/Classes/Pbind.schelp
@@ -8,7 +8,7 @@ description::
 Pbind combines several value streams into one event stream. Each value stream is assigned to one or more keys in the resulting event stream. It specifies a stream of strong::Events:: in terms of different patterns that are strong::bound:: to different keys in the Event.
 The patterns bound to keys are referred to as emphasis::value patterns:: and the Pbind itself is termed an event pattern.
 
-The keys used in a Pbind are usually determined by link::Classes/Event::'s default mechanism and the controls defined for the link::Classes/SynthDef:: to be played. (See link::#synthdef_and_event:: below for a brief discussion of both in relation to Pbind.)
+The keys used in a Pbind are usually determined by link::Classes/Event::'s default mechanism and the controls defined for the link::Classes/SynthDef:: to be played. (See link::#SynthDef and Event:: below for a brief discussion of both in relation to Pbind.)
 
 ClassMethods::
 
diff --git a/HelpSource/Classes/Pen.schelp b/HelpSource/Classes/Pen.schelp
index 51dcdff..6e4060c 100644
--- a/HelpSource/Classes/Pen.schelp
+++ b/HelpSource/Classes/Pen.schelp
@@ -503,7 +503,7 @@ method:: beginPath
 Discard any previous path.
 
 method:: beginTransparencyLayer
-Begins a new transparency layer. Transparency layers are useful when you want to apply an effect to a group of objects or create a composite graphic. See link::#transparency_layer_example:: for an example.
+Begins a new transparency layer. Transparency layers are useful when you want to apply an effect to a group of objects or create a composite graphic. See link::#Transparency layer example::.
 
 method:: endTransparencyLayer
 Ends the current transparency layer.
@@ -623,7 +623,7 @@ Set the opacity level.
 
 method:: blendMode
 Set the blending mode to use.
-See link::#blending_modes:: for more information.
+See link::#Blending modes:: for more information.
 
 method:: lineDash
 Set the line dash pattern. 
diff --git a/HelpSource/Classes/QLineLayout.schelp b/HelpSource/Classes/QLineLayout.schelp
index ea4795b..5f7ec36 100644
--- a/HelpSource/Classes/QLineLayout.schelp
+++ b/HelpSource/Classes/QLineLayout.schelp
@@ -31,7 +31,7 @@ Each item can be a strong::view::, a strong::layout::, strong::nil:: (for stretc
 
 discussion::
 
-You can assign a strong::stretch factor:: and/or strong::alignment:: to an item by wrapping it into an array, followed by pairs of ('stretch', factor) and/or ('align', flag). 'stretch' and 'align' may be abbreviated with 's' and 'a'. Simplified syntax for placing key-value pairs into an array comes handy (see link::Reference/Syntax-Shortcuts#creating_arrays_with_key-value_pairs::, and the example below).
+You can assign a strong::stretch factor:: and/or strong::alignment:: to an item by wrapping it into an array, followed by pairs of ('stretch', factor) and/or ('align', flag). 'stretch' and 'align' may be abbreviated with 's' and 'a'. Simplified syntax for placing key-value pairs into an array comes handy (see link::Reference/Syntax-Shortcuts#Creating arrays with key-value pairs::, and the example below).
 
 If the item is a stretchable empty space (nil) alignment will have no effect; if the item is a fixed-size empty space (an Integer), it is unaffected by both the stretch factor and alignment.
 
diff --git a/HelpSource/Classes/RecordBuf.schelp b/HelpSource/Classes/RecordBuf.schelp
index a26b358..078c658 100644
--- a/HelpSource/Classes/RecordBuf.schelp
+++ b/HelpSource/Classes/RecordBuf.schelp
@@ -43,7 +43,7 @@ occurs when a signal changes from negative value to positive
 value.
 
 argument:: doneAction
-an integer representing an action to be executed when the buffer is finished playing. This can be used to free the enclosing synth, etc. See link::Reference/UGen-doneActions:: for more detail. code::doneAction:: is only evaluated if loop is 0.
+an integer representing an action to be executed when the buffer is finished recording. This can be used to free the enclosing synth, etc. See link::Reference/UGen-doneActions:: for more detail. code::doneAction:: is only evaluated if loop is 0.
 
 Examples::
 
diff --git a/HelpSource/Classes/Server.schelp b/HelpSource/Classes/Server.schelp
index f38aeec..35cbac9 100644
--- a/HelpSource/Classes/Server.schelp
+++ b/HelpSource/Classes/Server.schelp
@@ -43,7 +43,7 @@ In general, when working with a single machine one will probably be using one of
 
 The difference between the two is that the local server runs as a separate application with its own address space, and the internal server runs within the same space as the language/client app.
 
-Both local and internal server supports link::#-scope#scoping:: and link::Classes/Bus#synchronous_control_bus_methods#synchronous bus access::.
+Both local and internal server supports link::#-scope#scoping:: and link::Classes/Bus#Synchronous control bus methods#synchronous bus access::.
 
 The local server, and any other server apps running on your local machine, have the advantage that if the language app crashes, it (and thus possibly your piece) will continue to run. It is thus an inherently more robust arrangement. But note that even if the synths on the server continue to run, any language-side sequencing and control will terminate if the language app crashes.
 
@@ -294,7 +294,7 @@ method:: pid
 Get process ID of running server (if not internal).
 
 method:: hasShmInterface
-Returns true if a link::Classes/ServerShmInterface:: is available. See also link::Classes/Bus#synchronous_control_bus_methods#Synchronous Control Bus Methods::.
+Returns true if a link::Classes/ServerShmInterface:: is available. See also link::Classes/Bus#Synchronous control bus methods::.
 discussion::
 The shared memory interface is initialized after first server boot.
 
diff --git a/HelpSource/Classes/String.schelp b/HelpSource/Classes/String.schelp
index 156d114..5a41ecf 100644
--- a/HelpSource/Classes/String.schelp
+++ b/HelpSource/Classes/String.schelp
@@ -452,12 +452,12 @@ g.close;
 ::
 
 method::split
-Returns an Array of Strings split at the separator. The separator is a link::Classes/Char::, a link::Classes/String::, or anything that can be converted into a string. It is strong::not:: included in the output array. The default separator is $/, handy for Unix paths.
+Returns an Array of Strings split at the separator. The separator is a link::Classes/Char::, and is strong::not:: included in the output array.
 code::
-"This/could/be/a/Unix/path".split;
 "These are several words".split($ );
-"These are several words".split(" ");
-"accgcagcttag".split("gc");
+
+// The default separator $/ is handy for Unix paths.
+"This/could/be/a/Unix/path".split;
 ::
 
 subsection:: Stream support
diff --git a/HelpSource/Classes/SynthDef.schelp b/HelpSource/Classes/SynthDef.schelp
index 4cf26bd..765dbea 100644
--- a/HelpSource/Classes/SynthDef.schelp
+++ b/HelpSource/Classes/SynthDef.schelp
@@ -186,9 +186,6 @@ argument:: mdPlugin
 (optional) The metadata plug-in class that will be used to persist metadata. If not supplied, the default plug-in is used. See the SynthDesc help file for details.
 
 
-method:: memStore
-This method has been deprecated, use add instead.
-
 method:: play
 A convenience method which compiles the def and sends it to target's server. When this asynchronous command is completed, it create one synth from this definition, using the argument values specified in the Array args.  For a list of valid addActions see link::Classes/Synth::. The default is \addToHead.
 Returns:: a corresponding Synth object.
diff --git a/HelpSource/Classes/TextView.schelp b/HelpSource/Classes/TextView.schelp
index c9a0710..6504e71 100644
--- a/HelpSource/Classes/TextView.schelp
+++ b/HelpSource/Classes/TextView.schelp
@@ -189,7 +189,7 @@ METHOD:: autohidesScrollers
 
 SUBSECTION:: Drag and Drop
 
-note:: Default drag-and-drop behavior of TextView is not defined in standard SC methods (see link::Classes/View#subclassing::), but in the view implementation instead (except for link::#-defaultGetDrag:: in Qt GUI). It may or may not be overridable by adding your own handlers (see link::Classes/View#drag_and_drop::), depending on the GUI kit in use.
+note:: Default drag-and-drop behavior of TextView is not defined in standard SC methods (see link::Classes/View#subclassing::), but in the view implementation instead (except for link::#-defaultGetDrag:: in Qt GUI). It may or may not be overridable by adding your own handlers (see link::Classes/View#Drag and drop::), depending on the GUI kit in use.
 ::
 
 Dragging from TextView will give the selected text in a String as drag data, while dropping will accept any object and insert it link::Classes/Object#-asString#as String:: at the drop location.
diff --git a/HelpSource/Classes/UserView.schelp b/HelpSource/Classes/UserView.schelp
index fdb7344..e5ba39b 100644
--- a/HelpSource/Classes/UserView.schelp
+++ b/HelpSource/Classes/UserView.schelp
@@ -13,7 +13,7 @@ To define how the view is drawn you set the link::#-drawFunc:: variable to a lin
 
 This class offers convenient mechanisms for creating animations, that is, to automatically redraw itself in regular time intervals. See the link::#animation#Animation:: section of this document.
 
-For a guide to using this view, see the link::Guides/GUI-Introduction.html#custom_views#Custom Views:: section of the 'Introduction to GUI'. For a tutorial on how to write a emphasis::subclass:: of UserView to make your own custom view classes, see the link::Guides/UserView-Subclassing:: guide.
+For a guide to using this view, see link::Guides/GUI-Introduction#Custom views::. For a tutorial on how to write a emphasis::subclass:: of UserView to make your own custom view classes, see the link::Guides/UserView-Subclassing:: guide.
 
 
 
@@ -109,13 +109,13 @@ METHOD:: frame
 
 SUBSECTION:: Actions
 
-	The UserView by itself does not respond to any interaction by the user. You can define the modes of interaction entirely on your own using mouse and keyboard actions. See link::Guides/GUI-Introduction#actions_and_hooks:_make_that_button_do_something!#Actions and Hooks:: section of the 'Introduction to GUI' for detailed explanation.
+	The UserView by itself does not respond to any interaction by the user. You can define the modes of interaction entirely on your own using mouse and keyboard actions. See link::Guides/GUI-Introduction#Actions and hooks: make that button do something!#Actions and Hooks:: for detailed explanation.
 
 	Note that there is no default mode of interaction with the UserView, so link::Classes/View#-action:: will never be triggered, if you don't implement that yourself.
 
 EXAMPLES::
 
-'Introduction to GUI' contains an link::Guides/GUI-Introduction#custom_views#example:: with elaborate explanation on how to use UserView. Below are further examples.
+'Introduction to GUI' contains an link::Guides/GUI-Introduction#Custom views#example:: with elaborate explanation on how to use UserView. Below are further examples.
 
 For a tutorial on how to write a emphasis::subclass:: of UserView to make your own custom view classes, see the link::Guides/UserView-Subclassing:: guide.
 
@@ -171,7 +171,7 @@ w.refresh;
 
 SUBSECTION:: Responding to mouse clicks and movement
 
-Using the link:: Classes/View#mouse_actions#mouse actions :: you can make UserView change the way it is drawn in response to mouse interaction. The sequence of examples below will guide you through the various possibilities.
+Using link::Classes/View#Mouse actions#mouse actions:: you can make UserView change the way it is drawn in response to mouse interaction. The sequence of examples below will guide you through the various possibilities.
 
 Clicking and moving the mouse on each of the painted squares in the following example will redraw them differently. See interpreter output for posted information that you can use in the mouse actions.
 
diff --git a/HelpSource/Classes/View.schelp b/HelpSource/Classes/View.schelp
index ef498c1..b50a066 100644
--- a/HelpSource/Classes/View.schelp
+++ b/HelpSource/Classes/View.schelp
@@ -518,28 +518,28 @@ list::
 METHOD:: mouseDownAction
     The object to be evaluated when a mouse button is pressed on the view.
 
-    The following arguments are passed at evaluation: strong::view, x, y, modifiers, buttonNumber, clickCount::.
+    The following arguments are passed at evaluation: strong::view, x, y, modifiers, buttonNumber, clickCount::. See link::#Mouse actions:: for explanation of arguments.
 
     The return value of evaluation controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
 METHOD:: mouseUpAction
     The object to be evaluated when a mouse button is released after it was pressed on the view.
 
-    The following arguments are passed at evaluation: strong::view, x, y, modifiers::.
+    The following arguments are passed at evaluation: strong::view, x, y, modifiers::. See link::#Mouse actions:: for explanation of arguments.
 
     The return value of evaluation controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
 METHOD:: mouseMoveAction
     The object to be evaluated whenever the mouse pointer moves after a mouse button was pressed on the view.
 
-    The following arguments are passed at evaluation: strong::view, x, y, modifiers::.
+    The following arguments are passed at evaluation: strong::view, x, y, modifiers::. See link::#Mouse actions:: for explanation of arguments.
 
     The return value of evaluation controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
 METHOD:: mouseOverAction
     The object to be evaluated when the mouse pointer moves over the view with no mouse buttons pressed.
 
-    The following arguments are passed at evaluation: strong::view, x, y::.
+    The following arguments are passed at evaluation: strong::view, x, y::. See link::#Mouse actions:: for explanation of arguments.
 
     The object is evaluated only when link::Classes/Window#-acceptsMouseOver:: of the containing Window (or, in Qt, link::#-acceptsMouseOver:: of the top View) is code::true::.
 
@@ -550,7 +550,7 @@ METHOD:: mouseWheelAction
 
     The object to be evaluated when the mouse wheel is used while the mouse is pointing onto the view.
 
-    The following arguments are passed at evaluation: strong::view, x, y, modifiers, xDelta, yDelta::.
+    The following arguments are passed at evaluation: strong::view, x, y, modifiers, xDelta, yDelta::. See link::#Mouse actions:: for explanation of arguments.
 
     The xDelta and yDelta arguments express rotation in horizontal and vertical direction, respectively. The value is in degrees (typically, an event occurs every 15 degrees), and can be positive or negative, depending on the direction of rotation.
 
@@ -561,14 +561,14 @@ METHOD:: mouseEnterAction
 
     The object to be evaluated when the mouse pointer enters the view.
 
-    The following arguments are passed at evaluation: strong::view, x, y::.
+    The following arguments are passed at evaluation: strong::view, x, y::. See link::#Mouse actions:: for explanation of arguments.
 
 METHOD:: mouseLeaveAction
     note:: strong:: Only in Qt GUI :: ::
 
     The object to be evaluated when the mouse pointer leaves the view.
 
-    The following arguments are passed at evaluation: strong::view, x, y::.
+    The following arguments are passed at evaluation: strong::view, x, y::. See link::#Mouse actions:: for explanation of arguments.
 
 
 SUBSECTION:: Key actions
@@ -591,6 +591,8 @@ list::
 ## strong::unicode:: - The Integer unicode number associated with the 'char' passed.
 
 ## strong::keycode:: - The hardware dependent keycode indicating the physical key. This will vary from machine to machine, but is useful for building musical interfaces using the computer keyboard. warning::Function key modifier in combination with another key may change the latter's keycode.::
+
+## strong::key:: - In Qt GUI, an Integer denoting a key, corresponding to the "Key" enum of the Qt C++ API. Comparing this value is the most reliable way to check which key was pressed. For a list of possible values, see: link::http://qt-project.org/doc/qt-4.8/qt.html#Key-enum::.
 ::
 
 note::
@@ -607,7 +609,7 @@ list::
 METHOD:: keyDownAction
     The object to be evaluated when a key is pressed.
 
-    The following arguments are passed at evaluation: strong::view, char, modifiers, unicode, keycode::.
+    The following arguments are passed at evaluation: strong::view, char, modifiers, unicode, keycode, key::. See link::#Key actions:: for explanation of arguments. Note that they 'key' argument is only passed in Qt GUI.
 
     The return value of evaluation controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
@@ -616,7 +618,7 @@ METHOD:: keyDownAction
 METHOD:: keyUpAction
     The object to be evaluated when a key is released.
 
-    The following arguments are passed at evaluation: strong::view, char, modifiers, unicode, keycode::.
+    The following arguments are passed at evaluation: strong::view, char, modifiers, unicode, keycode, key::. See link::#Key actions:: for explanation of arguments. Note that they 'key' argument is only passed in Qt GUI.
 
     The return value of evaluation controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
@@ -710,7 +712,7 @@ METHOD:: defaultKeyDownAction
 
 	The method called when a key is pressed and link::#-keyDownAction:: is nil. Subclass it to define your own functionality on key presses.
 
-	See link::#key_actions#Key actions :: for explanation of arguments.
+	See link::#Key actions:: for explanation of arguments.
 
     The return value controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
@@ -718,7 +720,7 @@ METHOD:: defaultKeyUpAction
 
 	The method called when a key is released and link::#-keyUpAction:: is nil.  Subclass it to define your own functionality on key-release.
 
-	See link::#key_actions#Key actions :: for explanation of arguments.
+	See link::#Key actions:: for explanation of arguments.
 
 	The return value controls the event propagation to parent view. See link::#Key and mouse event processing:: for details.
 
@@ -727,10 +729,10 @@ METHOD:: keyDown
 	Handles response to a key press event. First evaluates link::#*globalKeyDownAction::, then calls link::#-handleKeyDownBubbling::.
 
 	note::
-	In Qt GUI, instead of calling link::#-handleKeyDownBubbling::, this method directly triggers the action and returns, forwarding the action's return value. See link::#key_actions#Key Actions :: for detailed explanation.
+	In Qt GUI, instead of calling link::#-handleKeyDownBubbling::, this method directly triggers the action and returns, forwarding the action's return value. See link::#Key actions:: for detailed explanation.
 	::
 
-	See link::#key_actions#Key actions :: for explanation of arguments.
+	See link::#Key actions:: for explanation of arguments.
 
 	returns:: strong:: Only in Qt GUI: :: A Boolean, stating whether the event was handled or not (and will not or will propagate to the parent view, respectively), or the view, in which case it lets the Qt view implementation handle the event.
 
@@ -739,10 +741,10 @@ METHOD:: keyUp
 	Handles response to a key release event. Sets link::#-keyTyped:: to 'char', evaluates link::#*globalKeyUpAction::, and then calls link::#-handleKeyUpBubbling::.
 
 	note::
-	In Qt GUI, instead of calling link::#-handleKeyUpBubbling::, this method directly triggers the action and returns, forwarding the action's return value. See link::#key_actions#Key Actions :: for detailed explanation.
+	In Qt GUI, instead of calling link::#-handleKeyUpBubbling::, this method directly triggers the action and returns, forwarding the action's return value. See link::#Key actions:: for detailed explanation.
 	::
 
-	See link::#key_actions#Key actions :: for explanation of arguments.
+	See link::#Key actions:: for explanation of arguments.
 
 	returns:: strong:: Only in Qt GUI: :: A Boolean, stating whether the event was handled or not (and will not or will propagate to the parent view, respectively), or the view, in which case it lets the Qt view implementation handle the event.
 
@@ -753,7 +755,7 @@ METHOD:: keyModifiersChanged
 	In Qt GUI, instead of calling link::#-handleKeyModifiersChangedBubbling::, a modifier key press or release event also produces a normal key press or release event, and it is the handling of those events that will determine propagation to the parent.
 	::
 
-	See link::#key_actions#Key actions :: for explanation of arguments.
+	See link::#Key actions:: for explanation of arguments.
 
 METHOD:: handleKeyDownBubbling
 	note:: Only in Cocoa and SwingOSC GUI ::
@@ -776,24 +778,24 @@ METHOD:: keyTyped
 METHOD:: mouseDown
 	Handles response to a mouse button press event. Evaluates link::#-mouseDownAction::.
 
-	See link::#mouse_actions#Mouse actions :: for explanation of arguments.
+	See link::#Mouse actions:: for explanation of arguments.
 
 METHOD:: mouseUp
 	Handles response to a mouse button release event. Evaluates link::#-mouseDownAction::.
 
-	See link::#mouse_actions#Mouse actions :: for explanation of arguments.
+	See link::#Mouse actions:: for explanation of arguments.
 
 METHOD:: mouseMove
 	Handles response to mouse pointer moving after a mouse button has been pressed on the view. Evaluates link::#-mouseMoveAction::.
 
-	See link::#mouse_actions#Mouse actions :: for explanation of arguments.
+	See link::#Mouse actions:: for explanation of arguments.
 
 METHOD:: mouseOver
 	Handles response to mouse pointer moving over the view with no mouse buttons pressed. Evaluates link::#-mouseOverAction::.
 
 	This method is called only if link::Classes/Window#-acceptsMouseOver:: of the containing Window (or, in Qt, link::#-acceptsMouseOver:: of the top View) is code::true::.
 
-	See link::#mouse_actions#Mouse actions :: for explanation of arguments.
+	See link::#Mouse actions:: for explanation of arguments.
 
 METHOD:: mouseEnter
 	note:: strong:: Only in Qt GUI :: ::
diff --git a/HelpSource/Guides/GUI-Introduction.schelp b/HelpSource/Guides/GUI-Introduction.schelp
index 7d3d7e4..95c914a 100644
--- a/HelpSource/Guides/GUI-Introduction.schelp
+++ b/HelpSource/Guides/GUI-Introduction.schelp
@@ -229,7 +229,7 @@ Views and windows can be assigned strong::actions:: that they will perform whene
 
 Objects can also be given to views and windows to evalute on events that are not a direct result of user's interaction, but convey useful information about the view's operation and the state it moved in. In this case they are often differentiated from actions and called strong::hooks::.
 
-Here, we will give an overview of different kinds of actions and hooks. See link::Classes/View#actions_in_general:: and following sections for precise explanation of how to assign and make use of them.
+Here, we will give an overview of different kinds of actions and hooks. See link::Classes/View#Actions in general:: and following sections for precise explanation of how to assign and make use of them.
 
 
 subsection:: Default actions
@@ -252,7 +252,7 @@ All the views can be assigned actions to specific mouse and keyboard events, no
 
 You can assign actions to strong::mouse events:: generated when the mouse pointer enters the space of a view, when it moves over them, and when a mouse button is pressed or released.
 
-See link::Classes/View#mouse_actions#View: Mouse Actions:: for details.
+See link::Classes/View#Mouse actions:: for details.
 
 In the following example the StaticText will report whether the Button is pressed or released.
 
@@ -266,7 +266,7 @@ b.mouseUpAction = { t.string = "Button released" };
 
 You can assign actions to strong::keyboard events:: generated whenever a key is pressed or released while the view has keyboard focus. Keyboard focus is a state of a view in which it has exclusive priority to respond to keyboard events. A view that has keyboard focus typically in a way visually indicates so. On most platforms, pressing the Tab key will switch the keyboard focus between views in the active window and clicking on a view will give it focus.
 
-See link::Classes/View#key_actions#View: Key Actions:: for details.
+See link::Classes/View#Key actions:: for details.
 
 Typing text into any of the TextFields in the following example will change the color of the rectangle bellow, for each TextField a different color.
 
@@ -291,7 +291,7 @@ When a mouse button is pressed on a view together with Cmd(Mac OS) or Ctrl(Other
 
 It is possible to customize what object a view exports when dragged from and how a view reacts to objects dropped by assigning custom drag and drop actions.
 
-See link::Classes/View#drag_and_drop:: for details.
+See link::Classes/View#Drag and drop:: for details.
 
 code::
 (
diff --git a/HelpSource/Guides/News-3_6.schelp b/HelpSource/Guides/News-3_6.schelp
index ea06880..fe5d164 100644
--- a/HelpSource/Guides/News-3_6.schelp
+++ b/HelpSource/Guides/News-3_6.schelp
@@ -2,9 +2,11 @@ title:: News in 3.6
 summary:: A summary of news in SC 3.6
 categories:: News
 
-SECTION:: ScIDE
+SECTION:: SuperCollider IDE
 
-link::Guides/SCIde::
+A new cross-platform SuperCollider coding environment.
+
+Read link::Guides/SCIde##the guide::!
 
 
 SECTION:: Language-side news
@@ -25,7 +27,7 @@ ERROR: syntax error, unexpected BINOP, expecting ']'
        ^
   123;
 -----------------------------------
-ERROR: Command line parse failed 
+ERROR: Command line parse failed
 ::
 
 subsection:: Remove old syntax
@@ -55,8 +57,8 @@ Positioning of SplayAz was broken. The semantics of the TELETYPE::spread:: and T
 been changed in order to fix the behavior.
 
 subsection:: Array primitives respect mutability
-The array primitives now respect object mutability: writing to an immutable object now fails and changing an 
-immutable object with TELETYPE::add::, TELETYPE::addAll::, TELETYPE::insert::, TELETYPE::extend::, 
+The array primitives now respect object mutability: writing to an immutable object now fails and changing an
+immutable object with TELETYPE::add::, TELETYPE::addAll::, TELETYPE::insert::, TELETYPE::extend::,
 TELETYPE::growClear:: and TELETYPE::overwrite:: will return a newly allocated object.
 
 SECTION:: Server-side news
diff --git a/HelpSource/Guides/News-Qt-GUI.schelp b/HelpSource/Guides/News-Qt-GUI.schelp
index b4f9407..10d8597 100644
--- a/HelpSource/Guides/News-Qt-GUI.schelp
+++ b/HelpSource/Guides/News-Qt-GUI.schelp
@@ -46,7 +46,7 @@ The Qt layout system allows you to forget about pixels - it manages the size and
 
 SUBSECTION:: Intrinsic view sizes
 
-You may have noticed in the examples above that, besides omitting the code::parent:: argument, we sometimes omitted the code::bounds:: argument as well, at view construction. This is possible because views have intrinsically defined preferred and minimum sizes. See the link::Guides/GUI-Layout-Management#intrinsic_view_sizes#Intrinsic view sizes:: section of the Layout Management guide.
+You may have noticed in the examples above that, besides omitting the code::parent:: argument, we sometimes omitted the code::bounds:: argument as well, at view construction. This is possible because views have intrinsically defined preferred and minimum sizes. See link::Guides/GUI-Layout-Management#Intrinsic view sizes:: for further explanation.
 
 SUBSECTION:: Layout classes
 
@@ -163,7 +163,7 @@ t.mouseWheelAction = { |v,x,y,mod,dx,dy|
 
 SUBSECTION:: Hooks for position and size change
 
-Since views can be automatically repositioned and resized by link::#layout_management#layouts::, or by the user (if they are windows), it may come handy to make your view respond to these changes using link::Classes/View#-onMove:: and link::Classes/View#-onResize::.
+Since views can be automatically repositioned and resized by link::#Layout management#layouts::, or by the user (if they are windows), it may come handy to make your view respond to these changes using link::Classes/View#-onMove:: and link::Classes/View#-onResize::.
 
 code::
 (
@@ -277,7 +277,7 @@ w = Window()
 
 SUBSECTION:: ScrollView
 
-link::Classes/ScrollView:: allows to strong::replace the canvas:: that holds its child views with an arbitrary view. This allows great flexibility, including using a link::#layout_management#layout:: to manage the child views. See link::Classes/ScrollView#-canvas:: for explanation, and this link::Classes/ScrollView#examples#example::.
+link::Classes/ScrollView:: allows to strong::replace the canvas:: that holds its child views with an arbitrary view. This allows great flexibility, including using a link::#Layout management#layout:: to manage the child views. See link::Classes/ScrollView#-canvas:: for explanation, and this link::Classes/ScrollView#examples#example::.
 
 
 SECTION:: New views
diff --git a/HelpSource/Guides/Non-Realtime-Synthesis.schelp b/HelpSource/Guides/Non-Realtime-Synthesis.schelp
index f0837d3..9eee891 100644
--- a/HelpSource/Guides/Non-Realtime-Synthesis.schelp
+++ b/HelpSource/Guides/Non-Realtime-Synthesis.schelp
@@ -142,7 +142,7 @@ fork {
 			timer = Sweep.ar(1);
 			// 'i' must be audio-rate for BufWr.ar
 			BufWr.ar(timer, resultbuf, K2A.ar(i), loop: 0);
-			BufWr.ar(i, resultbuf, DC.ar(0), 0);  // # of points in index 0
+			BufWr.kr(i, resultbuf, DC.kr(0), 0);  // # of points in index 0
 		}).asBytes]],
 		[0, Synth.basicNew(\onsets, s, 1000).newMsg],
 		[dur, resultbuf.writeMsg(resultpath, headerFormat: "AIFF", sampleFormat: "float")]
diff --git a/HelpSource/Guides/SCIde.schelp b/HelpSource/Guides/SCIde.schelp
index f250da6..d0dcd8f 100644
--- a/HelpSource/Guides/SCIde.schelp
+++ b/HelpSource/Guides/SCIde.schelp
@@ -1,48 +1,133 @@
-title:: SC-IDE: SuperCollider Integrated Development Environment
-summary:: A brief overview of the main features of the cross-platform code editor environment introduced in SuperCollider 3.6.
+title:: SuperCollider IDE
+summary:: A guide to the cross-platform SuperCollider coding environment
 categories:: Frontends
 keyword:: scide
 keyword:: editor
 
-Section:: What is SC-IDE?
 
-SC-IDE is a new code-editing environment, developed specifically for SuperCollider and introduced in version 3.6. It's written using the Qt graphic interface framework, meaning that it is compatible with any operating system supported by Qt. In the alpha release, SC-IDE works correctly in Mac OSX, Linux and Windows 7. (Issues with Windows XP remain to be solved.)
+SuperCollider IDE is a new cross-platform coding environment, developed specifically for SuperCollider and introduced in version 3.6.
 
-note:: Throughout this document, Ctrl- indicates the modifier key for keyboard shortcuts that is used in Linux and Windows platforms. In Mac OSX, use Cmd- instead.::
+It is easy to start using, handy to work with, and sprinkled with powerful features for experienced SuperCollider coders. It is also very customizable.
 
-Section:: IDE window components
+It runs equally well and looks almost the same on Mac OSX, Linux and Windows 7. (Issues with Windows XP remain to be solved.)
 
-The editor window contains several panels, as shown here:
 
-image::sc-ide.png::
 
-You will spend most of the time in the code editor at right. SC's posted output appears in the emphasis::Post Window:: at left. Underneath the code editor is a emphasis::Tool Panel::, which supports find/replace, go-to line and command-line functions.
+Section:: Overview
+
+note:: Throughout this document, strong::Ctrl:: indicates the modifier key for keyboard shortcuts that is used on Linux and Windows platforms. strong::On Mac OSX, use Cmd instead::.::
+
+Here is an annotated screenshot describing various components of the IDE.
+Click link::Guides/sc_ide_overview.png##here:: for a natural-size version.
+
+image::sc_ide_overview_scaled.png::
 
-The Post Window is a emphasis::dock:: widget. You can grab the post window's title bar and drop the post window on any edge of the window you like.
 
-Section:: Getting help
 
-The help key is Ctrl-D (for Documentation).
+Subsection:: Central components
 
-If the cursor is on a class or method name, the help browser will try to open help for the class or method. Otherwise the main help page will appear.
+definitionlist::
+## Title Bar || Displays the current session name (see link::#Sessions::), and the filename of the current document.
+## Code Editor || The editor takes the central place. Here is where you will spend most of your time, writing code. Read more in the link::#Code editor:: section.
+## Document Tabs || Above the editor, there is a series of tabs, one for each open document. Clicking on a tab
+will display the related document in the editor. The tabs can be drag-and-dropped to change their order.
+## Tool Panel || This is where various tools related to code editing are displayed. The panel is initially hidden, and is only displayed when one of the tools is activated. You can activate each of the available tools via the menu strong::View > Tool Panels::, as well as using keyboard shortcuts. This the list of tools:
+  list::
+	## Find (Ctrl+F) - Find text in the current document.
+	## Replace (Ctrl+R) - Find and replace text in the current document.
+	## Go-to-line (Ctrl+L) - Jump to a particular line of the current document by number.
+	## Command Line (Ctrl+E) - Write and evaluate single lines of code, as in a terminal.
+	::
+## Status Bar || Contains status information about the interpreter and the sound server. Also displays any occasional notifications related to the IDE.
+::
 
-If you want to go directly to help for a specific topic without entering text into the editor, press Ctrl-shift-D and type the identifier into the pop-up box.
+Subsection:: Docklets
 
-Section:: Evaluating code
+Around the central area described above, there are strong::dock areas:: where various other panels called strong::docklets:: are displayed. They are named so, because they can be moved around to different positions in the dock areas, or even be undocked to float above the main window, and they may also be hidden. You can show or hide each of the available docklets via the menu strong::View > Docklets::.
+
+Here is a list of available docklets:
 
 definitionlist::
-## Ctrl-return || The main key to evaluate code. Its behavior is "intelligent":
+## Help Browser || Displays and navigates through help pages.
+## Post Window || Displays the response of the interpreter: results of code evaluation and various notifications, warnings, errors, etc...
+## Documents List || A list of open documents; when you have a lot of them, this may be more handy than the Document tabs.
+::
+
+The docklets may be moved to different areas by strong::drag-and-dropping:: them by their own title bar. There are four dock areas, along each of the edges of the screen: left, right, top and bottom. .
+
+The docklets may be in four different states:
+
+list::
+## strong::Docked:: - You can drag-and-drop docklets into each dock area either strong::side by side:: or strong::on top of each other::. In the latter case, small tabs will appear that allow you to switch the visible docklet in a particular area. Some docklets are restricted so they can only be placed into some of the areas.
+## strong::Undocked:: - By dropping a docklet outside of any dock area it will stay separate and always on top of the main window. You can also undock it using the menu accessible by clicking in the top-left corner of a docklet.
+## strong::Detached:: - Using the menu accessible by clicking in the top-left corner of a docklet, you can detach it. A detached docklet behaves just like a normal window: it may be minimized and maximized, the main window may be raised in front of it, it will appear in the operating system task bar, etc.
+## strong::Hidden:: - A docklet may be hidden either using the menu accessible by clicking in the top-left corner of a docklet, closing a detached docklet's window, or using the main window menu View > Docklets. To show a hidden docklet, use the same main window menu.
+::
+
+Section:: Getting help
+
+All the help options are accessible via the main menu under Help.
+
+The keyboard shortcut strong::Ctrl+D:: (as in Documentation) is the most handy way to get help. It will navigate the Help Browser to a help page related to the text around the cursor:
 list::
-## If a block of code is manually selected, that block will be executed.
-## If no code is selected but the cursor is within a emphasis::region::, the entire region will be executed. See below.
-## Otherwise, the current line containing the cursor will be executed.
+## If the cursor is at a class or a method name, its documentation will be displayed.
+## If there is no class or method matching the text at the cursor, the help search results will be displayed for the text.
+## In any case, the Help Browser will be shown, if it was hidden.
 ::
-## Ctrl-shift-return || Always evaluates the single line under the cursor, whether or not a code block is selected.
+
+The Ctrl+D shortcut works in various places in the IDE: the Editor, the Command Line, the Post Window, or the Help Browser itself. It will always use the text around the cursor or the selected text (if any) to search for help.
+
+If you want to go directly to a specific help page, use the strong::Ctrl+Shift+D:: shortcut which will pop up a box where you can type a name of a class or a method, or any text, and hit Return to get related help.
+
+In the title bar of the Help Browser there are controls to strong::navigate:: to the help home page, or backwards and forwards in history, as well as to strong::reload:: the current page.
+
+Using the strong::Ctrl+F:: shortcut while the Help Browser is focused, you are sent directly to the strong::Find:: field, which you can use to search for text in the current help page.
+
+
+
+Section:: Starting up the system
+
+There is no SuperCollider fun without two crucial components:
+
+definitionlist::
+## The language interpreter ||
+...is what interprets and executes your SuperCollider code. It is strong::started automatically:: when the IDE starts. However, it is actually separate from the IDE, so it can be stopped and restarted at your will using the strong::Language menu::. When the interpreter is running, the box in the Status Bar labelled "Interpreter" will display "Active" in green letters.
+
+## The audio server ||
+...is what makes your SuperCollider code sound. Without the audio server running, you can run SuperCollider code, but it will not make any sound. Unlike the interpreter, the audio server is strong::not started automatically::. To start it, use the quick strong::Ctrl+B:: shortcut, or the strong::Language menu::. Note that the language interpreter must already be running in order to start the audio server. When the audio server is running, the box in the Status Bar labelled "Server" will display the status in green numbers.
 ::
 
-Subsection:: Regions
+Of course, once the interpreter and the audio server are running, the most fun part of it all is strong::evaluating code::. Use the strong::Ctrl+Return:: shortcut to evaluate the current line, region, or selection. See link::#Evaluating code:: for more information.
+
+When you want to strong::stop the running code::, use the strong::Ctrl+.:: shortcut (Ctrl+Period). See more on this at the end of the link::#Evaluating code:: section.
+
+Most of the time, there is no need for strong::restarting the interpreter::. However, this becomes very useful if you accidentally evaluate code that goes into an infinite loop without a pause, or if the interpreter simply crashes and stops by itself. In that case, use the strong::Language menu:: to restart the interpreter.
 
-emphasis::Regions:: make it quick and easy to evaluate longer blocks of code. A region is surrounded by parentheses.
+When your class library changes, either because you have installed or removed a Quark, or just modified a class file, you will need to strong::recompile the class library:: in order for changes to take effect. You can do that quickly via the strong::Ctrl+Shift+L:: shortcut, or via the Language menu.
+
+
+
+Section:: Code editor
+
+Subsection:: Evaluating code
+
+To evaluate code, use one of the following keyboard commands:
+
+definitionlist::
+
+## Ctrl+Return || Most used, "smart" code evaluation:
+
+list::
+## Normally, the current line will be evaluated (where the cursor is).
+## If the cursor is within a emphasis::region::, the entire region will be evaluated. See below for explanation of regions.
+## If some code is selected, the selection will be evaluated.
+::
+
+## Shift+Return || Evaluates either the current line, or the selection (if any). Use this to evaluate a single line within a region without the need to select it.
+
+::
+
+strong::Regions:: make it quick and easy to evaluate larger portions of code. A region is surrounded by parentheses; to be interpreted as a region, the parenthesis must each be the only character on a line.
 
 code::
 (
@@ -53,87 +138,203 @@ Pbind(
 )
 ::
 
-If the cursor is anywhere between the outermost parentheses, pressing ctrl-return will evaluate the entire block, starting with code::Pbind:: and ending with code::play;::. (This is faster even than SuperCollider.app's method of selecting a block by double-clicking inside the opening parenthesis.)
+If the cursor is anywhere between the outermost parentheses, pressing Ctrl+Return will automatically evaluate the entire contents within the parentheses, starting with code::Pbind:: and ending with code::play;::.
+
+To quickly evaluate a portion of code, you can also double-click on any bracket (round, squared, or curly), which will select everything between this and the other matching bracket, so you can quickly evaluate it.
+
+To strong::stop:: any running code, use the strong::Ctrl+.:: shortcut (Ctrl+Period). This will stop all the code scheduled on the link::Tutorials/Getting-Started/14-Scheduling-Events##clocks::, as well as all the sound processes on the audio server.
+
+note:: If some code goes into a strong::infinite loop without a pause::, using Ctrl+. will not help to stop it. In this case, you will need to restart the interpreter (see link::#Starting up the system::).
+::
+
+Subsection:: Automatic indentation
+
+The editor helps you by automatically indenting lines according to opening and closing brackets as you type. With every new line, the indentation will be increased if there is an opening bracket on the previous line. As you continue to type closing brackets, the indentation will decrease to align with the matching opening brackets.
+
+If the indentation of a portion of code is messed up, you can select it and press strong::Tab:: to automatically indent it according to surrounding brackets. This also works without selection for the current line.
+
+You can manually insert a level of indentation anywhere in code by pressing strong::Shift+Tab::.
+
+The indentation can either use strong::tab characters or spaces::, which you can quickly toggle via the main menu option Edit > Use Spaces for Indentation. More indentation options are available in the IDE preferences dialog.
+
+
+
+Subsection:: Automatic completion
+
+As you type, the editor will try to find possible continuations of your code, and pop up a list of suggestions, so you can quickly insert one instead of typing the whole text. This is called emphasis::autocompletion:: and is a great aid towards writing code faster and with less errors.
 
-Regions may be more compact visually, provided that the opening and closing parentheses are the first and last elements on their respective lines.
+In general, this works for class and method names. These are the things that the editor can autocomplete:
 
+list::
+
+## strong::Class names::
 code::
-(Pbind(
-	\degree, Pseries(0, 1, 8),
-	\dur, 0.25
-).play)
+Sin<...>
 ::
+When you have typed at least 3 letters of a class name, a list of classes beginning with these letters will be shown.
 
-Any other element before or after the () delimiters means that the block will not be interpreted as a region.
+## strong::Method names following class names::
+code::
+Array.<...>
+::
+When you type a dot after a class name, a list of methods of that class will be shown.
 
+## strong::Method names following literals and built-ins::
 code::
-// (1 + 2) is not a region:
-// the () indicate order of operations instead
-(1 + 2).postln;
+123.<...>
+currentEnvironment.<...>
 ::
+When you type a dot after a literal (number, string, symbol, etc.) or a built-in (currentEnvironment, thisProcess, etc.), a list of instance methods of their classes will be shown.
 
-Section:: Typing code
+## strong::Method names following a variable name::
+code::
+value.lin<...>
+::
+When you type a dot and 3 letters after a variable, a list of all methods of all classes starting with these letters will be shown (because the class of the variable is not known).
+::
 
-Subsection:: Automatic indentation
+Once the autocompletion menu pops up, you can use the arrow keys or Page Up and Page Down to select an entry, and press Return to insert it into your code. If you continue typing, the list of options will be further filtered to match the typed text.
 
-While you are typing, SC-IDE keeps track of opening and closing brackets and automatically indents lines accordingly. You don't have to press TAB to indent or Backspace to outdent. When you close a bracket, SC-IDE will automatically push the text to the left to align with the matching opening bracket.
+Note that the autocompletion menu disappears when the typed text exactly matches one of autocompletion options. This is intended as help: the menu tries to get out of your way when you probably don't need it.
 
-Subsection:: Automatic completion of class and method names
+If the autocompletion menu is not shown, you can show it using strong::Ctrl+Space::, as long as there is any autocompletion options available. You can always dismiss the menu by pressing strong::Escape::.
 
-If you begin to type a class name, the editor will pop up a menu listing the class names that match what you have typed so far. Keep typing, and the list is filtered accordingly. At any point, use the up and down arrows to choose the completion and then press Return to choose the class. The complete class name will be entered into the code.
+Subsection:: Method call assistance
 
-The same happens when typing a method name after a dot. If SC-IDE can determine the class of object that will receive the method call, the list of matching methods will be appropriate for that class. Otherwise, after three characters, the list will include methods from all classes. (This is because it's often impossible to know the class of the result of an expression without evaluating the expression.)
+The editor helps you when writing arguments of a method by showing you a complete list of the method's arguments and their default values, as long as it manages to figure out exactly which method that is. This is called emphasis::method call assistance::. It helps you to know exactly which argument you are typing, and reduces the need to look into documentation.
 
-If the auto-complete menu does not appear automatically during typing, you can force it using Ctrl-space.
+The assistance is activated as soon as you type an opening parenthesis after a method name, at which point a box containing the arguments will pop up. However, if the class of the method is not known, first a menu of classes that implement the method will be shown, and after you select one of the classes using the arrow keys or the Page Up and Page Down keys, and press Return, the box with arguments will pop up.
 
-Subsection:: Method call aid
+So, for example, in the following cases method call assistance will pop up immediately:
+code::
+SinOsc.ar(
+123.forBy(
+::
+...while in the following cases, you will first need to select a class, because the class is not known:
+code::
+min(
+x.play(
+[1,2,3].inject(
+::
 
-When you type an opening parenthesis after a method name, the editor will try to produce a floating pop-up listing the method's arguments. The pop-up appears automatically if the class of the receiver can be determined.
+If method call assistance is not shown, you can activate it using strong::Ctrl+Shift+Space:: with the cursor between parenthesis surrounding the arguments. You can always dismiss it by pressing strong::Escape::.
 
-If not, a pop-up menu appears listing the classes that implement the method. You can choose the desired class implementation that you intend, and then the floating pop-up will appear.
 
-If the method call aid does not appear automatically during typing, you can force it using Ctrl-shift-space.
 
-Section:: Editor features
+Section:: Tool panels
 
-definitionlist::
-## Find/Replace || Ctrl-F brings up the Find tool panel; Ctrl-R brings up Replace. If you started with the Find panel but then want to replace, press Ctrl-R and your search string will be preserved. See also the Options menu at right. Regular expression find/replace is supported, including backreferences.
+All tool panels are listed and may be activated via the main menu strong::View > Tool Panels::. To close the
+currently displayed panel, press strong::Escape::.
 
-## Command line || Sometimes, you need to evaluate a temporary expression that does not need to be saved in a code document. Press Ctrl-E, and a one line text box appears. Any expression you type here will be evaluated after you press Return. Up and down arrows navigate through the history of commands entered in this box.
 
-## Go to line || Press Ctrl-G, enter a line number, and the editor will jump to that line.
 
-## Focus post window || Ctrl-L gives focus to the post window. Here, you can use arrow keys and Page Up / Page Down to scroll through output from the interpreter. Press TAB to return to the code editor.
+subsection:: Find and Replace
 
-## Implementation-of || Ctrl-I (for Implementation) opens a class or method definition.
+Shortcuts: Find: strong::Ctrl+F:: / Replace: strong::Ctrl+R::
 
-## References-to || Ctrl-U (for Uses) produces a list of references to a class or method.
+The strong::Find:: panel is used to find text in the currently open document. As soon as you start typing into the Find field, the entered text is searched for, and the results are highlighted. The first found result is also selected. By pressing Return, you can jump through all the result.
+
+Notice how the Status Bar reports the strong::number of search results::, whenever the search text is changed.
+
+If you invoke the Find shortcut with some text selected in the code editor, the Find field will be filled with the selection.
+
+The strong::Replace:: panel is an extension to the Find panel: it adds another field where you can enter text to replace the search results with. By pressing Return in the Replace field, the current search result will be replaced and the next result will be selected.
+
+Use the strong::Replace All:: button to replace all search results. Notice how the Status Bar reports the strong::number of replacements::.
+
+You can access more strong::search options:: by clicking on the button in the top-right corner of the Find/Replace panel. The options are:
+
+list::
+## strong::Match Case:: - make the search case-sensitive.
+## strong::Regular Expression:: - treat the search text as a emphasis::regular expression::. More on this below.
+## strong::Whole Words:: - only search for whole words; i.e. the characters on the left and the right side of a search result must not be letters or numbers.
 ::
 
-Section:: Interacting with the SC language interpreter
+strong::Regular expressions:: are a powerful way to search for text that matches a pattern, instead of an exact sequence of characters. When this option is enabled, replacement supports strong::backreferences::, i.e. reusing portions of the found pattern in the replacement text.
 
-Unlike SuperCollider.app in OSX, SC-IDE is a separate process from the interpreter. This is good for stability. If you accidentally execute code that causes an infinite loop, you can use the Language menu to Stop SCLang and regain control without losing unsaved code.
+We will not go here into details about regular expression. To learn more, we would like to refer you to an excellent tutorial online: link::http://www.regular-expressions.info/quickstart.html::
 
-The Language menu contains commands to start and stop the interpreter and recompile the library.
 
-definitionlist::
-## Stop activity || Ctrl-., like Cmd-. in SuperCollider.app, stops any executing code and sound from the server.
 
-## Recompile library || Ctrl-shift-L recompiles the library.
+subsection:: Go-To-Line
+
+Shortcut: strong::Ctrl+L::
+
+Using the Go-To-Line tool, you can quickly jump to a line in the current document, by number. Just enter the line number and press Return.
+
+
+
+subsection:: Comand Line
+
+Shortcut: strong::Ctrl+E::
+
+Sometimes, you need to evaluate a temporary expression that does not need to be saved into a document. The Command Line offers a one-line text field where you can enter a SuperCollider expression, and press Return to evaluate it.
+
+Use the Up and Down arrow keys to navigate through the strong::history:: of evaluated expressions. Up will move to older expressions, and Down will move back to more recent ones.
+
+
+
+Section:: Class library navigation
+
+Often it is very useful to be able to jump directly to a place in a file, where a particular class or method is implemented, or to find all the places where a class or a method name is used. The IDE offers practical ways to achieve that.
+
+subsection:: Look up implementations
+
+The strong::Ctrl+I:: shortcut with the text cursor at a method or a class name will open a dialog with a list of places where that method or class is implemented. By selecting one of the entries and pressing Return, the IDE will open the file and position the text cursor at the location you are looking for.
+
+Note that the Ctrl+I shortcut works in various places in the IDE, wherever there may be code: the Editor, the Command Line, the Post Window, or the Help Browser. It will always use the text around the cursor or the selected text (if any) to look for a method or a class with a matching name.
+
+The list in the dialog is formed as follows:
+list::
+## If you are looking up a class name, the class and all its methods including those of its superclasses will be listed.
+## If you are looking up a method name, all the methods of all classes with that name will be listed.
+## If there is no class or method that matches the name exactly, partial matches will be displayed
 ::
 
-Section:: Interacting with the audio server
+You can use the text field at the top of the dialog to search for a method or a class directly. Just type in some text and press Return.
+
+The strong::Ctrl+Shift+I:: shortcut will open the dialog empty, regardless of position of the text cursor.
+
+subsection:: Look up references
+
+The strong::Ctrl+U:: shortcut will open a dialog similar to the one described above, except that it will list places where a method or a class with a particular name is emphasis::used::. Note that this only searches class files in the class library, not regular code files.
+
+Just as the Ctrl+I shortcut described above, Ctrl+U will work at any place in the IDE where there may be code.
+
+The strong::Ctrl+Shift+U:: shortcut will open the dialog empty, regardless of position of the text cursor.
+
 
-The Language menu also includes commands to boot, reboot and quit the server, as well as open a level meter and dump a list of running nodes.
 
 Section:: Sessions
 
-Sessions preserve the state of the editor environment at the time of quitting the editor, so you can resume with the same arrangement of IDE components and open documents automatically.
+Sessions preserve the state of the IDE at the time of quitting, so next time you use it you can resume with the same arrangement of open documents and link::#Docklets#docklets:: automatically.
 
-(More to write later)
+To strong::save:: the current state as a new session, use the "Session > Save Session As..." menu action. You will be prompted to enter a name for the new session.
+
+To strong::open:: a saved session, use the "Session > Open Session..." menu, which contains all the saved sessions.
+
+To start a strong::new:: unsaved session, use the "Session > New Session" menu action.
+
+You can quickly strong::switch:: the active session via a pop-up list of all sessions using the Ctrl+Shift+Q shortcut.
+
+More options, including strong::removing:: a saved session, are available in a session management dialog accessible via "Session > Manage Sessions..." menu action.
+
+By default, the IDE starts with the strong::last session:: used before closing, but you can change this behavior in the IDE configuration dialog.
+
+
+
+Section:: Various handy shortcuts
+
+definitionlist::
+## Focus Post Window: Ctrl+P ||  Gives focus to the Post Window. Then you can use arrow keys and Page Up / Page Down to scroll through output from the interpreter. Press Tab to return to the Code Editor.
+## Clear Post Window: Ctrl+Shift+P || Cleares the Post Window contents.
+## Enlarge/Shrink Font: Ctrl++ / Ctrl+- || Enlarges or shrinks font in Code Editor, Post Window, or Help Browser.
+::
+
+Section:: Customization
 
-Section:: Customizing
+Many customization options are available in the IDE configuration dialog, accessible via "Edit > Preferences" menu action.
 
-Many customization options are available under Settings >> Configure IDE. In particular, fonts, colors and keyboard shortcuts may be set here.
+The options include: fonts, code colors, keyboard shortcuts,...
 
 (More to write later)
diff --git a/HelpSource/Guides/UsingMIDI.schelp b/HelpSource/Guides/UsingMIDI.schelp
index e952ef8..7047bc0 100644
--- a/HelpSource/Guides/UsingMIDI.schelp
+++ b/HelpSource/Guides/UsingMIDI.schelp
@@ -11,7 +11,7 @@ SuperCollider's out of the box MIDI support is fairly thorough (although not as
 The main MIDI classes are:
 
 definitionList::
-## link::Classes/MIDIClient:: || This class connects to the operating system's MIDI layer, and obtains the lists of available MIDI sources and destinations. The information about the hardware is stored in code::MIDIClient.sources:: and code::MIDIClient.destinations:: as link::Classes/MIDIEndPoint:: objects. MIDIClient must be initialized before MIDI can be received. See the example at link::#playing_notes_on_your_midi_keyboard#Playing notes on your MIDI keyboard::.
+## link::Classes/MIDIClient:: || This class connects to the operating system's MIDI layer, and obtains the lists of available MIDI sources and destinations. The information about the hardware is stored in code::MIDIClient.sources:: and code::MIDIClient.destinations:: as link::Classes/MIDIEndPoint:: objects. MIDIClient must be initialized before MIDI can be received. See the example link::#Playing notes on your MIDI keyboard::.
 ## link::Classes/MIDIFunc:: || The optimal way to receive the most typical MIDI messages: note on/off, controller, pitch bend, aftertouch, poly-touch and program change.
 ## link::Classes/MIDIdef:: || Related to link::Classes/MIDIFunc::, this class keeps several MIDIFunc objects in global storage, by name. Especially helpful for live or interactive use.
 ## link::Classes/MIDIOut:: || Supports MIDI output to hardware ports or inter-application MIDI buses.
@@ -28,7 +28,7 @@ For most uses, the preferred way to receive MIDI input is using the link::Classe
 
 link::Classes/MIDIFunc:: has a number of convenience methods allowing you to register for the different MIDI message types. It can  filter incoming MIDI messages to respond to a particular device, channel number, or specific message number, or ranges thereof.
 
-See link::#playing_notes_on_your_midi_keyboard#Playing notes on your MIDI keyboard:: below for a simple example using the note-on and note-off MIDIFuncs.
+See link::#Playing notes on your MIDI keyboard:: below for a simple example using the note-on and note-off MIDIFuncs.
 
 subsection:: MIDIIn
 
@@ -69,7 +69,7 @@ q.value;
 
 The link::Classes/MIDIIn:: help file contains a more elaborate example.
 
-SuperCollider does not have a built-in class to handle this automatically. However, emphasis::dewdrop_lib::, a third party library mentioned link::#third_party_libraries#below::, includes Voicer (to simplify note on-off bookkeeping) and VoicerMIDISocket (to trigger Voicer notes by MIDI). Users interested in this functionality may wish to examine that library.
+SuperCollider does not have a built-in class to handle this automatically. However, emphasis::dewdrop_lib::, a third party library mentioned link::#Third party libraries#below::, includes Voicer (to simplify note on-off bookkeeping) and VoicerMIDISocket (to trigger Voicer notes by MIDI). Users interested in this functionality may wish to examine that library.
 
 section::Sending MIDI out
 
diff --git a/HelpSource/Guides/sc-ide.png b/HelpSource/Guides/sc-ide.png
deleted file mode 100644
index cc75aac..0000000
Binary files a/HelpSource/Guides/sc-ide.png and /dev/null differ
diff --git a/HelpSource/Guides/sc_ide_overview.png b/HelpSource/Guides/sc_ide_overview.png
new file mode 100644
index 0000000..52c3180
Binary files /dev/null and b/HelpSource/Guides/sc_ide_overview.png differ
diff --git a/HelpSource/Guides/sc_ide_overview_scaled.png b/HelpSource/Guides/sc_ide_overview_scaled.png
new file mode 100644
index 0000000..001853d
Binary files /dev/null and b/HelpSource/Guides/sc_ide_overview_scaled.png differ
diff --git a/HelpSource/Overviews/SymbolicNotations.schelp b/HelpSource/Overviews/SymbolicNotations.schelp
index 4c641e2..5360d4c 100644
--- a/HelpSource/Overviews/SymbolicNotations.schelp
+++ b/HelpSource/Overviews/SymbolicNotations.schelp
@@ -192,15 +192,15 @@ code:: ?? { } :: is generally recommended. code::?:: always evaluates the second
 code:: ?? :: evaluates the function conditionally (only when needed).
 If the function defines no variables, the function will be inlined for speed.
 
-Especially useful when the absence of an object requires a new object to be created. In this example, it's critical that a new SCSlider not be created if the object was already passed in.
+Especially useful when the absence of an object requires a new object to be created. In this example, it's critical that a new Slider not be created if the object was already passed in.
 code::
 f = { |slider, parent|
-    slider = slider ?? { SCSlider.new(parent, Rect(0, 0, 100, 20)) };
+    slider = slider ?? { Slider.new(parent, Rect(0, 0, 100, 20)) };
     slider.value_(0);
 };
 ::
 If the first line inside the function instead read code::
-slider = slider ? SCSlider.new(parent, Rect(0, 0, 100, 20));
+slider = slider ? Slider.new(parent, Rect(0, 0, 100, 20));
 ::
 , a new slider would be created even if it is not needed, or used.
 
diff --git a/HelpSource/Reference/Synth-Definition-File-Format.schelp b/HelpSource/Reference/Synth-Definition-File-Format.schelp
index 5f4191d..0401ea5 100644
--- a/HelpSource/Reference/Synth-Definition-File-Format.schelp
+++ b/HelpSource/Reference/Synth-Definition-File-Format.schelp
@@ -13,7 +13,7 @@ list::
 ## strong::SynthDef2:: - A revised version that extends SynthDef's capacity.
 ::
 
-This document describes SynthDef2's format. See link::#original_synthdef_format#Original SynthDef format:: for the differences between SynthDef and SynthDef2.
+This document describes SynthDef2's format. See link::#Original SynthDef format:: for the differences between SynthDef and SynthDef2.
 
 section:: Basic types
 All data is stored big endian. All data is packed, not padded or aligned.
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_01_Introduction.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_01_Introduction.schelp
index 87b4c7e..6e27bda 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_01_Introduction.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_01_Introduction.schelp
@@ -1,4 +1,4 @@
-title:: PG_01_Introduction
+title:: Pattern Guide 01: Introduction
 summary:: Fundamental concepts of patterns and streams
 categories:: Streams-Patterns-Events>A-Practical-Guide
 
@@ -69,6 +69,9 @@ definitionList::
 ## link::Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations:: || list::
 	## An ever-changing drumbeat
 ::
+## link::Tutorials/A-Practical-Guide/PG_Cookbook08_Swing:: || list::
+	## Emulating quantize-with-swing from conventional sequencers
+::
 ::
 
 subsection::Reference material
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_02_Basic_Vocabulary.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_02_Basic_Vocabulary.schelp
index 51a0a5a..89c137f 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_02_Basic_Vocabulary.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_02_Basic_Vocabulary.schelp
@@ -1,4 +1,4 @@
-title:: PG_02_Basic_Vocabulary
+title:: Pattern Guide 02: Basic Vocabulary
 summary:: Common patterns to generate streams of single values
 related:: Tutorials/A-Practical-Guide/PG_01_Introduction, Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind.schelp
index c089bc3..e980ff1 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind.schelp
@@ -1,4 +1,4 @@
-title:: PG_03_What_Is_Pbind
+title:: Pattern Guide 03: What Is Pbind
 summary:: Pattern-based musical sequencing with Pbind and cousins
 related:: Tutorials/A-Practical-Guide/PG_02_Basic_Vocabulary, Tutorials/A-Practical-Guide/PG_04_Words_to_Phrases
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_04_Words_to_Phrases.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_04_Words_to_Phrases.schelp
index 5d879f6..ed35bca 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_04_Words_to_Phrases.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_04_Words_to_Phrases.schelp
@@ -1,4 +1,4 @@
-title:: PG_04_Words_to_Phrases
+title:: Pattern Guide 04: Words to Phrases
 summary:: Nesting patterns, arranging music in terms of phrases
 related:: Tutorials/A-Practical-Guide/PG_03_What_Is_Pbind, Tutorials/A-Practical-Guide/PG_05_Math_on_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_05_Math_on_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_05_Math_on_Patterns.schelp
index 6da6acf..b7a8825 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_05_Math_on_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_05_Math_on_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_05_Math_on_Patterns
+title:: Pattern Guide 05: Math on Patterns
 summary:: Performing math and collection operations on patterns
 related:: Tutorials/A-Practical-Guide/PG_04_Words_to_Phrases, Tutorials/A-Practical-Guide/PG_060_Filter_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_060_Filter_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_060_Filter_Patterns.schelp
index ba61460..b2dd000 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_060_Filter_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_060_Filter_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_060_Filter_Patterns
+title:: Pattern Guide 060: Filter Patterns
 summary:: Overview of patterns that modify the behavior of other patterns
 related:: Tutorials/A-Practical-Guide/PG_05_Math_on_Patterns, Tutorials/A-Practical-Guide/PG_06a_Repetition_Contraint_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06a_Repetition_Contraint_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06a_Repetition_Contraint_Patterns.schelp
index ad62495..b91ea53 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06a_Repetition_Contraint_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06a_Repetition_Contraint_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_06a_Repetition_Contraint_Patterns
+title:: Pattern Guide 06a: Repetition Contraint Patterns
 summary:: Patterns that repeat values, or cut other patterns off early
 related:: Tutorials/A-Practical-Guide/PG_060_Filter_Patterns, Tutorials/A-Practical-Guide/PG_06b_Time_Based_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06b_Time_Based_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06b_Time_Based_Patterns.schelp
index 805e423..17dbb03 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06b_Time_Based_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06b_Time_Based_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_06b_Time_Based_Patterns
+title:: Pattern Guide 06b: Time Based Patterns
 summary:: Patterns using time as the basis for their evaluation
 related:: Tutorials/A-Practical-Guide/PG_06a_Repetition_Contraint_Patterns, Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns.schelp
index 2b3e430..29c1289 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_06c_Composition_of_Patterns
+title:: Pattern Guide 06c: Composition of Patterns
 summary:: Making multiple event patterns act as one
 related:: Tutorials/A-Practical-Guide/PG_06b_Time_Based_Patterns, Tutorials/A-Practical-Guide/PG_06d_Parallel_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06d_Parallel_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06d_Parallel_Patterns.schelp
index 7633868..dd2927b 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06d_Parallel_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06d_Parallel_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_06d_Parallel_Patterns
+title:: Pattern Guide 06d: Parallel Patterns
 summary:: Running multiple event patterns simultaneously
 related:: Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns, Tutorials/A-Practical-Guide/PG_06e_Language_Control
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06e_Language_Control.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06e_Language_Control.schelp
index 0d64b47..e6b89fb 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06e_Language_Control.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06e_Language_Control.schelp
@@ -1,4 +1,4 @@
-title:: PG_06e_Language_Control
+title:: Pattern Guide 06e: Language Control
 summary:: Patterns that mimic some language-side control structures
 related:: Tutorials/A-Practical-Guide/PG_06d_Parallel_Patterns, Tutorials/A-Practical-Guide/PG_06f_Server_Control
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06f_Server_Control.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06f_Server_Control.schelp
index b72828e..95eace7 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06f_Server_Control.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06f_Server_Control.schelp
@@ -1,4 +1,4 @@
-title:: PG_06f_Server_Control
+title:: Pattern Guide 06f: Server Control
 summary:: Patterns that manage server-side resources
 related:: Tutorials/A-Practical-Guide/PG_06e_Language_Control, Tutorials/A-Practical-Guide/PG_06g_Data_Sharing
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_06g_Data_Sharing.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_06g_Data_Sharing.schelp
index f447771..ce260ed 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_06g_Data_Sharing.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_06g_Data_Sharing.schelp
@@ -1,4 +1,4 @@
-title:: PG_06g_Data_Sharing
+title:: Pattern Guide 06g: Data Sharing
 summary:: Writing patterns to use information from other patterns
 related:: Tutorials/A-Practical-Guide/PG_06f_Server_Control, Tutorials/A-Practical-Guide/PG_07_Value_Conversions
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_07_Value_Conversions.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_07_Value_Conversions.schelp
index 789c0ea..fc7e1ef 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_07_Value_Conversions.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_07_Value_Conversions.schelp
@@ -1,4 +1,4 @@
-title:: PG_07_Value_Conversions
+title:: Pattern Guide 07: Value Conversions
 summary:: Describes the default event's conversions for pitch, rhythm and amplitude
 related:: Tutorials/A-Practical-Guide/PG_06g_Data_Sharing, Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters.schelp
index b5db2ea..2c6d08a 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters.schelp
@@ -1,4 +1,4 @@
-title:: PG_08_Event_Types_and_Parameters
+title:: Pattern Guide 08: Event Types and Parameters
 summary:: Describes the event types defined in the default event, and the parameters they expect
 related:: Tutorials/A-Practical-Guide/PG_07_Value_Conversions, Tutorials/A-Practical-Guide/PG_Cookbook01_Basic_Sequencing
 categories:: Streams-Patterns-Events>A-Practical-Guide
@@ -195,7 +195,7 @@ definitionList::
 
 subsection::Buffer control
 
-All of these buffer event types expect the buffer number to be provided. They will not automatically get a buffer number from the server's buffer allocator. A Buffer object is allowed -- you could create the Buffer first using code::Buffer.alloc:: or code::Buffer.new:: and then use this object in the control events. See also link::#event_types_with_cleanup#Event types with cleanup:: below for other, user-friendlier Buffer control options.
+All of these buffer event types expect the buffer number to be provided. They will not automatically get a buffer number from the server's buffer allocator. A Buffer object is allowed -- you could create the Buffer first using code::Buffer.alloc:: or code::Buffer.new:: and then use this object in the control events. See also link::#Event types with cleanup:: below for other, user-friendlier Buffer control options.
 
 definitionList::
 ## alloc || Allocate memory for a buffer on the server. Only one buffer may be allocated per event.
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook01_Basic_Sequencing.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook01_Basic_Sequencing.schelp
index cbf8220..806c69c 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook01_Basic_Sequencing.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook01_Basic_Sequencing.schelp
@@ -1,4 +1,4 @@
-title:: PG_Cookbook01_Basic_Sequencing
+title:: Pattern Guide Cookbook 01: Basic Sequencing
 summary:: Sequencing basics
 related:: Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters, Tutorials/A-Practical-Guide/PG_Cookbook02_Manipulating_Patterns
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook02_Manipulating_Patterns.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook02_Manipulating_Patterns.schelp
index 1257a07..69ee80c 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook02_Manipulating_Patterns.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook02_Manipulating_Patterns.schelp
@@ -1,4 +1,4 @@
-title:: PG_Cookbook02_Manipulating_Patterns
+title:: Pattern Guide Cookbook 02: Manipulating Patterns
 summary:: Manipulating pattern data
 related:: Tutorials/A-Practical-Guide/PG_Cookbook01_Basic_Sequencing, Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control.schelp
index d319e3d..25bd9e2 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control.schelp
@@ -1,4 +1,4 @@
-title:: PG_Cookbook03_External_Control
+title:: Pattern Guide Cookbook 03: External Control
 summary:: Pattern control by external device
 related:: Tutorials/A-Practical-Guide/PG_Cookbook02_Manipulating_Patterns, Tutorials/A-Practical-Guide/PG_Cookbook04_Sending_MIDI
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook04_Sending_MIDI.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook04_Sending_MIDI.schelp
index 38203ad..54935b0 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook04_Sending_MIDI.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook04_Sending_MIDI.schelp
@@ -1,4 +1,4 @@
-title:: PG_Cookbook04_Sending_MIDI
+title:: Pattern Guide Cookbook 04: Sending MIDI
 summary:: Sending notes under pattern control to MIDI devices
 related:: Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control, Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples.schelp
index e143dcc..918bf54 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples.schelp
@@ -1,4 +1,4 @@
-title:: PG_Cookbook05_Using_Samples
+title:: Pattern Guide Cookbook 05: Using Samples
 summary:: Using samples
 related:: Tutorials/A-Practical-Guide/PG_Cookbook04_Sending_MIDI, Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network.schelp
index 0545195..7690a96 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network.schelp
@@ -1,4 +1,4 @@
-title:: PG_Cookbook06_Phrase_Network
+title:: Pattern Guide Cookbook 06: Phrase Network
 summary:: Sequencing by a network of phrases, Articulating notes with PmonoArtic
 related:: Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples, Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations
 categories:: Streams-Patterns-Events>A-Practical-Guide
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations.schelp
index 59349a1..ebdabc3 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations.schelp
@@ -1,6 +1,6 @@
-title:: PG_Cookbook07_Rhythmic_Variations
+title:: Pattern Guide Cookbook 07: Rhythmic Variations
 summary:: An ever-changing drumbeat
-related:: Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network, Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals
+related:: Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network, Tutorials/A-Practical-Guide/PG_Cookbook08_Swing
 categories:: Streams-Patterns-Events>A-Practical-Guide
 
 section::Creating variations on a base rhythmic pattern
@@ -227,4 +227,4 @@ t.schedAbs(t.nextTimeOnGrid(4, -0.001), {
 
 Previous:	link::Tutorials/A-Practical-Guide/PG_Cookbook06_Phrase_Network::
 
-Next:		link::Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals::
+Next:		link::Tutorials/A-Practical-Guide/PG_Cookbook08_Swing::
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook08_Swing.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook08_Swing.schelp
new file mode 100644
index 0000000..f7807bd
--- /dev/null
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Cookbook08_Swing.schelp
@@ -0,0 +1,216 @@
+title:: Pattern Guide Cookbook 08: Swing
+summary:: A filter pattern that turns equal rhythmic divisions into swung notes
+related:: Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations, Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals
+categories:: Streams-Patterns-Events>A-Practical-Guide
+
+section:: Converting equal divisions into "swing"
+
+Most MIDI sequencers have a "swing" feature, which handles a note's timing differently depending on its metric position. A note in a stronger metric position is played on time; a note in a weaker position is delayed by some fraction of the beat.
+
+In SuperCollider patterns, it's more convenient to express rhythm in terms of equal note durations. To mimic the swing-quantize behavior of conventional sequencers, it's helpful to have a way to modify the output events from a pattern so that the metrically-weaker notes sound later, without requiring the original pattern to be aware of the notes' metric positions.
+
+subsection:: Requirements
+
+definitionlist::
+## Parameter: Base rhythmic value || You should be able to swing any subdivision of the beat: 8th-, 16th-, quarter-notes. If this is 0.5 (8th-notes), then quarter notes will play unchanged.
+## Parameter: Swing amount || Fraction of the base rhythm to delay the weaker notes. The actual delay time will be code::base_value * swing_amount::.
+## Weaker-positioned notes || The attack needs to be moved later, using the event's timingOffset (see link::Tutorials/A-Practical-Guide/PG_08_Event_Types_and_Parameters#Timing control::). Also, if the next note is in a stronger position, this note needs to be shorter by the same amount.
+## Stronger-positioned notes || The attack will not be moved in time; but, if the next note is in a weaker position, this note needs to be slightly longer to compensate for the additional time between note onsets.
+## Non-duple subdivisions || Swing typically assumes a beat will be divided into two notes. Treating triplets, quintuplets or other divisions by the same algorithm would produce confusing rhythms. So, we may also want a parameter teletype::swingThreshold:: to disable swing for notes that are too far away from the base rhythmic value.
+::
+
+
+subsection:: Implementation
+
+link::Classes/Pchain:: applies one pattern to the result of another pattern. So, if we can write a pattern that will modify the events coming from the source, Pchain will be an easy way to combine them.
+
+The parameters noted above should be provided in the source pattern. Alternately, they may be given as an event at the end of Pchain's list of inputs. (Pchain, following the model of function composition, evaluates its patterns in reverse order. See link::Tutorials/A-Practical-Guide/PG_06c_Composition_of_Patterns::.)
+
+So... deep breath...
+
+code::
+(
+~swingify = Prout({ |ev|
+	var now, nextTime = 0, thisShouldSwing, nextShouldSwing = false, adjust;
+	while { ev.notNil } {
+		// current time is what was "next" last time
+		now = nextTime;
+		nextTime = now + ev.delta;
+		thisShouldSwing = nextShouldSwing;
+		nextShouldSwing = ((nextTime absdif: nextTime.round(ev[\swingBase])) <= (ev[\swingThreshold] ? 0)) and: {
+			(nextTime / ev[\swingBase]).round.asInteger.odd
+		};
+		adjust = ev[\swingBase] * ev[\swingAmount];
+		// an odd number here means we're on an off-beat
+		if(thisShouldSwing) {
+			ev[\timingOffset] = (ev[\timingOffset] ? 0) + adjust;
+			// if next note will not swing, this note needs to be shortened
+			if(nextShouldSwing.not) {
+				ev[\sustain] = ev.use { ~sustain.value } - adjust;
+			};
+		} {
+			// if next note will swing, this note needs to be lengthened
+			if(nextShouldSwing) {
+				ev[\sustain] = ev.use { ~sustain.value } + adjust;
+			};
+		};
+		ev = ev.yield;
+	};
+});
+)
+::
+
+subsection:: Examples
+
+code::
+p = Pbind(\degree, Pseries(0, 1, 8), \dur, 0.25);
+
+p.play;  // straight 16ths
+
+// swingBase: 0.25: Every other 16th-note is delayed
+// swingAmount: 1/3: Off-beat notes will be delayed by 1/3 of a 16th-note
+Pchain(~swingify, p, (swingBase: 0.25, swingAmount: 1/3)).play;
+
+// note duration = twice swingBase, no swing (correct)
+Pchain(~swingify, Pstretch(2, p), (swingBase: 0.25, swingAmount: 1/3)).play;
+
+// hear the result of different swing amounts
+(
+Ppar([
+	// 60% of a 16th-note
+	Pchain(~swingify, p, (swingBase: 0.25, swingAmount: 0.6, pan: -1)),
+	// 20% of a 16th-note
+	Pchain(~swingify, p, (swingBase: 0.25, swingAmount: 0.2, pan: 1, octave: 6))
+]).play;
+)
+
+
+(
+q = Ppar([
+	// walking bass (by an idiot bass player who only chooses notes randomly)
+	Pbind(
+		\octave, 3,
+		\degree, Pwhite(0, 7, inf),
+		\dur, 0.5
+	),
+	Pseq([
+		Pchain(
+			~swingify,
+			Pbind(
+				\degree, Pseries(-7, 1, 15) +.x Pseq([0, 9], 1),
+				\dur, Pwhite(1, 3, inf) * 0.25
+			),
+			(swingBase: 0.25, swingAmount: 0.2)
+		),
+		Pfuncn({ q.stop; Event.silent(1) }, 1)
+	])
+]).play;
+)
+::
+
+Swing should not apply to triplets. Note that the rhythmic value 1/6 introduces floating-point rounding error, so we need to raise the threshold slightly. code::(1/6)+(1/6)+(1/6):: is within 0.05 of an eighth-note, but code::1/6:: is not, causing triplet notes to pass through unchanged.
+
+code::
+// swing threshold: throw a few triplets in
+(
+Pchain(
+	~swingify,
+	Pbind(
+		\degree, Pseries(-7, 1, 15),
+		\dur, Pwrand([Pn(0.25, 2), Pn(1/6, 3)], [0.7, 0.3], inf)
+	),
+	(swingBase: 0.25, swingAmount: 0.2, swingThreshold: 0.05)
+).play;
+)
+::
+
+
+subsection:: Explanation
+
+We need to measure the current metric position against some reference point. The most logical is the time when the pattern started processing. link::Classes/Prout:: allows variables to persist for the entire length of its stream (unlike link::Classes/Pfunc::).
+
+code::
+(
+~swingify = Prout({ |ev|
+	var now, nextTime = 0, thisShouldSwing, nextShouldSwing = false, adjust;
+::
+
+~~
+
+If the source event is nil, errors will follow, so we should stop looping in that case.
+
+code::
+	while { ev.notNil } {
+::
+
+~~
+
+code::now:: is what the next time emphasis::was::. The time of the next event simply adds code::ev.delta::.
+
+code::
+		now = nextTime;
+		nextTime = now + ev.delta;
+::
+
+~~
+
+As discussed above, there are two factors to decide whether or not this note should be delayed:
+
+definitionlist::
+## Is it close enough to the base rhythm grid? || Round the current time to the grid, and the difference between the actual and rounded times must be less than the threshold: code::(now absdif: now.round(ev[\swingBase])) <= (ev[\swingThreshold] ? 0)::.
+## Is it in a weaker metrical position? || Dividing by the base value yields an even number for stronger positions, and odd for weaker positions: code::(now / ev[\swingBase]).round.asInteger.odd::.
+::
+
+There's room also for a slight optimization. In the previous event, we decided whether the next event would need to swing or not. Now, in the current event, we are processing what used to be "next." So we can just copy the old value of teletype::nextShouldSwing:: from last time, instead of redoing the calculation. (Note that this requires code::nextShouldSwing = false:: in the beginning -- because teletype::now:: is always 0 for the first event, and consequently can never swing.)
+
+code::
+		// current this time is what was "next" last time
+		thisShouldSwing = nextShouldSwing;
+		nextShouldSwing = ((nextTime absdif: now.round(ev[\swingBase])) <= (ev[\swingThreshold] ? 0)) and: {
+			(nextTime / ev[\swingBase]).round.asInteger.odd
+		};
+		adjust = ev[\swingBase] * ev[\swingAmount];
+::
+
+~~
+
+Naming the variables appropriately makes the subsequent "if" block almost self-explanatory. Two notes:
+
+list::
+## The event's teletype::timingOffset:: may be nonzero, in which case, it would be wrong to overwrite. We need to emphasis::adjust:: the timing offset: +.
+## The original teletype::sustain:: value may be calculated from teletype::dur:: and teletype::legato::. That calculation is done by the code::~sustain:: function, which must be executed from within the event (link::Classes/Environment#-use::).
+::
+
+code::
+		if(thisShouldSwing) {
+			ev[\timingOffset] = (ev[\timingOffset] ? 0) + adjust;
+			// if next note will not swing, this note needs to be shortened
+			if(nextShouldSwing.not) {
+				ev[\sustain] = ev.use { ~sustain.value } - adjust;
+			};
+		} {
+			// if next note will swing, this note needs to be lengthened
+			if(nextShouldSwing) {
+				ev[\sustain] = ev.use { ~sustain.value } + adjust;
+			};
+		};
+::
+
+~~
+
+teletype::yield:: is a bit of a funny method. It doesn't return its result right away. It passes the yielded value to whichever block of code called teletype::next:: on the stream, and then pauses. Then, the next time teletype::next:: is called, the teletype::yield:: method returns, taking its value from teletype::next::'s argument. Here, that will be the event currently being processed, so we need to reassign it to teletype::ev:: and loop back.
+
+This is the normal, correct way to handle input values from teletype::next:: within routines.
+
+code::
+		ev = ev.yield;
+	};
+});
+)
+::
+
+
+
+Previous:	link::Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations::
+
+Next:		link::Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals::
\ No newline at end of file
diff --git a/HelpSource/Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals.schelp b/HelpSource/Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals.schelp
index 1a8583a..5b12274 100644
--- a/HelpSource/Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals.schelp
+++ b/HelpSource/Tutorials/A-Practical-Guide/PG_Ref01_Pattern_Internals.schelp
@@ -1,6 +1,6 @@
-title:: PG_Ref01_Pattern_Internals
+title:: Pattern Guide Reference 01: Pattern Internals
 summary:: Details of pattern implementation, with guidance on writing new pattern classes
-related:: Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations
+related:: Tutorials/A-Practical-Guide/PG_Cookbook08_Swing
 categories:: Streams-Patterns-Events>A-Practical-Guide
 
 section::Inner workings of patterns
@@ -272,4 +272,4 @@ If the pattern creates something on the server (bus, group, synth, buffer etc.),
 
 Or, if there is a chance of the pattern stopping before one or more child patterns has stopped on its own, EventStreamCleanup is important so that the pattern is aware of cleanup actions from the children. For example, in a construction like code::Pfindur(10, Pmono(name, pairs...)):: , Pmono may continue for more than 10 beats, in which case Pfindur will cut it off. The Pmono needs to end its synth, but it doesn't know that a pattern higher up in the chain is making it stop. It becomes the parent's responsibility to clean up after the children. As illustrated above, EventStreamCleanup handles this with only minimal intrusion into normal pattern logic.
 
-Previous:	link::Tutorials/A-Practical-Guide/PG_Cookbook07_Rhythmic_Variations::
+Previous:	link::Tutorials/A-Practical-Guide/PG_Cookbook08_Swing::
diff --git a/HelpSource/Tutorials/Mark_Polishook_tutorial/17_Delays_reverbs.schelp b/HelpSource/Tutorials/Mark_Polishook_tutorial/17_Delays_reverbs.schelp
index 2097e55..65c937c 100644
--- a/HelpSource/Tutorials/Mark_Polishook_tutorial/17_Delays_reverbs.schelp
+++ b/HelpSource/Tutorials/Mark_Polishook_tutorial/17_Delays_reverbs.schelp
@@ -131,7 +131,7 @@ code::
 
 section::Reverberation
 
-The next example is by James McCartney. It comes from the link::#why_supercollider_2.0_?#01 Why SuperCollider:: document that was part of the SuperCollider2 distribution.
+The next example is by James McCartney. It comes from the link::#Why Supercollider 2.0?#01 Why SuperCollider:: document that was part of the SuperCollider2 distribution.
 
 The example is more or less a Schroeder reverb - a signal passed through a parallel bank of comb filters which then pass through a series of allpass filters.
 
@@ -245,7 +245,7 @@ s.queryAllNodes;
 
 For context, here, below, is the complete text of the strong::01 Why SuperCollider:: document (by James McCartney) from the SuperCollider 2 distribution.
 
-section::Why SuperCollider 2.0 ?
+section::Why SuperCollider 2.0?
 
 SuperCollider version 2.0 is a new programming language. strong::Why invent a new language and not use an existing language?:: Computer music composition is a specification problem. Both sound synthesis and the composition of sounds are complex problems and demand a language which is highly expressive in order to deal with that complexity. Real time signal processing is a problem demanding an efficient implementation with bounded time operations.
 There was no language combining the features I wanted and needed for doing digital music synthesis. The SuperCollider language is most like Smalltalk. Everything is an object. It has class objects, methods, dynamic typing, full closures, default arguments, variable length argument lists, multiple assignment, etc. The implementation provides fast, constant time method lookup, real time garbage collection, and stack allocation of most function contexts while maintaining full closure semantics.
diff --git a/QtCollider/Common.cpp b/QtCollider/Common.cpp
index 498e781..a92a5d7 100644
--- a/QtCollider/Common.cpp
+++ b/QtCollider/Common.cpp
@@ -1,3 +1,24 @@
+/************************************************************************
+*
+* Copyright 2010 Jakob Leben (jakob.leben at gmail.com)
+*
+* This file is part of SuperCollider Qt GUI.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*
+************************************************************************/
+
 #include "Common.h"
 #include "Slot.h"
 
diff --git a/QtCollider/Common.h b/QtCollider/Common.h
index e49acf1..28170a2 100644
--- a/QtCollider/Common.h
+++ b/QtCollider/Common.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -68,7 +68,6 @@ namespace QtCollider {
     Event_Proxy_BringFront,
     Event_Proxy_SetFocus,
     Event_Proxy_SetAlwaysOnTop,
-    Event_Proxy_StartDrag,
     Event_Proxy_Release
   };
 
diff --git a/QtCollider/LanguageClient.cpp b/QtCollider/LanguageClient.cpp
index 93cfa2a..c293eaa 100644
--- a/QtCollider/LanguageClient.cpp
+++ b/QtCollider/LanguageClient.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/LanguageClient.h b/QtCollider/LanguageClient.h
index 6d1b3de..dc472f7 100644
--- a/QtCollider/LanguageClient.h
+++ b/QtCollider/LanguageClient.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/QObjectProxy.cpp b/QtCollider/QObjectProxy.cpp
index 9796a43..0598941 100644
--- a/QtCollider/QObjectProxy.cpp
+++ b/QtCollider/QObjectProxy.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -464,7 +464,7 @@ bool QObjectProxy::eventFilter( QObject * watched, QEvent * event )
 
   QList<QVariant> args;
 
-  if( !filterEvent( watched, event, *d, args ) ) {
+  if( !preProcessEvent( watched, event, *d, args ) ) {
     qcProxyDebugMsg(3,QString("Event (%1, %2) not handled, forwarding to the widget")
       .arg(type)
       .arg(event->spontaneous() ? "spontaneous" : "inspontaneous") );
@@ -477,7 +477,11 @@ bool QObjectProxy::eventFilter( QObject * watched, QEvent * event )
     .arg(d->method->name)
     .arg(d->sync == Synchronous ? "sync" : "async") );
 
-  return invokeEventHandler( event, *d, args );
+  bool eventHandled = invokeEventHandler( event, *d, args );
+
+  eventHandled = postProcessEvent( watched, event, eventHandled );
+
+  return eventHandled;
 }
 
 bool QObjectProxy::invokeEventHandler( QEvent *event, EventHandlerData &eh, QList<QVariant> & args )
@@ -507,7 +511,7 @@ bool QObjectProxy::invokeEventHandler( QEvent *event, EventHandlerData &eh, QLis
   return false;
 }
 
-bool QObjectProxy::filterEvent( QObject *, QEvent *e, EventHandlerData & eh, QList<QVariant> & args )
+bool QObjectProxy::preProcessEvent( QObject *, QEvent *e, EventHandlerData & eh, QList<QVariant> & args )
 {
   return eh.enabled;
 }
diff --git a/QtCollider/QObjectProxy.h b/QtCollider/QObjectProxy.h
index 3bb6e86..7016978 100644
--- a/QtCollider/QObjectProxy.h
+++ b/QtCollider/QObjectProxy.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -133,7 +133,9 @@ class QObjectProxy : public QObject
 
     virtual void customEvent( QEvent * );
 
-    virtual bool filterEvent( QObject *, QEvent *, EventHandlerData &, QList<QVariant> & args );
+    virtual bool preProcessEvent( QObject *, QEvent *, EventHandlerData &, QList<QVariant> & args );
+
+    virtual bool postProcessEvent( QObject *, QEvent *, bool handled ) { return handled; }
 
     bool invokeEventHandler( QEvent *e, EventHandlerData &, QList<QVariant> & args );
 
diff --git a/QtCollider/QWidgetProxy.cpp b/QtCollider/QWidgetProxy.cpp
index 9fb53a8..2911aa8 100644
--- a/QtCollider/QWidgetProxy.cpp
+++ b/QtCollider/QWidgetProxy.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -30,6 +30,8 @@
 #include <QPainter>
 #include <QFontMetrics>
 #include <QUrl>
+#include <QMimeData>
+#include <QDrag>
 
 #ifdef Q_WS_X11
 # include "hacks/hacks_x11.hpp"
@@ -43,9 +45,14 @@
 using namespace QtCollider;
 
 QAtomicInt QWidgetProxy::_globalEventMask = 0;
-
-QWidgetProxy::QWidgetProxy( QWidget *w, PyrObject *po )
-: QObjectProxy( w, po ), _keyEventWidget( w ), _mouseEventWidget( w )
+QMimeData * QWidgetProxy::sDragData = 0;
+QString QWidgetProxy::sDragLabel;
+
+QWidgetProxy::QWidgetProxy( QWidget *w, PyrObject *po ):
+    QObjectProxy( w, po ),
+    _keyEventWidget( w ),
+    _mouseEventWidget( w ),
+    _performDrag(false)
 { }
 
 void QWidgetProxy::setKeyEventWidget( QWidget *w )
@@ -130,6 +137,21 @@ bool QWidgetProxy::setParent( QObjectProxy *parentProxy )
   return false;
 }
 
+void QWidgetProxy::setDragData( QMimeData * data, const QString & label )
+{
+    if (data == 0)
+        return;
+
+    if (sDragData == 0) {
+        sDragData = data;
+        sDragLabel = label;
+        _performDrag = true;
+    } else {
+        delete data;
+        qcErrorMsg( "QWidgetProxy: attempt at starting a drag while another one is in progress.");
+    }
+}
+
 void QWidgetProxy::customEvent( QEvent *e )
 {
   int type = e->type();
@@ -143,9 +165,6 @@ void QWidgetProxy::customEvent( QEvent *e )
     case QtCollider::Event_Proxy_SetAlwaysOnTop:
       setAlwaysOnTopEvent( static_cast<SetAlwaysOnTopEvent*>(e) );
       return;
-    case QtCollider::Event_Proxy_StartDrag:
-      startDragEvent( static_cast<StartDragEvent*>(e) );
-      return;
     default:
       QObjectProxy::customEvent(e);
   }
@@ -200,35 +219,34 @@ void QWidgetProxy::setAlwaysOnTopEvent( QtCollider::SetAlwaysOnTopEvent *e )
   }
 }
 
-void QWidgetProxy::startDragEvent( StartDragEvent* e )
+void QWidgetProxy::performDrag()
 {
-  QWidget *w = widget();
-  if( !w ) return;
-
-  QFont f;
-  const QString & label = e->label;
-  QFontMetrics fm( f );
-  QSize size = fm.size( 0, label ) + QSize(8,4);
-
-  QPixmap pix( size );
-  QPainter p( &pix );
-  p.setBrush( QColor(255,255,255) );
-  QRect r( pix.rect() );
-  p.drawRect(r.adjusted(0,0,-1,-1));
-  p.drawText( r, Qt::AlignCenter, label );
-  p.end();
-
-  QMimeData *mime = e->data;
-  e->data = 0; // prevent deleting the data when event destroyed;
-
-  QDrag *drag = new QDrag(w);
-  drag->setMimeData( mime );
-  drag->setPixmap( pix );
-  drag->setHotSpot( QPoint( 0, + r.height() + 2 ) );
-  drag->exec();
+    Q_ASSERT(sDragData);
+
+    QFont f;
+    const QString & label = sDragLabel;
+    QFontMetrics fm( f );
+    QSize size = fm.size( 0, label ) + QSize(8,4);
+
+    QPixmap pix( size );
+    QPainter p( &pix );
+    p.setBrush( QColor(255,255,255) );
+    QRect r( pix.rect() );
+    p.drawRect(r.adjusted(0,0,-1,-1));
+    p.drawText( r, Qt::AlignCenter, label );
+    p.end();
+
+    QDrag *drag = new QDrag( widget() );
+    drag->setMimeData( sDragData );
+    drag->setPixmap( pix );
+    drag->setHotSpot( QPoint( 0, + r.height() + 2 ) );
+    drag->exec();
+
+    sDragData = 0;
+    sDragLabel.clear();
 }
 
-bool QWidgetProxy::filterEvent( QObject *o, QEvent *e, EventHandlerData &eh, QList<QVariant> & args )
+bool QWidgetProxy::preProcessEvent( QObject *o, QEvent *e, EventHandlerData &eh, QList<QVariant> & args )
 {
   // NOTE We assume that qObject need not be checked here, as we wouldn't get events if
   // it wasn't existing
@@ -472,6 +490,16 @@ bool QWidgetProxy::interpretDragEvent( QObject *o, QEvent *e, QList<QVariant> &a
   return true;
 }
 
+bool QWidgetProxy::postProcessEvent( QObject *object, QEvent *event, bool handled )
+{
+    if (_performDrag) {
+        _performDrag = false;
+        performDrag();
+        return true;
+    }
+
+    return handled;
+}
 
 void QWidgetProxy::customPaint( QPainter *painter )
 {
diff --git a/QtCollider/QWidgetProxy.h b/QtCollider/QWidgetProxy.h
index 02e0fb2..f9304c2 100644
--- a/QtCollider/QWidgetProxy.h
+++ b/QtCollider/QWidgetProxy.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -72,13 +72,17 @@ public:
 
   virtual bool setParent( QObjectProxy *parent );
 
+  void setDragData( QMimeData * data, const QString & label );
+
   inline QWidget *widget() { return static_cast<QWidget*>( object() ); }
 
 protected:
 
   virtual void customEvent( QEvent * );
 
-  virtual bool filterEvent( QObject *, QEvent *, EventHandlerData &, QList<QVariant> & args );
+  virtual bool preProcessEvent( QObject *, QEvent *, EventHandlerData &, QList<QVariant> & args );
+
+  virtual bool postProcessEvent( QObject *, QEvent *, bool handled );
 
 private Q_SLOTS:
 
@@ -93,13 +97,17 @@ private:
   void bringFrontEvent();
   void setFocusEvent( QtCollider::SetFocusEvent * );
   void setAlwaysOnTopEvent( QtCollider::SetAlwaysOnTopEvent * );
-  void startDragEvent( QtCollider::StartDragEvent * );
+  void performDrag();
 
   static void sendRefreshEventRecursive( QWidget *w );
 
   QWidget *_keyEventWidget;
   QWidget *_mouseEventWidget;
   static QAtomicInt _globalEventMask;
+
+  static QMimeData *sDragData;
+  static QString sDragLabel;
+  bool _performDrag;
 };
 
 namespace QtCollider {
@@ -122,17 +130,6 @@ struct SetAlwaysOnTopEvent  : public QEvent
   bool alwaysOnTop;
 };
 
-struct StartDragEvent : public QEvent
-{
-  StartDragEvent( const QString &label_, QMimeData *data_ )
-  : QEvent( (QEvent::Type) QtCollider::Event_Proxy_StartDrag ),
-    label( label_ ), data( data_ )
-  {}
-  ~StartDragEvent() { delete data; }
-  QString label;
-  QMimeData *data;
-};
-
 }
 
 #endif //QC_WIDGET_PROXY_H
diff --git a/QtCollider/QcApplication.cpp b/QtCollider/QcApplication.cpp
index 518914d..e6c8022 100644
--- a/QtCollider/QcApplication.cpp
+++ b/QtCollider/QcApplication.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/QcApplication.h b/QtCollider/QcApplication.h
index 5736f28..efaff49 100644
--- a/QtCollider/QcApplication.h
+++ b/QtCollider/QcApplication.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/QcObjectFactory.cpp b/QtCollider/QcObjectFactory.cpp
index adeb884..6b49d93 100644
--- a/QtCollider/QcObjectFactory.cpp
+++ b/QtCollider/QcObjectFactory.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/QcObjectFactory.h b/QtCollider/QcObjectFactory.h
index 1244eea..c2d723a 100644
--- a/QtCollider/QcObjectFactory.h
+++ b/QtCollider/QcObjectFactory.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/QcSignalSpy.h b/QtCollider/QcSignalSpy.h
index 7c68a28..e441658 100644
--- a/QtCollider/QcSignalSpy.h
+++ b/QtCollider/QcSignalSpy.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/QcWidgetFactory.h b/QtCollider/QcWidgetFactory.h
index c963ad1..f957966 100644
--- a/QtCollider/QcWidgetFactory.h
+++ b/QtCollider/QcWidgetFactory.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/Slot.cpp b/QtCollider/Slot.cpp
index a7880b5..412ed5b 100644
--- a/QtCollider/Slot.cpp
+++ b/QtCollider/Slot.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/Slot.h b/QtCollider/Slot.h
index 6b3aa03..e9cfa24 100644
--- a/QtCollider/Slot.h
+++ b/QtCollider/Slot.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/debug.cpp b/QtCollider/debug.cpp
index 6e81600..9f758a1 100644
--- a/QtCollider/debug.cpp
+++ b/QtCollider/debug.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/debug.h b/QtCollider/debug.h
index 2428c98..61ebcb8 100644
--- a/QtCollider/debug.h
+++ b/QtCollider/debug.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/factories.cpp b/QtCollider/factories.cpp
index ffc91d3..0840e3f 100644
--- a/QtCollider/factories.cpp
+++ b/QtCollider/factories.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/hacks/hacks_mac.M b/QtCollider/hacks/hacks_mac.M
index 476b000..8ccbe00 100644
--- a/QtCollider/hacks/hacks_mac.M
+++ b/QtCollider/hacks/hacks_mac.M
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/hacks/hacks_mac.hpp b/QtCollider/hacks/hacks_mac.hpp
index affa40c..068ad3d 100644
--- a/QtCollider/hacks/hacks_mac.hpp
+++ b/QtCollider/hacks/hacks_mac.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/hacks/hacks_x11.cpp b/QtCollider/hacks/hacks_x11.cpp
index 9c3989a..a8f7063 100644
--- a/QtCollider/hacks/hacks_x11.cpp
+++ b/QtCollider/hacks/hacks_x11.cpp
@@ -12,7 +12,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/hacks/hacks_x11.hpp b/QtCollider/hacks/hacks_x11.hpp
index 663675e..12096d6 100644
--- a/QtCollider/hacks/hacks_x11.hpp
+++ b/QtCollider/hacks/hacks_x11.hpp
@@ -7,7 +7,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/interface.cpp b/QtCollider/interface.cpp
index 3d8598c..e1a55fc 100644
--- a/QtCollider/interface.cpp
+++ b/QtCollider/interface.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/layouts/classic_layouts.hpp b/QtCollider/layouts/classic_layouts.hpp
index 3ec642d..b3e2570 100644
--- a/QtCollider/layouts/classic_layouts.hpp
+++ b/QtCollider/layouts/classic_layouts.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/layouts/layouts.cpp b/QtCollider/layouts/layouts.cpp
index e98f29c..2b29b35 100644
--- a/QtCollider/layouts/layouts.cpp
+++ b/QtCollider/layouts/layouts.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/layouts/layouts.hpp b/QtCollider/layouts/layouts.hpp
index 395296a..6f8015e 100644
--- a/QtCollider/layouts/layouts.hpp
+++ b/QtCollider/layouts/layouts.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/layouts/stack_layout.cpp b/QtCollider/layouts/stack_layout.cpp
index 9aee8af..fce1d45 100644
--- a/QtCollider/layouts/stack_layout.cpp
+++ b/QtCollider/layouts/stack_layout.cpp
@@ -10,7 +10,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/layouts/stack_layout.hpp b/QtCollider/layouts/stack_layout.hpp
index fa24e7f..afbcefd 100644
--- a/QtCollider/layouts/stack_layout.hpp
+++ b/QtCollider/layouts/stack_layout.hpp
@@ -10,7 +10,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/painting.h b/QtCollider/painting.h
index 54ccc14..9b582ea 100644
--- a/QtCollider/painting.h
+++ b/QtCollider/painting.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/primitives/prim_QObject.cpp b/QtCollider/primitives/prim_QObject.cpp
index 75e1b5f..3f3a78d 100644
--- a/QtCollider/primitives/prim_QObject.cpp
+++ b/QtCollider/primitives/prim_QObject.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/primitives/prim_QPalette.cpp b/QtCollider/primitives/prim_QPalette.cpp
index b44e4b5..ab66a42 100644
--- a/QtCollider/primitives/prim_QPalette.cpp
+++ b/QtCollider/primitives/prim_QPalette.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/primitives/prim_QPalette.hpp b/QtCollider/primitives/prim_QPalette.hpp
index 0e7a1ed..fb052a0 100644
--- a/QtCollider/primitives/prim_QPalette.hpp
+++ b/QtCollider/primitives/prim_QPalette.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/primitives/prim_QPen.cpp b/QtCollider/primitives/prim_QPen.cpp
index 6b5de5a..2a4f879 100644
--- a/QtCollider/primitives/prim_QPen.cpp
+++ b/QtCollider/primitives/prim_QPen.cpp
@@ -8,7 +8,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/primitives/prim_QWidget.cpp b/QtCollider/primitives/prim_QWidget.cpp
index ce38e72..ee8a79c 100644
--- a/QtCollider/primitives/prim_QWidget.cpp
+++ b/QtCollider/primitives/prim_QWidget.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -128,11 +128,14 @@ struct MimeData : public QMimeData {
 };
 
 QC_LANG_PRIMITIVE( QWidget_StartDrag, 3, PyrSlot *r, PyrSlot *a, VMGlobals *g ) {
+    qcDebugMsg(1, "Starting drag...");
+
   QWidgetProxy *wProxy = qobject_cast<QWidgetProxy*>( Slot::toObjectProxy(r) );
   if( !wProxy->compareThread() ) return QtCollider::wrongThreadError();
 
   PyrSlot *data = a+1;
   QString str = Slot::toString(a+2);
+  QString label = Slot::toString(a);
 
   QMimeData *mime = new QtCollider::MimeData;
 
@@ -145,7 +148,7 @@ QC_LANG_PRIMITIVE( QWidget_StartDrag, 3, PyrSlot *r, PyrSlot *a, VMGlobals *g )
   if( !str.isEmpty() )
     mime->setText( str );
 
-  QApplication::postEvent( wProxy, new StartDragEvent( Slot::toString(a), mime ) );
+  wProxy->setDragData( mime, label );
 
   return errNone;
 }
diff --git a/QtCollider/primitives/prim_misc.cpp b/QtCollider/primitives/prim_misc.cpp
index 17d24e1..102a0f0 100644
--- a/QtCollider/primitives/prim_misc.cpp
+++ b/QtCollider/primitives/prim_misc.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -40,6 +40,7 @@
 #include <QDesktopWidget>
 #include <QStyleFactory>
 #include <QWebSettings>
+#include <QCursor>
 
 namespace QtCollider {
 
@@ -266,6 +267,14 @@ QC_LANG_PRIMITIVE( Qt_IsMethodOverridden, 2, PyrSlot *r, PyrSlot *a, VMGlobals *
   return errNone;
 }
 
+QC_LANG_PRIMITIVE( Qt_CursorPosition, 0, PyrSlot *r, PyrSlot *a, VMGlobals *g )
+{
+    if( !QcApplication::compareThread() ) return QtCollider::wrongThreadError();
+
+    Slot::setPoint(r, QCursor::pos());
+    return errNone;
+}
+
 void defineMiscPrimitives()
 {
   LangPrimitiveDefiner definer;
@@ -284,6 +293,7 @@ void defineMiscPrimitives()
   definer.define<Qt_AvailableStyles>();
   definer.define<Qt_IsMethodOverridden>();
   definer.define<QWebView_ClearMemoryCaches>();
+  definer.define<Qt_CursorPosition>();
 }
 
 } // namespace QtCollider
diff --git a/QtCollider/primitives/primitives.cpp b/QtCollider/primitives/primitives.cpp
index efb837e..e2dfa0e 100644
--- a/QtCollider/primitives/primitives.cpp
+++ b/QtCollider/primitives/primitives.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/primitives/primitives.h b/QtCollider/primitives/primitives.h
index 9f8463f..0257445 100644
--- a/QtCollider/primitives/primitives.h
+++ b/QtCollider/primitives/primitives.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/safeptr.hpp b/QtCollider/safeptr.hpp
index 0f609ae..2994847 100644
--- a/QtCollider/safeptr.hpp
+++ b/QtCollider/safeptr.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/BasicWidgets.cpp b/QtCollider/widgets/BasicWidgets.cpp
index 33a8738..d102c2b 100644
--- a/QtCollider/widgets/BasicWidgets.cpp
+++ b/QtCollider/widgets/BasicWidgets.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/BasicWidgets.h b/QtCollider/widgets/BasicWidgets.h
index 75c6918..2734303 100644
--- a/QtCollider/widgets/BasicWidgets.h
+++ b/QtCollider/widgets/BasicWidgets.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcAbstractStepValue.cpp b/QtCollider/widgets/QcAbstractStepValue.cpp
index a622e51..2dfe3e3 100644
--- a/QtCollider/widgets/QcAbstractStepValue.cpp
+++ b/QtCollider/widgets/QcAbstractStepValue.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcAbstractStepValue.h b/QtCollider/widgets/QcAbstractStepValue.h
index 2c7050b..b045394 100644
--- a/QtCollider/widgets/QcAbstractStepValue.h
+++ b/QtCollider/widgets/QcAbstractStepValue.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcButton.cpp b/QtCollider/widgets/QcButton.cpp
index fe1f6e8..c1dbac9 100644
--- a/QtCollider/widgets/QcButton.cpp
+++ b/QtCollider/widgets/QcButton.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcButton.h b/QtCollider/widgets/QcButton.h
index 9a737a6..a1af275 100644
--- a/QtCollider/widgets/QcButton.h
+++ b/QtCollider/widgets/QcButton.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcCanvas.cpp b/QtCollider/widgets/QcCanvas.cpp
index 611309a..d068f73 100644
--- a/QtCollider/widgets/QcCanvas.cpp
+++ b/QtCollider/widgets/QcCanvas.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcCanvas.h b/QtCollider/widgets/QcCanvas.h
index 837ff5a..768f0cf 100644
--- a/QtCollider/widgets/QcCanvas.h
+++ b/QtCollider/widgets/QcCanvas.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcCheckBox.h b/QtCollider/widgets/QcCheckBox.h
index 1fbd1ed..519afd3 100644
--- a/QtCollider/widgets/QcCheckBox.h
+++ b/QtCollider/widgets/QcCheckBox.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcFileDialog.cpp b/QtCollider/widgets/QcFileDialog.cpp
index c10d5a1..8f644b7 100644
--- a/QtCollider/widgets/QcFileDialog.cpp
+++ b/QtCollider/widgets/QcFileDialog.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcFileDialog.h b/QtCollider/widgets/QcFileDialog.h
index 8c4852e..de66b1f 100644
--- a/QtCollider/widgets/QcFileDialog.h
+++ b/QtCollider/widgets/QcFileDialog.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcGraph.cpp b/QtCollider/widgets/QcGraph.cpp
index 5530faf..fc0b063 100644
--- a/QtCollider/widgets/QcGraph.cpp
+++ b/QtCollider/widgets/QcGraph.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -108,6 +108,17 @@ int QcGraph::index() const
   return e ? _model.elements().indexOf(e) : -1;
 }
 
+VariantList QcGraph::selectionIndexes() const
+{
+    VariantList result;
+    int c = _model.elementCount();
+    for( int i = 0; i < c; ++i ) {
+      QcGraphElement *e = _model.elementAt(i);
+      if(e->selected) result.data.append(i);
+    }
+    return result;
+}
+
 float QcGraph::currentX() const
 {
   QcGraphElement *e = currentElement();
diff --git a/QtCollider/widgets/QcGraph.h b/QtCollider/widgets/QcGraph.h
index bd22837..068d0e4 100644
--- a/QtCollider/widgets/QcGraph.h
+++ b/QtCollider/widgets/QcGraph.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -130,6 +130,7 @@ class QcGraph : public QWidget, QcHelper, QtCollider::Style::Client
   Q_PROPERTY( VariantList strings READ dummyVariantList WRITE setStrings );
   Q_PROPERTY( int index READ index WRITE setIndex );
   Q_PROPERTY( int lastIndex READ lastIndex );
+  Q_PROPERTY( VariantList selectionIndexes READ selectionIndexes);
   Q_PROPERTY( int thumbSize READ dummyInt WRITE setThumbSize );
   Q_PROPERTY( int thumbWidth READ dummyInt WRITE setThumbWidth );
   Q_PROPERTY( int thumbHeight READ dummyInt WRITE setThumbHeight );
@@ -195,6 +196,7 @@ class QcGraph : public QWidget, QcHelper, QtCollider::Style::Client
     QcGraphElement *currentElement() const;
     int index() const;
     int lastIndex() const { return _lastIndex; }
+    VariantList selectionIndexes() const;
     float currentX() const;
     float currentY() const;
     QPointF grid() const { return _gridMetrics; }
diff --git a/QtCollider/widgets/QcKnob.cpp b/QtCollider/widgets/QcKnob.cpp
index 4a77b63..d768543 100644
--- a/QtCollider/widgets/QcKnob.cpp
+++ b/QtCollider/widgets/QcKnob.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcKnob.hpp b/QtCollider/widgets/QcKnob.hpp
index 7e82557..a849ed4 100644
--- a/QtCollider/widgets/QcKnob.hpp
+++ b/QtCollider/widgets/QcKnob.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcLevelIndicator.cpp b/QtCollider/widgets/QcLevelIndicator.cpp
index 50820af..9261911 100644
--- a/QtCollider/widgets/QcLevelIndicator.cpp
+++ b/QtCollider/widgets/QcLevelIndicator.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcLevelIndicator.h b/QtCollider/widgets/QcLevelIndicator.h
index a99116a..872639f 100644
--- a/QtCollider/widgets/QcLevelIndicator.h
+++ b/QtCollider/widgets/QcLevelIndicator.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcListWidget.cpp b/QtCollider/widgets/QcListWidget.cpp
index 172739e..f598e94 100644
--- a/QtCollider/widgets/QcListWidget.cpp
+++ b/QtCollider/widgets/QcListWidget.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -23,6 +23,7 @@
 #include "../QcWidgetFactory.h"
 
 #include <QKeyEvent>
+#include <QModelIndex>
 
 class QcListWidgetFactory : public QcWidgetFactory<QcListWidget>
 {
@@ -68,6 +69,15 @@ void QcListWidget::setCurrentRowWithoutAction( int row )
   _emitAction = b;
 }
 
+VariantList QcListWidget::selection() const
+{
+    QModelIndexList modelIndexes = QListView::selectedIndexes();
+    VariantList indexes;
+    Q_FOREACH( const QModelIndex & index, modelIndexes )
+        indexes.data << index.row();
+    return indexes;
+}
+
 void QcListWidget::onCurrentItemChanged()
 {
   if( _emitAction ) Q_EMIT( action() );
diff --git a/QtCollider/widgets/QcListWidget.h b/QtCollider/widgets/QcListWidget.h
index fd8b143..d386cba 100644
--- a/QtCollider/widgets/QcListWidget.h
+++ b/QtCollider/widgets/QcListWidget.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -20,6 +20,7 @@
 ************************************************************************/
 
 #include "../QcHelper.h"
+#include "../Common.h"
 #include <QListWidget>
 
 class QcListWidget : public QListWidget, QcHelper
@@ -28,12 +29,15 @@ class QcListWidget : public QListWidget, QcHelper
   Q_PROPERTY( VariantList items READ dummyVariantList WRITE setItems );
   Q_PROPERTY( VariantList colors READ dummyVariantList WRITE setColors );
   Q_PROPERTY( int currentRow READ currentRow WRITE setCurrentRowWithoutAction )
+    Q_PROPERTY( VariantList selection READ selection );
 
   public:
     QcListWidget();
     void setItems( const VariantList & );
     void setColors( const VariantList & ) const;
     void setCurrentRowWithoutAction( int );
+    VariantList selection() const;
+
   Q_SIGNALS:
     void action();
     void returnPressed();
diff --git a/QtCollider/widgets/QcMultiSlider.cpp b/QtCollider/widgets/QcMultiSlider.cpp
index 0fad15a..f06dbe2 100644
--- a/QtCollider/widgets/QcMultiSlider.cpp
+++ b/QtCollider/widgets/QcMultiSlider.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcMultiSlider.h b/QtCollider/widgets/QcMultiSlider.h
index a8a8555..de8bc7d 100644
--- a/QtCollider/widgets/QcMultiSlider.h
+++ b/QtCollider/widgets/QcMultiSlider.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcNumberBox.cpp b/QtCollider/widgets/QcNumberBox.cpp
index 6b250fb..c973326 100644
--- a/QtCollider/widgets/QcNumberBox.cpp
+++ b/QtCollider/widgets/QcNumberBox.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcNumberBox.h b/QtCollider/widgets/QcNumberBox.h
index 9fd0268..ba500db 100644
--- a/QtCollider/widgets/QcNumberBox.h
+++ b/QtCollider/widgets/QcNumberBox.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcPenPrinter.cpp b/QtCollider/widgets/QcPenPrinter.cpp
index f6f36a3..0486502 100644
--- a/QtCollider/widgets/QcPenPrinter.cpp
+++ b/QtCollider/widgets/QcPenPrinter.cpp
@@ -7,7 +7,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcPenPrinter.h b/QtCollider/widgets/QcPenPrinter.h
index 905c790..e3276a3 100644
--- a/QtCollider/widgets/QcPenPrinter.h
+++ b/QtCollider/widgets/QcPenPrinter.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcPopUpMenu.cpp b/QtCollider/widgets/QcPopUpMenu.cpp
index 634b8f4..bff1960 100644
--- a/QtCollider/widgets/QcPopUpMenu.cpp
+++ b/QtCollider/widgets/QcPopUpMenu.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcPopUpMenu.h b/QtCollider/widgets/QcPopUpMenu.h
index 1a88561..5b8f497 100644
--- a/QtCollider/widgets/QcPopUpMenu.h
+++ b/QtCollider/widgets/QcPopUpMenu.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcRangeSlider.cpp b/QtCollider/widgets/QcRangeSlider.cpp
index a51c7aa..dadded5 100644
--- a/QtCollider/widgets/QcRangeSlider.cpp
+++ b/QtCollider/widgets/QcRangeSlider.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcRangeSlider.h b/QtCollider/widgets/QcRangeSlider.h
index 3d1a42d..91516b9 100644
--- a/QtCollider/widgets/QcRangeSlider.h
+++ b/QtCollider/widgets/QcRangeSlider.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcScope.cpp b/QtCollider/widgets/QcScope.cpp
index 716a91f..e2934d8 100644
--- a/QtCollider/widgets/QcScope.cpp
+++ b/QtCollider/widgets/QcScope.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcScope.h b/QtCollider/widgets/QcScope.h
index e5e3c7e..2445a23 100644
--- a/QtCollider/widgets/QcScope.h
+++ b/QtCollider/widgets/QcScope.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcScopeShm.cpp b/QtCollider/widgets/QcScopeShm.cpp
index 6e894d2..9cd87c7 100644
--- a/QtCollider/widgets/QcScopeShm.cpp
+++ b/QtCollider/widgets/QcScopeShm.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcScopeShm.h b/QtCollider/widgets/QcScopeShm.h
index de258e5..8ce70bd 100644
--- a/QtCollider/widgets/QcScopeShm.h
+++ b/QtCollider/widgets/QcScopeShm.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcScrollArea.cpp b/QtCollider/widgets/QcScrollArea.cpp
index cc4834f..9353177 100644
--- a/QtCollider/widgets/QcScrollArea.cpp
+++ b/QtCollider/widgets/QcScrollArea.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcScrollArea.h b/QtCollider/widgets/QcScrollArea.h
index a99e776..f753f8c 100644
--- a/QtCollider/widgets/QcScrollArea.h
+++ b/QtCollider/widgets/QcScrollArea.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcSlider.cpp b/QtCollider/widgets/QcSlider.cpp
index 15784eb..35f6123 100644
--- a/QtCollider/widgets/QcSlider.cpp
+++ b/QtCollider/widgets/QcSlider.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcSlider.h b/QtCollider/widgets/QcSlider.h
index c2da777..cafa211 100644
--- a/QtCollider/widgets/QcSlider.h
+++ b/QtCollider/widgets/QcSlider.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcSlider2D.cpp b/QtCollider/widgets/QcSlider2D.cpp
index 26ebe5f..6aba42b 100644
--- a/QtCollider/widgets/QcSlider2D.cpp
+++ b/QtCollider/widgets/QcSlider2D.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcSlider2D.h b/QtCollider/widgets/QcSlider2D.h
index 0242a19..83ac018 100644
--- a/QtCollider/widgets/QcSlider2D.h
+++ b/QtCollider/widgets/QcSlider2D.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcTextEdit.cpp b/QtCollider/widgets/QcTextEdit.cpp
index f9ecc78..0eab07f 100644
--- a/QtCollider/widgets/QcTextEdit.cpp
+++ b/QtCollider/widgets/QcTextEdit.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcTextEdit.h b/QtCollider/widgets/QcTextEdit.h
index 4d34c70..cf92f96 100644
--- a/QtCollider/widgets/QcTextEdit.h
+++ b/QtCollider/widgets/QcTextEdit.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcTextField.h b/QtCollider/widgets/QcTextField.h
index 99d7a11..b0f8560 100644
--- a/QtCollider/widgets/QcTextField.h
+++ b/QtCollider/widgets/QcTextField.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcTreeWidget.cpp b/QtCollider/widgets/QcTreeWidget.cpp
index 9cf8f09..66c9b0e 100644
--- a/QtCollider/widgets/QcTreeWidget.cpp
+++ b/QtCollider/widgets/QcTreeWidget.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcTreeWidget.h b/QtCollider/widgets/QcTreeWidget.h
index 26bfc31..f878adc 100644
--- a/QtCollider/widgets/QcTreeWidget.h
+++ b/QtCollider/widgets/QcTreeWidget.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcWebView.cpp b/QtCollider/widgets/QcWebView.cpp
index 6123680..0afc3d0 100644
--- a/QtCollider/widgets/QcWebView.cpp
+++ b/QtCollider/widgets/QcWebView.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcWebView.h b/QtCollider/widgets/QcWebView.h
index 0f5905c..51b3f13 100644
--- a/QtCollider/widgets/QcWebView.h
+++ b/QtCollider/widgets/QcWebView.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcWindow.cpp b/QtCollider/widgets/QcWindow.cpp
index a158f79..86b004e 100644
--- a/QtCollider/widgets/QcWindow.cpp
+++ b/QtCollider/widgets/QcWindow.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/QcWindow.h b/QtCollider/widgets/QcWindow.h
index 8273c3c..e64e418 100644
--- a/QtCollider/widgets/QcWindow.h
+++ b/QtCollider/widgets/QcWindow.h
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/scope_shm_interface.hpp b/QtCollider/widgets/scope_shm_interface.hpp
index ee52369..9c1a717 100644
--- a/QtCollider/widgets/scope_shm_interface.hpp
+++ b/QtCollider/widgets/scope_shm_interface.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/soundfileview/cachestream.cpp b/QtCollider/widgets/soundfileview/cachestream.cpp
index fe5af08..92dc4a4 100644
--- a/QtCollider/widgets/soundfileview/cachestream.cpp
+++ b/QtCollider/widgets/soundfileview/cachestream.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/soundfileview/filestream.cpp b/QtCollider/widgets/soundfileview/filestream.cpp
index 93e2e87..bab264a 100644
--- a/QtCollider/widgets/soundfileview/filestream.cpp
+++ b/QtCollider/widgets/soundfileview/filestream.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
@@ -20,6 +20,7 @@
 ************************************************************************/
 
 #include "view.hpp"
+#include <limits>
 
 SoundFileStream::SoundFileStream() : _data(0), _dataSize(0), _dataOffset(0)
 {}
@@ -44,7 +45,21 @@ void SoundFileStream::load( SNDFILE *sf, const SF_INFO &info, sf_count_t beg, sf
 
   _data = new short [_dataSize * info.channels];
   sf_seek( sf, _dataOffset, SEEK_SET);
-  _dataSize = sf_readf_short( sf, _data, _dataSize );
+
+  if (info.format & SF_FORMAT_FLOAT || info.format & SF_FORMAT_DOUBLE)
+  {
+    // libsndfile reading float into short is broken for non-power-of-two channel counts
+    int sampleCount = _dataSize * info.channels;
+    float *tmp = new float [sampleCount];
+    _dataSize = sf_readf_float( sf, tmp, _dataSize );
+    for (int i = 0; i < sampleCount; ++i)
+        _data[i] = std::max( -1.f, std::min( 1.f, tmp[i] ) ) * std::numeric_limits<short>::max();
+    delete[] tmp;
+  }
+  else
+  {
+    _dataSize = sf_readf_short( sf, _data, _dataSize );
+  }
 
   _ch = info.channels;
   _beg = _dataOffset;
diff --git a/QtCollider/widgets/soundfileview/view.cpp b/QtCollider/widgets/soundfileview/view.cpp
index cfc48ce..e217c32 100644
--- a/QtCollider/widgets/soundfileview/view.cpp
+++ b/QtCollider/widgets/soundfileview/view.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/soundfileview/view.hpp b/QtCollider/widgets/soundfileview/view.hpp
index 0294816..2be1e82 100644
--- a/QtCollider/widgets/soundfileview/view.hpp
+++ b/QtCollider/widgets/soundfileview/view.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/web_page.cpp b/QtCollider/widgets/web_page.cpp
index 53aaa71..20f10c1 100644
--- a/QtCollider/widgets/web_page.cpp
+++ b/QtCollider/widgets/web_page.cpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/QtCollider/widgets/web_page.hpp b/QtCollider/widgets/web_page.hpp
index 06f89a5..52418df 100644
--- a/QtCollider/widgets/web_page.hpp
+++ b/QtCollider/widgets/web_page.hpp
@@ -6,7 +6,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/SCClassLibrary/Common/Collections/Array.sc b/SCClassLibrary/Common/Collections/Array.sc
index 5e5ad3b..00221f6 100644
--- a/SCClassLibrary/Common/Collections/Array.sc
+++ b/SCClassLibrary/Common/Collections/Array.sc
@@ -135,7 +135,7 @@ Array[slot] : ArrayedCollection {
 	//************** inconsistent argnames, see SequenceableColllection unlace!
 	unlace { arg clumpSize=2, numChan=1, clip=false;
 		^if(clip) {
-			super.unlace(clumpSize, numChan)
+			super.unlace(clumpSize, numChan, true)
 		} {
 			this.prUnlace(clumpSize, numChan) // clip not yet implemented in primitive
 		}
diff --git a/SCClassLibrary/Common/Collections/String.sc b/SCClassLibrary/Common/Collections/String.sc
index 8028141..f67a1f0 100644
--- a/SCClassLibrary/Common/Collections/String.sc
+++ b/SCClassLibrary/Common/Collections/String.sc
@@ -482,6 +482,7 @@ String[char] : RawArray {
 	}
 
 	speak { arg channel = 0, force = false;
+		// FIXME: this should better be handled by Platform than GUI
 		var speech = GUI.current.speech;
 		if( speech.initialized.not, { speech.init });
 		speech.channels[ channel ].speak( this, force );
diff --git a/SCClassLibrary/Common/Control/Buffer.sc b/SCClassLibrary/Common/Control/Buffer.sc
index d3bbeb5..ffb664b 100644
--- a/SCClassLibrary/Common/Control/Buffer.sc
+++ b/SCClassLibrary/Common/Control/Buffer.sc
@@ -355,9 +355,12 @@ Buffer {
 		server.listSendMsg( this.freeMsg(completionMessage) );
 	}
 	freeMsg { arg completionMessage;
+		var msg;
 		this.uncache;
 		server.bufferAllocator.free(bufnum);
-		^["/b_free", bufnum, completionMessage.value(this)];
+		msg = ["/b_free", bufnum, completionMessage.value(this)];
+		bufnum = numFrames = numChannels = sampleRate = path = nil;
+		^msg
 	}
 	*freeAll { arg server;
 		var b;
diff --git a/SCClassLibrary/Common/Control/Engine.sc b/SCClassLibrary/Common/Control/Engine.sc
index 1a327b8..d8dcd6f 100644
--- a/SCClassLibrary/Common/Control/Engine.sc
+++ b/SCClassLibrary/Common/Control/Engine.sc
@@ -243,6 +243,8 @@ ContiguousBlockAllocator {
 	free { |address|
 		var	block,
 			prev, next, temp;
+		// this 'if' prevents an error if a Buffer object is freed twice
+		if(address.isNil) { ^this };
 		((block = array[address]).notNil and: { block.used }).if({
 			block.used = false;
 			this.addToFreed(block);
diff --git a/SCClassLibrary/Common/Core/Kernel.sc b/SCClassLibrary/Common/Core/Kernel.sc
index 61a6d48..f11dbd3 100644
--- a/SCClassLibrary/Common/Core/Kernel.sc
+++ b/SCClassLibrary/Common/Core/Kernel.sc
@@ -185,11 +185,6 @@ Process {
 	var schedulerQueue;
 	var <>nowExecutingPath;
 
-	// SCVersion.sc overrides these for Main
-	*scVersionMajor { ^123 }
-	*scVersionMinor { ^0 }
-	*scVersionPostfix { ^"unknown" }
-
 	startup {
 		var time;
 
diff --git a/SCClassLibrary/Common/GUI/PlusGUI/Control/FreqScope.sc b/SCClassLibrary/Common/GUI/PlusGUI/Control/FreqScope.sc
index 12e44a6..7077675 100644
--- a/SCClassLibrary/Common/GUI/PlusGUI/Control/FreqScope.sc
+++ b/SCClassLibrary/Common/GUI/PlusGUI/Control/FreqScope.sc
@@ -1,7 +1,3 @@
-// PlusFreqScope and PlusFreqScopeWindow
-// by Lance Putnam
-// cross-platform port by Tim Blechmann
-
 PlusFreqScope {
 	classvar <server;
 
@@ -194,6 +190,7 @@ PlusFreqScope {
 		rate = 4;
 		freqMode = 0;
 		bufSize = 2048;
+		ServerQuit.add(this, server);
         ^this;
 	}
 
@@ -205,8 +202,6 @@ PlusFreqScope {
 		} {
 			Buffer.alloc(server, bufSize/4, 1, { |sbuf|
 				scope.bufnum = sbuf.bufnum;
-				("FreqScope: Buffer allocated ("
-					++ sbuf.bufnum.asString ++ ")").postln;
 				scopebuf = sbuf;
 				this.start;
 			});
@@ -214,10 +209,9 @@ PlusFreqScope {
 	}
 
 	freeBuffers {
-		if( scopebuf.notNil, {
-			("FreqScope: Buffer freed (" ++ scopebuf.bufnum.asString ++ ")").postln;
+		if (scopebuf.notNil) {
 			scopebuf.free; scopebuf = nil;
-		});
+		};
 	}
 
 	start {
@@ -231,33 +225,43 @@ PlusFreqScope {
 	kill {
 		this.active_(false);
 		this.freeBuffers;
+		ServerQuit.remove(this, server);
 	}
 
-	active_ { arg bool;
-		if(server.serverRunning, { // don't do anything unless server is running
-
-			if(bool, {
-				if(active.not, {
-					CmdPeriod.add(this);
-					if(scopebuf.isNil) { // first activation
-						this.allocBuffersAndStart;
-					} {
-						this.start;
-					};
-				});
-			}, {
-				if(active, {
-					if (scope.class.name === \QScope2) { scope.stop };
-					synth.free;
-					CmdPeriod.remove(this);
-				});
-			});
-			active=bool;
-
-		});
+	active_ { arg activate;
+		if (activate) {
+			ServerTree.add(this, server);
+			if (server.serverRunning) {
+				active=activate;
+				this.doOnServerTree;
+				^this
+			}
+		} {
+			ServerTree.remove(this, server);
+			if (server.serverRunning and: active) {
+				if (scope.class.name === \QScope2) { scope.stop };
+				synth.free;
+			};
+		};
+		active=activate;
 		^this
 	}
 
+	doOnServerTree {
+		if (active) {
+			if (scopebuf.isNil) {
+				this.allocBuffersAndStart;
+			} {
+				this.start;
+			}
+		}
+	}
+
+	doOnServerQuit {
+		scope.stop;
+		scopebuf = synth = nil;
+	}
+
 	inBus_ { arg num;
 		inBus = num;
 		if(active, {
@@ -282,19 +286,6 @@ PlusFreqScope {
 		});
 	}
 
-	cmdPeriod {
-		this.changed(\cmdPeriod);
-		if(active == true, {
-			CmdPeriod.remove(this);
-			active = false;
-			// needs to be deferred to build up synth again properly
-			{
-				server.sync;
-				this.active_(true);
-			}.fork(AppClock)
-		});
-	}
-
 	specialSynthArgs_ {|args|
 		specialSynthArgs = args;
 		if(args.notNil and:{active}){
@@ -483,7 +474,8 @@ PlusFreqScopeWindow {
 				.canFocus_(false)
 			;
 
-			window.onClose_({ scope.kill;
+			window.onClose_({
+				scope.kill;
 				scopeOpen = false;
 			}).front;
 			^super.newCopyArgs(scope, window)
diff --git a/SCClassLibrary/Common/GUI/PlusGUI/Math/PlotView.sc b/SCClassLibrary/Common/GUI/PlusGUI/Math/PlotView.sc
index 90875be..32db3c1 100644
--- a/SCClassLibrary/Common/GUI/PlusGUI/Math/PlotView.sc
+++ b/SCClassLibrary/Common/GUI/PlusGUI/Math/PlotView.sc
@@ -836,7 +836,7 @@ Plotter {
 				{
 					plotter.domainSpecs = ControlSpec(0, duration, units: "s");
 					plotter.setValue(
-						array.unlace(buf.numChannels).collect(_.drop(-1)),
+						array.unlace(numChan).collect(_.drop(-1)),
 						findSpecs: true,
 						refresh: false
 					);
diff --git a/SCClassLibrary/DefaultLibrary/Main.sc b/SCClassLibrary/DefaultLibrary/Main.sc
index 0c13edd..ca5be04 100644
--- a/SCClassLibrary/DefaultLibrary/Main.sc
+++ b/SCClassLibrary/DefaultLibrary/Main.sc
@@ -143,6 +143,10 @@ Main : Process {
 
 	*version {^[this.scVersionMajor, ".", this.scVersionMinor, this.scVersionPostfix].join}
 
+	*scVersionMajor   { _SC_VersionMajor }
+	*scVersionMinor   { _SC_VersionMinor }
+	*scVersionPostfix { _SC_VersionPatch }
+
 	*versionAtLeast { |maj, min|
 		^if((maj==this.scVersionMajor) and:{min.notNil}){
 			this.scVersionMinor >= min
diff --git a/SCClassLibrary/Platform/Platform.sc b/SCClassLibrary/Platform/Platform.sc
index 0f958dd..fd5b4ed 100644
--- a/SCClassLibrary/Platform/Platform.sc
+++ b/SCClassLibrary/Platform/Platform.sc
@@ -71,8 +71,8 @@ Platform
 	clearMetadata { |path| ^this.subclassResponsibility }
 	*clearMetadata { |path| ^thisProcess.platform.clearMetadata(path) }
 
-	getMouseCoords { ^this.subclassResponsibility }
-	*getMouseCoords { ^thisProcess.platform.getMouseCoords }
+	getMouseCoords { ^Platform.getMouseCoords }
+	*getMouseCoords { ^GUI.cursorPosition }
 
 	// startup/shutdown hooks
 	startup { }
diff --git a/SCClassLibrary/QtCollider/QEnvelopeView.sc b/SCClassLibrary/QtCollider/QEnvelopeView.sc
index a28f060..518b35f 100644
--- a/SCClassLibrary/QtCollider/QEnvelopeView.sc
+++ b/SCClassLibrary/QtCollider/QEnvelopeView.sc
@@ -60,6 +60,8 @@ QEnvelopeView : QView
 
   lastIndex { ^this.getProperty( \lastIndex ); }
 
+  selection { ^this.getProperty( \selectionIndexes );}
+
   selectIndex { arg index;
     if( index < 0 ){
       this.invokeMethod( \deselectAll );
diff --git a/SCClassLibrary/QtCollider/QKnob.sc b/SCClassLibrary/QtCollider/QKnob.sc
index 7797d46..94c56fb 100644
--- a/SCClassLibrary/QtCollider/QKnob.sc
+++ b/SCClassLibrary/QtCollider/QKnob.sc
@@ -49,6 +49,10 @@ QKnob : QAbstractStepValue {
   centered_ { arg bool; this.setProperty( \centered, bool ); }
   centered { ^this.getProperty( \centered ); }
 
+  background { ^this.palette.button; }
+
+  background_ { arg color; this.palette = this.palette.button_(color); }
+
   // FIXME: find better alternatives to set colors separately.
   color_ { arg colors;
     var p;
diff --git a/SCClassLibrary/QtCollider/QListView.sc b/SCClassLibrary/QtCollider/QListView.sc
index 8861353..723cc6b 100644
--- a/SCClassLibrary/QtCollider/QListView.sc
+++ b/SCClassLibrary/QtCollider/QListView.sc
@@ -4,18 +4,26 @@ QListView : QItemViewBase {
 
   *qtClass { ^'QcListWidget' }
 
-  mouseDownEvent { arg x, y, modifiers, buttonNumber, clickCount;
-    // Override QView:mouseDownEvent:
-    // If Ctrl / Cmd is pressed, try to start the drag after this event
-    // is processed, so that current item can be changed before.
-    if( (modifiers & QKeyModifiers.control) > 0 ) {
-      AppClock.sched( 0, {this.beginDrag(x,y)} );
-    };
+  *new { arg parent, bounds;
+     ^super.new(parent, bounds)
+       .setEventHandler( QObject.mouseMoveEvent, \mouseMoveEvent, true );
+  }
 
+  mouseDownEvent { arg x, y, modifiers, buttonNumber, clickCount;
+    // Override QView:mouseDownEvent: postpone drag start to move event
     modifiers = QKeyModifiers.toCocoa(modifiers);
     ^this.mouseDown( x, y, modifiers, buttonNumber, clickCount );
   }
 
+  mouseMoveEvent { arg x, y, modifiers, buttons;
+    // Override QView:mouseMoveEvent: start drag
+    if( buttons != 0 and: ((modifiers & QKeyModifiers.control) > 0) ) {
+      if( this.beginDrag( x, y ) ) { ^true };
+    };
+
+    ^super.mouseMoveEvent(x, y, modifiers, buttons);
+  }
+
   selectionMode_ { arg mode;
     var m;
     m = mode.switch(
@@ -48,6 +56,8 @@ QListView : QItemViewBase {
     this.setProperty( \currentRow, val ? -1 );
   }
 
+  selection { ^ this.getProperty(\selection) }
+
   background { ^this.palette.base; }
   background_ { arg color; this.palette = this.palette.base_(color); }
 
diff --git a/SCClassLibrary/QtCollider/QStethoscope2.sc b/SCClassLibrary/QtCollider/QStethoscope2.sc
index 7c362cd..df403ff 100644
--- a/SCClassLibrary/QtCollider/QStethoscope2.sc
+++ b/SCClassLibrary/QtCollider/QStethoscope2.sc
@@ -10,8 +10,8 @@ QStethoscope2 {
       idxNumBox, chNumBox, styleMenu, rateMenu;
 
   // static (immutable runtime environment)
-  var <server;
-  var scopeBuffer, maxBufSize;
+  var <server, synth;
+  var maxBufSize;
   var aBusSpec, cBusSpec, cycleSpec, yZoomSpec;
   var <>smallSize, <>largeSize;
 
@@ -19,9 +19,7 @@ QStethoscope2 {
   var <bus; // partly immutable; can't change numChannels at runtime
   var busSpec; // either aBusSpec or cBusSpec, depending on bus rate
   var  <cycle, <yZoom;
-  var synth, synthWatcher, defName;
   var sizeToggle=false;
-  var running = false;
 
   *implementsClass {^'Stethoscope'}
 
@@ -63,6 +61,7 @@ QStethoscope2 {
     var singleBus;
 
     server = server_;
+    synth = BusScopeSynth(server);
 
     maxBufSize = max(bufsize_, 128);
 
@@ -75,7 +74,7 @@ QStethoscope2 {
       busSpec = if(bus.rate===\audio){aBusSpec}{cBusSpec};
     };
 
-    cycleSpec = ControlSpec( 64, maxBufSize, \exponential );
+    cycleSpec = ControlSpec( maxBufSize, 64, \exponential );
     yZoomSpec = ControlSpec( 0.125, 16, \exponential );
     cycle = cycleSpec.constrain(cycle_);
     yZoom = 1.0;
@@ -153,7 +152,7 @@ QStethoscope2 {
       chNumBox.action = { |me| setNumChannels.value(me.value) };
       rateMenu.action = { |me| setRate.value(me.value) };
       styleMenu.action = { |me| setStyle.value(me.value) };
-      view.asView.keyDownAction = { |v, char| this.keyDown(char) };
+      view.asView.keyDownAction = { |v, char, mod| this.keyDown(char, mod) };
       view.onClose = { view = nil; this.quit; };
 
       // LAUNCH
@@ -164,7 +163,7 @@ QStethoscope2 {
 
     setCycle = { arg val;
       cycle = val;
-      if( synth.notNil ) { synth.set(\frames, val) }
+      synth.setCycle(val);
     };
 
     setYZoom = { arg val;
@@ -175,14 +174,14 @@ QStethoscope2 {
     // NOTE: assuming a single Bus
     setIndex = { arg i;
       bus = Bus(bus.rate, i, bus.numChannels, bus.server);
-      if(synth.notNil) { synth.set(\in, i) };
+      synth.setBusIndex(i);
     };
 
     // NOTE: assuming a single Bus
     setNumChannels = { arg n;
       // we have to restart the whole thing:
-      this.stop;
       bus = Bus(bus.rate, bus.index, n, bus.server);
+      updateColors.value;
       this.run;
     };
 
@@ -192,14 +191,13 @@ QStethoscope2 {
         0, {
           bus = Bus(\audio, bus.index, bus.numChannels, bus.server);
           busSpec = aBusSpec;
-          if(synth.notNil) { synth.set(\switch, 0) };
         },
         1, {
           bus = Bus(\control, bus.index, bus.numChannels, bus.server);
           busSpec = cBusSpec;
-          if(synth.notNil) { synth.set(\switch, 1) };
         }
       );
+      synth.setRate(val);
       idxNumBox.clipLo_(busSpec.minval).clipHi_(busSpec.maxval).value_(bus.index);
       this.index = bus.index; // ensure conformance with busSpec;
       updateColors.value;
@@ -221,153 +219,90 @@ QStethoscope2 {
       scopeView.waveColors = colors;
     };
 
-    playSynthDef = { arg def, args;
-      if( synthWatcher.notNil ) {synthWatcher.stop};
-      synthWatcher = fork {
-        def.send(server);
-        server.sync;
-        synth = Synth.tail(RootNode(server), def.name, args);
-        CmdPeriod.add(this);
-        {if(view.notNil){updateColors.value; scopeView.start}}.defer;
-      };
-    };
-
     makeGui.value(parent);
+    updateColors.value;
 
-    ServerBoot.add(this, server);
+    ServerTree.add(this, server);
     ServerQuit.add(this, server);
     this.run;
   }
 
-  doOnServerBoot {
-      this.run;
+  doOnServerTree {
+    this.run;
   }
 
   doOnServerQuit {
-      this.stop;
-      scopeBuffer.free;
-      scopeBuffer = nil;
-  }
-
-  cmdPeriod {
-    synth = nil;
     this.stop;
-    CmdPeriod.remove(this);
   }
 
   run {
-    var n_chan;
-
-    if(running || server.serverRunning.not) {^this};
-
-    if(scopeBuffer.isNil){
-      scopeBuffer = ScopeBuffer.alloc(server);
-      scopeView.bufnum = scopeBuffer.index;
-      defName = "stethoscope" ++ scopeBuffer.index.asString;
+    synth.play(maxBufSize, bus, cycle);
+    if( view.notNil && synth.bufferIndex.notNil) {
+      scopeView.bufnum = synth.bufferIndex;
+      scopeView.start;
     };
-
-    n_chan = this.numChannels.asInteger;
-
-    if( bus.class === Bus ) {
-      playSynthDef.value (
-        SynthDef(defName, { arg in, switch, frames;
-          var z;
-          z = Select.ar(switch, [
-            In.ar(in, n_chan),
-            K2A.ar(In.kr(in, n_chan))]
-          );
-          ScopeOut2.ar(z, scopeBuffer.index, maxBufSize, frames );
-        }),
-        [\in, bus.index, \switch, if('audio' === bus.rate){0}{1}, \frames, cycle]
-      )
-    }{
-      playSynthDef.value (
-        SynthDef(defName, { arg frames;
-          var z = Array(n_chan);
-          bus.do { |b| z = z ++ b.ar };
-          ScopeOut2.ar(z, scopeBuffer.index, maxBufSize, frames);
-        }),
-        [\frames, cycle]
-      );
-    };
-
-    running = true;
   }
 
   stop {
     if( view.notNil ) { {scopeView.stop}.defer };
-
-    if( synthWatcher.notNil ) { synthWatcher.stop };
-
-    if( synth.notNil ) {
-      synth.free;
-      synth = nil;
-    };
-
-    running = false;
+    synth.stop;
   }
 
   quit {
     var win;
     this.stop;
-    ServerBoot.remove(this, server);
-    ServerQuit.remove(this, server);
-    CmdPeriod.remove(this);
-    if(scopeBuffer.notNil) {scopeBuffer.free; scopeBuffer=nil};
+    synth.free;
     if(window.notNil) { win = window; window = nil; { win.close }.defer; };
+    ServerTree.remove(this, server);
+    ServerQuit.remove(this, server);
   }
 
   setProperties { arg numChannels, index, bufsize, zoom, rate;
-      var new_bus;
-      var isRunning = running;
-
-      if (isRunning) {this.stop};
-
-      // process args
-
-      if(index.notNil || numChannels.notNil || rate.notNil) {
-        bus = if(bus.class === Bus) {
-            Bus (
-              rate ? bus.rate,
-              index ? bus.index,
-              numChannels ? bus.numChannels,
-              server
-            )
-        }{
-            Bus (
-              rate ? \audio,
-              index ? 0,
-              numChannels ? 2,
-              server
-            )
-        };
+    var new_bus;
+
+    // process args
+
+    if(index.notNil || numChannels.notNil || rate.notNil) {
+      bus = if(bus.class === Bus) {
+        Bus (
+          rate ? bus.rate,
+          index ? bus.index,
+          numChannels ? bus.numChannels,
+          server
+        )
+      }{
+        Bus (
+          rate ? \audio,
+          index ? 0,
+          numChannels ? 2,
+          server
+        )
       };
-      if(bufsize.notNil) { maxBufSize = max(bufsize, 128) };
+    };
+    if(bufsize.notNil) { maxBufSize = max(bufsize, 128) };
 
-      // set other vars related to args
+    // set other vars related to args
 
-      busSpec = if(bus.rate === \audio) {aBusSpec} {cBusSpec};
-      cycleSpec = ControlSpec( 64, maxBufSize, \exponential );
-      if(zoom.notNil)
-        { cycle = cycleSpec.constrain( 1024 * zoom.asFloat.reciprocal ) };
+    busSpec = if(bus.rate === \audio) {aBusSpec} {cBusSpec};
+    cycleSpec = ControlSpec( maxBufSize, 64, \exponential );
+    if(zoom.notNil)
+    { cycle = cycleSpec.constrain( 1024 * zoom.asFloat.reciprocal ) };
 
-      // update GUI
+    // update GUI
 
-      cycleSlider.value = cycleSpec.unmap(cycle);
-      rateMenu.value_(if(bus.rate === \audio){0}{1}).enabled_(true);
-      idxNumBox.clipLo_(busSpec.minval).clipHi_(busSpec.maxval).value_(bus.index).enabled_(true);
-      chNumBox.value_(bus.numChannels).enabled_(true);
+    cycleSlider.value = cycleSpec.unmap(cycle);
+    rateMenu.value_(if(bus.rate === \audio){0}{1}).enabled_(true);
+    idxNumBox.clipLo_(busSpec.minval).clipHi_(busSpec.maxval).value_(bus.index).enabled_(true);
+    chNumBox.value_(bus.numChannels).enabled_(true);
+    updateColors.value;
 
-      if (isRunning) {this.run};
+    if (synth.isRunning) { synth.play(maxBufSize, bus, cycle) };
   }
 
   bufsize { ^maxBufSize }
 
   bus_ { arg b;
     var isSingle = b.class === Bus;
-    var isRunning = running;
-
-    if (isRunning) {this.stop};
 
     bus = b;
 
@@ -386,7 +321,9 @@ QStethoscope2 {
     idxNumBox.enabled = isSingle;
     chNumBox.enabled = isSingle;
 
-    if (isRunning) {this.run};
+    updateColors.value;
+
+    if (synth.isRunning) { synth.play(maxBufSize, bus, cycle); };
   }
 
   numChannels {
@@ -483,7 +420,8 @@ QStethoscope2 {
     this.bus = Bus(\audio, 0, c, server);
   }
 
-  keyDown { arg char;
+  keyDown { arg char, mod;
+    if (mod != 0) { ^false };
     case (
       { char === $i }, { this.toInputBus },
       { char === $o }, { this.toOutputBus },
@@ -504,3 +442,113 @@ QStethoscope2 {
     ^true;
   }
 }
+
+BusScopeSynth {
+  // Encapsulate management of server resources
+
+  var server, buffer, synthDefName, synth;
+  var playThread, playCond;
+
+  *new { arg server;
+    var instance;
+    server = server ? Server.default;
+    instance = super.newCopyArgs(server);
+    ServerQuit.add(instance);
+    ^instance;
+  }
+
+  play { arg bufSize, bus, cycle;
+    var synthDef;
+    var synthArgs;
+    var bufIndex;
+    var busChannels;
+
+    if(server.serverRunning.not) { ^this };
+
+    this.stop;
+
+    if (buffer.isNil) {
+      buffer = ScopeBuffer.alloc(server);
+      synthDefName = "stethoscope" ++ buffer.index.asString;
+    };
+
+    bufIndex = buffer.index.asInteger;
+
+    if( bus.class === Bus ) {
+      busChannels = bus.numChannels.asInteger;
+      synthDef = SynthDef(synthDefName, { arg busIndex, rate, cycle;
+        var z;
+        z = Select.ar(rate, [
+          In.ar(busIndex, busChannels),
+          K2A.ar(In.kr(busIndex, busChannels))]
+        );
+        ScopeOut2.ar(z, bufIndex, bufSize, cycle );
+      });
+      synthArgs = [\busIndex, bus.index.asInteger, \rate, if('audio' === bus.rate, 0, 1), \cycle, cycle];
+    }{
+      synthDef = SynthDef(synthDefName, { arg cycle;
+        var z = Array();
+        bus.do { |b| z = z ++ b.ar };
+        ScopeOut2.ar(z, bufIndex, bufSize, cycle);
+      });
+      synthArgs =	[\cycle, cycle];
+    };
+
+    playThread = fork {
+      var cond;
+      //("BufScopeSynth: waiting on previous synth...").postln;
+      if (playCond.notNil) { playCond.wait };
+      //postln("BufScopeSynth: got way.");
+      synthDef.send(server);
+      server.sync;
+      //postln("BufScopeSynth: synthdef sent.");
+      synth = Synth.tail(RootNode(server), synthDef.name, synthArgs);
+      //postln("BufScopeSynth: made synth:" + synth.nodeID);
+      playCond = cond = Condition();
+      synth.onFree { |thisSynth|
+        //postln("BufScopeSynth: Synth freed:" + thisSynth.nodeID);
+        cond.test = true; cond.signal;
+        if (synth.notNil and: {synth.nodeID == thisSynth.nodeID}) { synth = nil; }
+      }
+    }
+  }
+
+  stop {
+    if (playThread.notNil) { playThread.stop; playThread = nil };
+    if (synth.notNil) {
+      synth.free; synth = nil
+    };
+  }
+
+  isRunning { ^playThread.notNil }
+
+	bufferIndex { ^ buffer !? { buffer.index } }
+
+  setBusIndex { arg index;
+    if( synth.notNil ) { synth.set(\busIndex, index) };
+  }
+
+  setRate { arg rate; // 0 = audio, 1 = control
+    if( synth.notNil ) { synth.set(\rate, rate) };
+
+  }
+
+  setCycle { arg frames;
+    if( synth.notNil ) { synth.set(\cycle, frames) };
+  }
+
+  free {
+    this.stop;
+    if (buffer.notNil) {
+      buffer.free;
+      buffer = nil;
+    };
+    ServerQuit.remove(this, server);
+  }
+
+  doOnServerQuit {
+    buffer = nil;
+    synth = nil;
+    playCond = nil;
+  }
+}
diff --git a/SCClassLibrary/QtCollider/QView.sc b/SCClassLibrary/QtCollider/QView.sc
index ed68abb..b25b2d1 100644
--- a/SCClassLibrary/QtCollider/QView.sc
+++ b/SCClassLibrary/QtCollider/QView.sc
@@ -632,7 +632,7 @@ QView : QObject {
     if( (modifiers & QKeyModifiers.control) > 0 ) { // if Ctrl / Cmd mod
       // Try to get drag obj and start a drag.
       // If successful, block further processing of this event.
-      if( this.beginDrag( x, y ) ) { ^false };
+      if( this.beginDrag( x, y ) ) { ^true };
     };
 
     // else continue to handle mouse down event
@@ -646,6 +646,7 @@ QView : QObject {
   }
 
   mouseMoveEvent { arg x, y, modifiers, buttons;
+    // WARNING: Overridden in QListView!
     if( buttons != 0 ) {
       modifiers = QKeyModifiers.toCocoa(modifiers);
       ^this.mouseMove( x, y, modifiers );
diff --git a/SCClassLibrary/QtCollider/QtGUI.sc b/SCClassLibrary/QtCollider/QtGUI.sc
index aa5971b..0b760d9 100644
--- a/SCClassLibrary/QtCollider/QtGUI.sc
+++ b/SCClassLibrary/QtCollider/QtGUI.sc
@@ -85,6 +85,8 @@ QtGUI {
   *font { ^QFont }
   *image { ^this.notImplemented( "Image" ) }
 
+  *speech { ^'Speech'.asClass }
+
   *notImplemented { arg class;
     //("QtGUI: " ++ class.asString ++ " is not implemented yet").postln;
     ^nil;
@@ -92,6 +94,8 @@ QtGUI {
 
   //////////////////////////////////////////////////////////////////////
 
+  *cursorPosition { _Qt_CursorPosition }
+
   *availableStyles {
     _Qt_AvailableStyles
     ^this.primitiveFailed;
diff --git a/SCClassLibrary/QtCollider/dnd_views.sc b/SCClassLibrary/QtCollider/dnd_views.sc
index 40b8101..a70854d 100644
--- a/SCClassLibrary/QtCollider/dnd_views.sc
+++ b/SCClassLibrary/QtCollider/dnd_views.sc
@@ -13,7 +13,7 @@ QDragView : QTextField
   mouseDownEvent { arg x, y, modifiers, buttonNumber, clickCount;
     // Try to get drag obj and start a drag.
     // If successful, block further processing of this event.
-    if( this.beginDrag( x, y ) ) { ^false };
+    if( this.beginDrag( x, y ) ) { ^true };
 
     // else continue to handle mouse down event
     modifiers = QKeyModifiers.toCocoa(modifiers);
diff --git a/SCDoc/SCDoc.cpp b/SCDoc/SCDoc.cpp
index e0ccc55..468d985 100644
--- a/SCDoc/SCDoc.cpp
+++ b/SCDoc/SCDoc.cpp
@@ -4,7 +4,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/SCDoc/SCDoc.l b/SCDoc/SCDoc.l
index 96e4ae6..036e5aa 100644
--- a/SCDoc/SCDoc.l
+++ b/SCDoc/SCDoc.l
@@ -5,7 +5,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/SCDoc/SCDoc.tab.cpp b/SCDoc/SCDoc.tab.cpp
index 8f5554c..c72773f 100644
--- a/SCDoc/SCDoc.tab.cpp
+++ b/SCDoc/SCDoc.tab.cpp
@@ -6,7 +6,7 @@
    
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation, either version 3 of the License, or
+   the Free Software Foundation, either version 2 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
diff --git a/SCDoc/SCDoc.y b/SCDoc/SCDoc.y
index b7710f9..3bb441d 100644
--- a/SCDoc/SCDoc.y
+++ b/SCDoc/SCDoc.y
@@ -5,7 +5,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/SCDoc/SCDocPrim.cpp b/SCDoc/SCDocPrim.cpp
index e727507..9e77d36 100644
--- a/SCDoc/SCDocPrim.cpp
+++ b/SCDoc/SCDocPrim.cpp
@@ -4,7 +4,7 @@
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
+* the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
diff --git a/SCVersion.txt b/SCVersion.txt
index 0d10695..aeb8dde 100644
--- a/SCVersion.txt
+++ b/SCVersion.txt
@@ -3,4 +3,4 @@
 
 set(PROJECT_VERSION_MAJOR 3)
 set(PROJECT_VERSION_MINOR 6)
-set(PROJECT_VERSION_PATCH .1)
+set(PROJECT_VERSION_PATCH .3)
diff --git a/cmake_modules/FindFFTW3f.cmake b/cmake_modules/FindFFTW3f.cmake
index 5eea122..9b34422 100644
--- a/cmake_modules/FindFFTW3f.cmake
+++ b/cmake_modules/FindFFTW3f.cmake
@@ -10,7 +10,7 @@ FIND_PATH(
 
 FIND_LIBRARY(
     FFTW3F_LIBRARY
-    NAMES fftw3f libfftw3f
+    NAMES fftw3f libfftw3f fftw3f-3
     HINTS $ENV{FFTW3_DIR}/lib
     PATHS /usr/local/lib
           /usr/lib
diff --git a/cmake_modules/FindPortmidi.cmake b/cmake_modules/FindPortmidi.cmake
index 5bab1c3..41925ef 100644
--- a/cmake_modules/FindPortmidi.cmake
+++ b/cmake_modules/FindPortmidi.cmake
@@ -7,10 +7,24 @@
 #
 
 if(PORTMIDI_INCLUDE_DIRS AND PORTMIDI_LIBRARIES)
-  set(PORTMIDI_FOUND TRUE)
+    set(PORTMIDI_FOUND TRUE)
 else()
-  # Right now we only use PortMidi on Windows.
-  # When needed, implement finding it on other platforms.
-  set(PORTMIDI_FOUND FALSE)
-endif()
+    # Right now we only use PortMidi on Windows.
+    # When needed, implement finding it on other platforms.
+
+    find_path(PORTMIDI_COMON_INCLUDE_DIR NAMES portmidi.h )
+    find_path(PORTMIDI_TIME_INCLUDE_DIR NAMES porttime.h )
+    find_library(PORTMIDI_LIBRARY NAMES portmidi )
 
+    if( PORTMIDI_COMON_INCLUDE_DIR AND
+        PORTMIDI_TIME_INCLUDE_DIR AND
+        PORTMIDI_LIBRARY )
+        set(PORTMIDI_FOUND TRUE)
+        set(PORTMIDI_INCLUDE_DIRS ${PORTMIDI_COMON_INCLUDE_DIR} ${PORTMIDI_TIME_INCLUDE_DIR})
+        set(PORTMIDI_LIBRARIES ${PORTMIDI_LIBRARY})
+        message(STATUS "Found Portmidi: ${PORTMIDI_INCLUDE_DIRS} ${PORTMIDI_LIBRARIES}")
+    else()
+        set(PORTMIDI_FOUND FALSE)
+    endif()
+
+endif()
diff --git a/cmake_modules/FindSndfile.cmake b/cmake_modules/FindSndfile.cmake
index 554ced7..3a2f457 100644
--- a/cmake_modules/FindSndfile.cmake
+++ b/cmake_modules/FindSndfile.cmake
@@ -29,7 +29,7 @@ elseif (APPLE)
 else()
 	find_path(SNDFILE_INCLUDE_DIR sndfile.h)
 
-	find_library(SNDFILE_LIBRARY NAMES sndfile)
+	find_library(SNDFILE_LIBRARY NAMES sndfile sndfile-1)
 
 	# Handle the QUIETLY and REQUIRED arguments and set SNDFILE_FOUND to TRUE if
 	# all listed variables are TRUE.
diff --git a/common/SC_DirUtils.cpp b/common/SC_DirUtils.cpp
index 0e3a40e..54d6dae 100644
--- a/common/SC_DirUtils.cpp
+++ b/common/SC_DirUtils.cpp
@@ -27,7 +27,6 @@
 #ifdef _WIN32
 # include <windows.h>
 # include <direct.h>
-# include <shlobj.h>
 # include "SC_Win32Utils.h"
 #else
 # include <unistd.h>
@@ -339,12 +338,7 @@ void sc_GetUserHomeDirectory(char *str, int size)
 void sc_GetSystemAppSupportDirectory(char *str, int size)
 {
 #ifdef _WIN32
-	ITEMIDLIST * pidl;
-	char buf[MAX_PATH];
-	SHGetFolderLocation(NULL, CSIDL_COMMON_APPDATA, NULL, 0, &pidl);
-	SHGetPathFromIDList( pidl, buf );
-	ILFree(pidl);
-	strncpy(str, buf, size);
+	win32_GetKnownFolderPath(CSIDL_COMMON_APPDATA, str, size);
 	sc_AppendToPath(str, size, "SuperCollider");
 #else
 
@@ -382,12 +376,7 @@ void sc_GetUserAppSupportDirectory(char *str, int size)
 	}
 
 #if defined(_WIN32)
-	ITEMIDLIST * pidl;
-	char buf[MAX_PATH];
-	SHGetFolderLocation(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, &pidl);
-	SHGetPathFromIDList( pidl, buf );
-	ILFree(pidl);
-	strncpy(str, buf, size);
+	win32_GetKnownFolderPath(CSIDL_LOCAL_APPDATA, str, size);
 	sc_AppendToPath(str, size, "SuperCollider");
 #else
 
diff --git a/common/SC_Version.hpp.in b/common/SC_Version.hpp.in
new file mode 100644
index 0000000..3bc5745
--- /dev/null
+++ b/common/SC_Version.hpp.in
@@ -0,0 +1,35 @@
+/*
+ *    SuperCollider real time audio synthesis system
+ *    Copyright (c) 2002 James McCartney. All rights reserved.
+ *    Copyright (c) 2013 Tim Blechmann
+ *
+ *    This program is free software; you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation; either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with this program; if not, write to the Free Software
+ *    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
+ */
+
+#include <string>
+#include <sstream>
+
+static const int SC_VersionMajor    = @PROJECT_VERSION_MAJOR@;
+static const int SC_VersionMinor    = @PROJECT_VERSION_MINOR@;
+static const char SC_VersionPatch[] = "@PROJECT_VERSION_PATCH@";
+
+static inline std::string SC_VersionString()
+{
+	std::stringstream out;
+	out << SC_VersionMajor << "."
+		<< SC_VersionMinor
+		<< SC_VersionPatch;
+	return out.str();
+}
diff --git a/common/SC_Win32Utils.cpp b/common/SC_Win32Utils.cpp
index 36f88a0..08ce3b5 100644
--- a/common/SC_Win32Utils.cpp
+++ b/common/SC_Win32Utils.cpp
@@ -25,6 +25,7 @@
 #include <cstdlib>
 #include <sys/timeb.h>
 #include <time.h>
+#include <windows.h>
 
 #include "SC_Win32Utils.h"
 
@@ -54,7 +55,7 @@ void win32_ExtractContainingFolder(char* folder,const char* pattern,int maxChars
 
 void win32_gettimeofday(timeval* tv, void*)
 {
-	long unsigned secBetween1601and1970 = 11644473600ULL;
+	unsigned __int64 secBetween1601and1970 = 11644473600ULL;
 	FILETIME fileTime;
 	GetSystemTimeAsFileTime(&fileTime);
 	tv->tv_sec  = (* (unsigned __int64 *) &fileTime / (unsigned __int64)10000000) - secBetween1601and1970;
@@ -62,6 +63,15 @@ void win32_gettimeofday(timeval* tv, void*)
 
 }
 
+void win32_GetKnownFolderPath(int folderId, char *dest, int size)
+{
+	// Use a temporary buffer, as SHGetFolderLocation() requires it
+	// to be at least MAX_PATH size, but destination size may be less
+	char buf[MAX_PATH];
+	SHGetFolderPath(NULL, folderId, NULL, 0, buf);
+	strncpy(dest, buf, size);
+}
+
 void win32_GetHomeFolder(char* homeFolder, int bufLen)
 {
   char homeFolder_[MAX_PATH];
diff --git a/common/SC_fftlib.cpp b/common/SC_fftlib.cpp
index 0015e77..7cb6c7c 100644
--- a/common/SC_fftlib.cpp
+++ b/common/SC_fftlib.cpp
@@ -250,7 +250,7 @@ scfft * scfft_create(size_t fullsize, size_t winsize, SCFFT_WindowFunction winty
 
 	scfft * f = (scfft*)chunk;
 	float *trbuf = (float*)(chunk + sizeof(scfft));
-	trbuf = (float*) ((intptr_t)((char*)trbuf + (alignment - 1)) & -alignment);
+	trbuf = (float*) ((size_t)((char*)trbuf + (alignment - 1)) & -alignment); // FIXME: should be intptr_t instead of size_t once we use c++11
 
 #ifdef NOVA_SIMD
 	assert(nova::vec<float>::is_aligned(trbuf));
diff --git a/editors/CMakeLists.txt b/editors/CMakeLists.txt
index 1f730d8..02a1b45 100644
--- a/editors/CMakeLists.txt
+++ b/editors/CMakeLists.txt
@@ -19,10 +19,18 @@ if(SC_EL)
 endif()
 
 if(SC_ED)
-	add_subdirectory(sced)
+	if(NO_GPL3)
+		message(WARNING "SC_ED requested, but NO_GPL3 flag is on, so not activated.")
+	else()
+		add_subdirectory(sced)
+	endif()
 endif()
 
 if(SC_VIM)
-	add_subdirectory(scvim)
+	if(NO_GPL3)
+		message(WARNING "SC_VIM requested, but NO_GPL3 flag is on, so not activated.")
+	else()
+		add_subdirectory(scvim)
+	endif()
 endif()
 
diff --git a/editors/sc-ide/CMakeLists.txt b/editors/sc-ide/CMakeLists.txt
index f374ed7..36d8bb3 100644
--- a/editors/sc-ide/CMakeLists.txt
+++ b/editors/sc-ide/CMakeLists.txt
@@ -1,6 +1,6 @@
 cmake_minimum_required( VERSION 2.8 )
 
-find_package(Qt4 4.7 REQUIRED QtCore QtGui QtWebKit)
+find_package(Qt4 4.7 REQUIRED QtCore QtGui QtWebKit QtNetwork)
 
 if(${CMAKE_COMPILER_IS_GNUCXX})
     add_definitions(-Wreorder)
@@ -142,6 +142,7 @@ set( translation_src
     ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_de.ts
     ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_es.ts
     ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_fr.ts
+    ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_it.ts
     ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_ja.ts
     ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_pt.ts
     ${CMAKE_CURRENT_SOURCE_DIR}/translations/scide_ru.ts
diff --git a/editors/sc-ide/core/doc_manager.cpp b/editors/sc-ide/core/doc_manager.cpp
index 63b1563..0b0c1fd 100644
--- a/editors/sc-ide/core/doc_manager.cpp
+++ b/editors/sc-ide/core/doc_manager.cpp
@@ -36,7 +36,7 @@
 using namespace ScIDE;
 
 Document::Document( bool isPlainText ):
-    mId( QUuid::createUuid().toString().toAscii() ),
+    mId( QUuid::createUuid().toString().toLatin1() ),
     mDoc( new QTextDocument(this) ),
     mTitle( tr("Untitled") ),
     mIndentWidth(4),
@@ -182,7 +182,7 @@ Document *DocumentManager::open( const QString & path, int initialCursorPosition
                                    (info.suffix() == QString("scd")));
 
     Document *doc = createDocument( fileIsPlainText );
-    doc->mDoc->setPlainText( QString::fromUtf8( bytes.data(), bytes.size() ) );
+    doc->mDoc->setPlainText( decodeDocument(bytes) );
     doc->mDoc->setModified(false);
     doc->mFilePath = filePath;
     doc->mTitle = info.fileName();
@@ -215,7 +215,7 @@ bool DocumentManager::reload( Document *doc )
     QByteArray bytes( file.readAll() );
     file.close();
 
-    doc->mDoc->setPlainText( QString::fromUtf8( bytes.data(), bytes.size() ) );
+    doc->mDoc->setPlainText( decodeDocument(bytes) );
     doc->mDoc->setModified(false);
 
     QFileInfo info(doc->mFilePath);
@@ -227,6 +227,14 @@ bool DocumentManager::reload( Document *doc )
     return true;
 }
 
+QString DocumentManager::decodeDocument(const QByteArray & bytes)
+{
+    QTextStream stream(bytes);
+    stream.setCodec("UTF-8");
+    stream.setAutoDetectUnicode(true);
+    return stream.readAll();
+}
+
 void DocumentManager::close( Document *doc )
 {
     Q_ASSERT(doc);
@@ -303,6 +311,8 @@ bool DocumentManager::doSaveAs( Document *doc, const QString & path )
     file.write(str.toUtf8());
     file.close();
 
+    info.refresh();
+
     doc->mFilePath = cpath;
     doc->mTitle = info.fileName();
     doc->mDoc->setModified(false);
diff --git a/editors/sc-ide/core/doc_manager.hpp b/editors/sc-ide/core/doc_manager.hpp
index adf36b2..8ab7899 100644
--- a/editors/sc-ide/core/doc_manager.hpp
+++ b/editors/sc-ide/core/doc_manager.hpp
@@ -124,6 +124,7 @@ private:
     void addToRecent( Document * );
     void loadRecentDocuments( Settings::Manager * );
     void closeSingleUntitledIfUnmodified();
+    QString decodeDocument(QByteArray const &);
 
 
     typedef QHash<QByteArray, Document*>::iterator DocIterator;
diff --git a/editors/sc-ide/core/sc_process.cpp b/editors/sc-ide/core/sc_process.cpp
index 4496a6b..f625e2d 100644
--- a/editors/sc-ide/core/sc_process.cpp
+++ b/editors/sc-ide/core/sc_process.cpp
@@ -64,15 +64,17 @@ void ScProcess::prepareActions(Settings::Manager * settings)
 
     const QString interpreterCategory(tr("Interpreter"));
 
-    mActions[ToggleRunning] = action = new QAction(tr("Boot Interpreter"), this);
+    mActions[ToggleRunning] = action = new QAction(tr("Boot or Quit Interpreter"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(toggleRunning()) );
-    settings->addAction( action, "interpreter-toggle-running", interpreterCategory);
+    //settings->addAction( action, "interpreter-toggle-running", interpreterCategory);
 
-    mActions[Start] = action = new QAction(tr("Boot Interpreter"), this);
+    mActions[Start] = action =
+        new QAction(QIcon::fromTheme("system-run"), tr("Boot Interpreter"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(startLanguage()) );
     settings->addAction( action, "interpreter-start", interpreterCategory);
 
-    mActions[Stop] = action = new QAction(tr("Quit Interpreter"), this);
+    mActions[Stop] = action =
+        new QAction(QIcon::fromTheme("system-shutdown"), tr("Quit Interpreter"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(stopLanguage()) );
     settings->addAction( action, "interpreter-stop", interpreterCategory);
 
@@ -90,12 +92,25 @@ void ScProcess::prepareActions(Settings::Manager * settings)
     mActions[StopMain] = action = new QAction(
         QIcon::fromTheme("media-playback-stop"), tr("Stop"), this);
     action->setShortcut(tr("Ctrl+.", "Stop (a.k.a. cmd-period)"));
+    action->setShortcutContext(Qt::ApplicationShortcut);
     connect(action, SIGNAL(triggered()), this, SLOT(stopMain()));
     settings->addAction( action, "interpreter-main-stop", interpreterCategory);
 
+    connect( mActions[Start], SIGNAL(changed()), this, SLOT(updateToggleRunningAction()) );
+    connect( mActions[Stop], SIGNAL(changed()), this, SLOT(updateToggleRunningAction()) );
+
     onProcessStateChanged(QProcess::NotRunning);
 }
 
+void ScProcess::updateToggleRunningAction()
+{
+    QAction *targetAction = state() == QProcess::NotRunning ? mActions[Start] : mActions[Stop];
+
+    mActions[ToggleRunning]->setText( targetAction->text() );
+    mActions[ToggleRunning]->setIcon( targetAction->icon() );
+    mActions[ToggleRunning]->setShortcut( targetAction->shortcut() );
+}
+
 void ScProcess::toggleRunning()
 {
     switch(state()) {
@@ -189,6 +204,10 @@ void ScProcess::restartLanguage()
     startLanguage();
 }
 
+void ScProcess::stopMain(void)
+{
+    evaluateCode("thisProcess.stop", true);
+}
 
 
 void ScProcess::onReadyRead(void)
@@ -245,11 +264,10 @@ void ScProcess::onProcessStateChanged(QProcess::ProcessState state)
 {
     switch (state) {
     case QProcess::Starting:
-        mActions[ToggleRunning]->setText(tr("Quit Interpreter"));
-        mActions[ToggleRunning]->setIcon(QIcon::fromTheme("system-shutdown"));
         mActions[Start]->setEnabled(false);
         mActions[Stop]->setEnabled(true);
         mActions[Restart]->setEnabled(true);
+        updateToggleRunningAction();
 
         break;
 
@@ -262,13 +280,12 @@ void ScProcess::onProcessStateChanged(QProcess::ProcessState state)
         break;
 
     case QProcess::NotRunning:
-        mActions[ToggleRunning]->setText(tr("Boot Interpreter"));
-        mActions[ToggleRunning]->setIcon(QIcon::fromTheme("system-run"));
         mActions[Start]->setEnabled(true);
         mActions[Stop]->setEnabled(false);
         mActions[Restart]->setEnabled(false);
         mActions[StopMain]->setEnabled(false);
         mActions[RecompileClassLibrary]->setEnabled(false);
+        updateToggleRunningAction();
 
         break;
     }
diff --git a/editors/sc-ide/core/sc_process.hpp b/editors/sc-ide/core/sc_process.hpp
index 2b7a2f9..c0ea0da 100644
--- a/editors/sc-ide/core/sc_process.hpp
+++ b/editors/sc-ide/core/sc_process.hpp
@@ -83,7 +83,7 @@ public slots:
     void stopLanguage (void);
     void restartLanguage (void);
     void recompileClassLibrary (void);
-    void stopMain(void) { evaluateCode("thisProcess.stop", false); }
+    void stopMain(void);
     void evaluateCode(QString const & commandString, bool silent = false);
 
 signals:
@@ -106,6 +106,7 @@ private slots:
     void finalizeConnection();
     void onProcessStateChanged( QProcess::ProcessState state);
     void onReadyRead(void);
+    void updateToggleRunningAction();
 
 private:
     void onStart();
diff --git a/editors/sc-ide/core/sc_server.cpp b/editors/sc-ide/core/sc_server.cpp
index 5630c57..48382ef 100644
--- a/editors/sc-ide/core/sc_server.cpp
+++ b/editors/sc-ide/core/sc_server.cpp
@@ -58,13 +58,23 @@ void ScServer::createActions(Settings::Manager * settings)
     const QString synthServerCategory(tr("Sound Synthesis Server"));
     QAction *action;
 
-    mActions[ToggleRunning] = action = new QAction(tr("Boot or quit server"), this);
-    action->setShortcut(tr("Ctrl+B", "Boot or quit default server"));
+    mActions[ToggleRunning] = action = new QAction(tr("Boot or quit default server"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(toggleRunning()));
-    settings->addAction( action, "synth-server-toggle-running", synthServerCategory);
+    //settings->addAction( action, "synth-server-toggle-running", synthServerCategory);
 
-    mActions[Reboot] = action = new QAction(tr("Reboot server"), this);
-    action->setShortcut(tr("Ctrl+Shift+B", "Reboot default server"));
+    mActions[Boot] = action =
+        new QAction(QIcon::fromTheme("system-run"), tr("&Boot Server"), this);
+    action->setShortcut(tr("Ctrl+B", "Boot default server"));
+    connect(action, SIGNAL(triggered()), this, SLOT(boot()));
+    settings->addAction( action, "synth-server-boot", synthServerCategory);
+
+    mActions[Quit] = action =
+        new QAction(QIcon::fromTheme("system-shutdown"), tr("&Quit Server"), this);
+    connect(action, SIGNAL(triggered()), this, SLOT(quit()));
+    settings->addAction( action, "synth-server-quit", synthServerCategory);
+
+    mActions[Reboot] = action =
+        new QAction( QIcon::fromTheme("system-reboot"), tr("&Reboot Server"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(reboot()));
     settings->addAction( action, "synth-server-reboot", synthServerCategory);
 
@@ -82,6 +92,19 @@ void ScServer::createActions(Settings::Manager * settings)
     action->setShortcut(tr("Ctrl+Shift+T", "Dump node tree with controls"));
     connect(action, SIGNAL(triggered()), this, SLOT(dumpNodeTreeWithControls()));
     settings->addAction( action, "synth-server-dump-nodes-with-controls", synthServerCategory);
+
+    connect( mActions[Boot], SIGNAL(changed()), this, SLOT(updateToggleRunningAction()) );
+    connect( mActions[Quit], SIGNAL(changed()), this, SLOT(updateToggleRunningAction()) );
+
+    updateToggleRunningAction();
+}
+
+void ScServer::updateToggleRunningAction()
+{
+    QAction *targetAction = isRunning() ? mActions[Quit] : mActions[Boot];
+    mActions[ToggleRunning]->setText( targetAction->text() );
+    mActions[ToggleRunning]->setIcon( targetAction->icon() );
+    mActions[ToggleRunning]->setShortcut( targetAction->shortcut() );
 }
 
 void ScServer::boot()
@@ -230,16 +253,12 @@ void ScServer::onRunningStateChanged( bool running, QString const & hostName, in
     if (running) {
         mServerAddress = QHostAddress(hostName);
         mPort = port;
-
-        mActions[ToggleRunning]->setText( tr("&Quit Server") );
-        mActions[ToggleRunning]->setStatusTip(tr("Quit sound synthesis server"));
     } else {
         mServerAddress.clear();
         mPort = 0;
-
-        mActions[ToggleRunning]->setText( tr("&Boot Server") );
-        mActions[ToggleRunning]->setStatusTip(tr("Boot sound synthesis server"));
     }
+
+    updateToggleRunningAction();
 }
 
 }
diff --git a/editors/sc-ide/core/sc_server.hpp b/editors/sc-ide/core/sc_server.hpp
index 0a59bc0..96cebcd 100644
--- a/editors/sc-ide/core/sc_server.hpp
+++ b/editors/sc-ide/core/sc_server.hpp
@@ -38,6 +38,8 @@ class ScServer : public QObject
 public:
     enum ActionRole {
         ToggleRunning,
+        Boot,
+        Quit,
         Reboot,
         ShowMeters,
         DumpNodeTree,
@@ -69,6 +71,7 @@ signals:
 private slots:
     void onScLangStateChanged( QProcess::ProcessState );
     void onScLangReponse( const QString & selector, const QString & data );
+    void updateToggleRunningAction();
 
 protected:
     virtual void timerEvent(QTimerEvent * event);
diff --git a/editors/sc-ide/primitives/sc_ipc_client.cpp b/editors/sc-ide/primitives/sc_ipc_client.cpp
index 8773c44..65c0766 100644
--- a/editors/sc-ide/primitives/sc_ipc_client.cpp
+++ b/editors/sc-ide/primitives/sc_ipc_client.cpp
@@ -18,7 +18,8 @@
  *    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
  */
 
-#include <QtNetwork/QLocalSocket>
+#include <QLocalSocket>
+#include <QDataStream>
 
 #include <cstdlib>
 
diff --git a/editors/sc-ide/translations/scide_de.ts b/editors/sc-ide/translations/scide_de.ts
index 5c79d8e..4a1d872 100644
--- a/editors/sc-ide/translations/scide_de.ts
+++ b/editors/sc-ide/translations/scide_de.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_es.ts b/editors/sc-ide/translations/scide_es.ts
index 809fdba..90cf0e0 100644
--- a/editors/sc-ide/translations/scide_es.ts
+++ b/editors/sc-ide/translations/scide_es.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_fr.ts b/editors/sc-ide/translations/scide_fr.ts
index 72c279f..081a47f 100644
--- a/editors/sc-ide/translations/scide_fr.ts
+++ b/editors/sc-ide/translations/scide_fr.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_de.ts b/editors/sc-ide/translations/scide_it.ts
similarity index 94%
copy from editors/sc-ide/translations/scide_de.ts
copy to editors/sc-ide/translations/scide_it.ts
index 5c79d8e..f099bf3 100644
--- a/editors/sc-ide/translations/scide_de.ts
+++ b/editors/sc-ide/translations/scide_it.ts
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.0" language="de_DE">
+<TS version="2.0" language="it_IT">
 <context>
     <name>ConfigDialog</name>
     <message>
@@ -17,13 +17,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_editor.ui" line="37"/>
-        <source>Indentation</source>
+        <location filename="../forms/settings_editor.ui" line="31"/>
+        <source>Behavior</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_editor.ui" line="92"/>
-        <source>Use spaces instead of tabs</source>
+        <location filename="../forms/settings_editor.ui" line="37"/>
+        <source>Indentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -32,13 +32,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_editor.ui" line="31"/>
-        <source>Behavior</source>
+        <location filename="../forms/settings_editor.ui" line="61"/>
+        <source> spaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_editor.ui" line="61"/>
-        <source> spaces</source>
+        <location filename="../forms/settings_editor.ui" line="92"/>
+        <source>Use spaces instead of tabs</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2121,13 +2121,13 @@ Would you like to override it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_sclang.ui" line="33"/>
-        <source>Runtime Directory:</source>
+        <location filename="../forms/settings_sclang.ui" line="26"/>
+        <source>Start Interpreter With IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_sclang.ui" line="26"/>
-        <source>Start Interpreter With IDE</source>
+        <location filename="../forms/settings_sclang.ui" line="33"/>
+        <source>Runtime Directory:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -2141,16 +2141,6 @@ Would you like to override it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../forms/settings_sclang.ui" line="122"/>
-        <source>Exclude:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../forms/settings_sclang.ui" line="168"/>
-        <source>Post Inline Warnings</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
         <location filename="../forms/settings_sclang.ui" line="100"/>
         <location filename="../forms/settings_sclang.ui" line="146"/>
         <source>+</source>
@@ -2162,6 +2152,16 @@ Would you like to override it?</source>
         <source>-</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../forms/settings_sclang.ui" line="122"/>
+        <source>Exclude:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../forms/settings_sclang.ui" line="168"/>
+        <source>Post Inline Warnings</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>ShortcutConfigPage</name>
diff --git a/editors/sc-ide/translations/scide_ja.ts b/editors/sc-ide/translations/scide_ja.ts
index 569aef9..916d8c2 100644
--- a/editors/sc-ide/translations/scide_ja.ts
+++ b/editors/sc-ide/translations/scide_ja.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_pt.ts b/editors/sc-ide/translations/scide_pt.ts
index 9056291..86df580 100644
--- a/editors/sc-ide/translations/scide_pt.ts
+++ b/editors/sc-ide/translations/scide_pt.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_ru.ts b/editors/sc-ide/translations/scide_ru.ts
index 1ada17e..b04228b 100644
--- a/editors/sc-ide/translations/scide_ru.ts
+++ b/editors/sc-ide/translations/scide_ru.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_sl.ts b/editors/sc-ide/translations/scide_sl.ts
index ef10905..9f1de4f 100644
--- a/editors/sc-ide/translations/scide_sl.ts
+++ b/editors/sc-ide/translations/scide_sl.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_sv.ts b/editors/sc-ide/translations/scide_sv.ts
index ecd5183..78827a5 100644
--- a/editors/sc-ide/translations/scide_sv.ts
+++ b/editors/sc-ide/translations/scide_sv.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/translations/scide_zh.ts b/editors/sc-ide/translations/scide_zh.ts
index 72b6c93..ee5757d 100644
--- a/editors/sc-ide/translations/scide_zh.ts
+++ b/editors/sc-ide/translations/scide_zh.ts
@@ -251,14 +251,14 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="290"/>
-        <location filename="../core/doc_manager.cpp" line="297"/>
+        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="305"/>
         <source>File Extension Changed</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/doc_manager.cpp" line="291"/>
-        <location filename="../core/doc_manager.cpp" line="298"/>
+        <location filename="../core/doc_manager.cpp" line="299"/>
+        <location filename="../core/doc_manager.cpp" line="306"/>
         <source>The extension of the file has changed. Please reopen file to update editor mode</source>
         <translation type="unfinished"></translation>
     </message>
@@ -418,7 +418,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserDocklet</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="378"/>
+        <location filename="../widgets/help_browser.cpp" line="399"/>
         <source>Help browser</source>
         <translation type="unfinished"></translation>
     </message>
@@ -426,7 +426,7 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::HelpBrowserFindBox</name>
     <message>
-        <location filename="../widgets/help_browser.cpp" line="339"/>
+        <location filename="../widgets/help_browser.cpp" line="360"/>
         <source>Find...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -442,22 +442,22 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::LookupDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="186"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="180"/>
         <source>Look Up Implementations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="188"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="182"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="203"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="197"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="365"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="359"/>
         <source>No result for query</source>
         <translation type="unfinished"></translation>
     </message>
@@ -465,636 +465,636 @@ Apply desired actions to selected documents, until the list is empty.</source>
 <context>
     <name>ScIDE::MainWindow</name>
     <message>
-        <location filename="../widgets/main_window.cpp" line="78"/>
-        <location filename="../widgets/main_window.cpp" line="822"/>
+        <location filename="../widgets/main_window.cpp" line="94"/>
+        <location filename="../widgets/main_window.cpp" line="855"/>
         <source>Inactive</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="83"/>
+        <location filename="../widgets/main_window.cpp" line="99"/>
         <source>Interpreter:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="85"/>
+        <location filename="../widgets/main_window.cpp" line="101"/>
         <source>Server:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="93"/>
+        <location filename="../widgets/main_window.cpp" line="109"/>
         <source>Command Line:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="219"/>
+        <location filename="../widgets/main_window.cpp" line="235"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="220"/>
+        <location filename="../widgets/main_window.cpp" line="236"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="224"/>
+        <location filename="../widgets/main_window.cpp" line="240"/>
         <source>&Quit...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="225"/>
+        <location filename="../widgets/main_window.cpp" line="241"/>
         <source>Ctrl+Q</source>
         <comment>Quit application</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="226"/>
+        <location filename="../widgets/main_window.cpp" line="242"/>
         <source>Quit SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="231"/>
+        <location filename="../widgets/main_window.cpp" line="247"/>
         <source>&New</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="232"/>
+        <location filename="../widgets/main_window.cpp" line="248"/>
         <source>Ctrl+N</source>
         <comment>New document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="233"/>
+        <location filename="../widgets/main_window.cpp" line="249"/>
         <source>Create a new document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="238"/>
+        <location filename="../widgets/main_window.cpp" line="254"/>
         <source>&Open...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="239"/>
+        <location filename="../widgets/main_window.cpp" line="255"/>
         <source>Ctrl+O</source>
         <comment>Open document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="240"/>
+        <location filename="../widgets/main_window.cpp" line="256"/>
         <source>Open an existing file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="245"/>
-        <location filename="../widgets/main_window.cpp" line="246"/>
+        <location filename="../widgets/main_window.cpp" line="261"/>
+        <location filename="../widgets/main_window.cpp" line="262"/>
         <source>Open startup file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="251"/>
+        <location filename="../widgets/main_window.cpp" line="267"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="252"/>
+        <location filename="../widgets/main_window.cpp" line="268"/>
         <source>Ctrl+S</source>
         <comment>Save document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="253"/>
+        <location filename="../widgets/main_window.cpp" line="269"/>
         <source>Save the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="258"/>
+        <location filename="../widgets/main_window.cpp" line="274"/>
         <source>Save &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="259"/>
+        <location filename="../widgets/main_window.cpp" line="275"/>
         <source>Ctrl+Shift+S</source>
         <comment>Save &As...</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="260"/>
+        <location filename="../widgets/main_window.cpp" line="276"/>
         <source>Save the current document into a different file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="265"/>
+        <location filename="../widgets/main_window.cpp" line="281"/>
         <source>Save All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="266"/>
+        <location filename="../widgets/main_window.cpp" line="282"/>
         <source>Ctrl+Alt+S</source>
         <comment>Save all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="267"/>
+        <location filename="../widgets/main_window.cpp" line="283"/>
         <source>Save all open documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="272"/>
+        <location filename="../widgets/main_window.cpp" line="288"/>
         <source>&Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="273"/>
+        <location filename="../widgets/main_window.cpp" line="289"/>
         <source>Ctrl+W</source>
         <comment>Close document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="274"/>
+        <location filename="../widgets/main_window.cpp" line="290"/>
         <source>Close the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="279"/>
+        <location filename="../widgets/main_window.cpp" line="295"/>
         <source>Close All...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="280"/>
+        <location filename="../widgets/main_window.cpp" line="296"/>
         <source>Ctrl+Shift+W</source>
         <comment>Close all documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="281"/>
+        <location filename="../widgets/main_window.cpp" line="297"/>
         <source>Close all documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="286"/>
+        <location filename="../widgets/main_window.cpp" line="302"/>
         <source>&Reload</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="287"/>
+        <location filename="../widgets/main_window.cpp" line="303"/>
         <source>F5</source>
         <comment>Reload document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="288"/>
+        <location filename="../widgets/main_window.cpp" line="304"/>
         <source>Reload the current document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="292"/>
+        <location filename="../widgets/main_window.cpp" line="308"/>
         <source>Clear</source>
         <comment>Clear recent documents</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="293"/>
+        <location filename="../widgets/main_window.cpp" line="309"/>
         <source>Clear list of recent documents</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="300"/>
+        <location filename="../widgets/main_window.cpp" line="316"/>
         <source>&New Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="301"/>
+        <location filename="../widgets/main_window.cpp" line="317"/>
         <source>Open a new session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="306"/>
+        <location filename="../widgets/main_window.cpp" line="322"/>
         <source>Save Session &As...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="307"/>
+        <location filename="../widgets/main_window.cpp" line="323"/>
         <source>Save the current session with a different name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="312"/>
+        <location filename="../widgets/main_window.cpp" line="328"/>
         <source>&Manage Sessions...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="317"/>
+        <location filename="../widgets/main_window.cpp" line="333"/>
         <source>&Switch Session...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="319"/>
+        <location filename="../widgets/main_window.cpp" line="335"/>
         <source>Ctrl+Shift+Q</source>
         <comment>Switch Session</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="324"/>
+        <location filename="../widgets/main_window.cpp" line="340"/>
         <source>&Find...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="325"/>
+        <location filename="../widgets/main_window.cpp" line="341"/>
         <source>Ctrl+F</source>
         <comment>Find</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="326"/>
+        <location filename="../widgets/main_window.cpp" line="342"/>
         <source>Find text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="331"/>
+        <location filename="../widgets/main_window.cpp" line="347"/>
         <source>&Replace...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="332"/>
+        <location filename="../widgets/main_window.cpp" line="348"/>
         <source>Ctrl+R</source>
         <comment>Replace</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="333"/>
+        <location filename="../widgets/main_window.cpp" line="349"/>
         <source>Find and replace text in document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="338"/>
+        <location filename="../widgets/main_window.cpp" line="354"/>
         <source>&Command Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="339"/>
+        <location filename="../widgets/main_window.cpp" line="355"/>
         <source>Command line for quick code evaluation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="340"/>
+        <location filename="../widgets/main_window.cpp" line="356"/>
         <source>Ctrl+E</source>
         <comment>Show command line</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="344"/>
+        <location filename="../widgets/main_window.cpp" line="360"/>
         <source>&Go To Line</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="345"/>
+        <location filename="../widgets/main_window.cpp" line="361"/>
         <source>Tool to jump to a line by number</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="346"/>
+        <location filename="../widgets/main_window.cpp" line="362"/>
         <source>Ctrl+L</source>
         <comment>Show go-to-line tool</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="351"/>
+        <location filename="../widgets/main_window.cpp" line="367"/>
         <source>&Close Tool Panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="352"/>
+        <location filename="../widgets/main_window.cpp" line="368"/>
         <source>Close any open tool panel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="353"/>
+        <location filename="../widgets/main_window.cpp" line="369"/>
         <source>Esc</source>
         <comment>Close tool box</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="357"/>
+        <location filename="../widgets/main_window.cpp" line="373"/>
         <source>&Full Screen</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="359"/>
+        <location filename="../widgets/main_window.cpp" line="375"/>
         <source>Ctrl+Shift+F</source>
         <comment>Show ScIDE in Full Screen</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="363"/>
+        <location filename="../widgets/main_window.cpp" line="379"/>
         <source>Focus Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="364"/>
+        <location filename="../widgets/main_window.cpp" line="380"/>
         <source>Focus post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="365"/>
+        <location filename="../widgets/main_window.cpp" line="381"/>
         <source>Ctrl+P</source>
         <comment>Focus post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="371"/>
+        <location filename="../widgets/main_window.cpp" line="387"/>
         <source>Look Up Implementations...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="372"/>
+        <location filename="../widgets/main_window.cpp" line="388"/>
         <source>Ctrl+Shift+I</source>
         <comment>Look Up Implementations</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="373"/>
+        <location filename="../widgets/main_window.cpp" line="389"/>
         <source>Open dialog to look up implementations of a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="377"/>
+        <location filename="../widgets/main_window.cpp" line="393"/>
         <source>Look Up Implementations for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="378"/>
+        <location filename="../widgets/main_window.cpp" line="394"/>
         <source>Ctrl+I</source>
         <comment>Look Up Implementations for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="379"/>
+        <location filename="../widgets/main_window.cpp" line="395"/>
         <source>Look up implementations of class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="384"/>
+        <location filename="../widgets/main_window.cpp" line="400"/>
         <source>Look Up References...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="385"/>
+        <location filename="../widgets/main_window.cpp" line="401"/>
         <source>Ctrl+Shift+U</source>
         <comment>Look Up References</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="386"/>
+        <location filename="../widgets/main_window.cpp" line="402"/>
         <source>Open dialog to look up references to a class or a method</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="390"/>
+        <location filename="../widgets/main_window.cpp" line="406"/>
         <source>Look Up References for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="391"/>
+        <location filename="../widgets/main_window.cpp" line="407"/>
         <source>Ctrl+U</source>
         <comment>Look Up References For Selection</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="392"/>
+        <location filename="../widgets/main_window.cpp" line="408"/>
         <source>Look up references to class or method under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="397"/>
+        <location filename="../widgets/main_window.cpp" line="413"/>
         <source>&Preferences</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="399"/>
+        <location filename="../widgets/main_window.cpp" line="415"/>
         <source>Ctrl+,</source>
         <comment>Show configuration dialog</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="401"/>
+        <location filename="../widgets/main_window.cpp" line="417"/>
         <source>Show configuration dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="407"/>
+        <location filename="../widgets/main_window.cpp" line="423"/>
         <source>Open &Help Browser</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="408"/>
+        <location filename="../widgets/main_window.cpp" line="424"/>
         <source>Open help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="413"/>
+        <location filename="../widgets/main_window.cpp" line="429"/>
         <source>Look Up Documentation for Cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="414"/>
+        <location filename="../widgets/main_window.cpp" line="430"/>
         <source>Ctrl+D</source>
         <comment>Look Up Documentation for Cursor</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="415"/>
+        <location filename="../widgets/main_window.cpp" line="431"/>
         <source>Look up documentation for text under cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="420"/>
+        <location filename="../widgets/main_window.cpp" line="436"/>
         <source>Look Up Documentation...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="421"/>
+        <location filename="../widgets/main_window.cpp" line="437"/>
         <source>Ctrl+Shift+D</source>
         <comment>Look Up Documentation</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="422"/>
+        <location filename="../widgets/main_window.cpp" line="438"/>
         <source>Enter text to look up in documentation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="427"/>
+        <location filename="../widgets/main_window.cpp" line="443"/>
         <source>&About SuperCollider</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="432"/>
+        <location filename="../widgets/main_window.cpp" line="448"/>
         <source>About &Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="439"/>
+        <location filename="../widgets/main_window.cpp" line="455"/>
         <source>Show/hide Post docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="445"/>
+        <location filename="../widgets/main_window.cpp" line="461"/>
         <source>Show/hide Documents docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="451"/>
+        <location filename="../widgets/main_window.cpp" line="467"/>
         <source>Show/hide Help browser docklet</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="461"/>
+        <location filename="../widgets/main_window.cpp" line="494"/>
         <source>&File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="464"/>
+        <location filename="../widgets/main_window.cpp" line="497"/>
         <source>Open Recent</source>
         <comment>Open a recent document</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="481"/>
+        <location filename="../widgets/main_window.cpp" line="514"/>
         <source>&Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="484"/>
+        <location filename="../widgets/main_window.cpp" line="517"/>
         <source>&Open Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="495"/>
+        <location filename="../widgets/main_window.cpp" line="528"/>
         <source>&Edit</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="519"/>
+        <location filename="../widgets/main_window.cpp" line="552"/>
         <source>&View</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="520"/>
+        <location filename="../widgets/main_window.cpp" line="553"/>
         <source>&Docklets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="526"/>
+        <location filename="../widgets/main_window.cpp" line="559"/>
         <source>&Tool Panels</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="554"/>
+        <location filename="../widgets/main_window.cpp" line="587"/>
         <source>&Language</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="577"/>
+        <location filename="../widgets/main_window.cpp" line="610"/>
         <source>&Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="697"/>
+        <location filename="../widgets/main_window.cpp" line="730"/>
         <source>Save Current Session</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="698"/>
+        <location filename="../widgets/main_window.cpp" line="731"/>
         <source>Enter a name for the session:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="827"/>
+        <location filename="../widgets/main_window.cpp" line="860"/>
         <source>Booting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="834"/>
+        <location filename="../widgets/main_window.cpp" line="867"/>
         <source>Active</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="878"/>
-        <location filename="../widgets/main_window.cpp" line="910"/>
+        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="943"/>
         <source>SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="879"/>
+        <location filename="../widgets/main_window.cpp" line="912"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to save it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="911"/>
+        <location filename="../widgets/main_window.cpp" line="944"/>
         <source>There are unsaved changes in document '%1'.
 
 Do you want to reload it?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="938"/>
+        <location filename="../widgets/main_window.cpp" line="971"/>
         <source>Saving read-only file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="939"/>
+        <location filename="../widgets/main_window.cpp" line="972"/>
         <source>File is read-only. Please select a new location to save to.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="950"/>
+        <location filename="../widgets/main_window.cpp" line="983"/>
         <source>SuperCollider Document (*.scd)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="951"/>
+        <location filename="../widgets/main_window.cpp" line="984"/>
         <source>SuperCollider Class file (*.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="953"/>
-        <location filename="../widgets/main_window.cpp" line="1002"/>
+        <location filename="../widgets/main_window.cpp" line="986"/>
+        <location filename="../widgets/main_window.cpp" line="1035"/>
         <source>All files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1003"/>
+        <location filename="../widgets/main_window.cpp" line="1036"/>
         <source>SuperCollider (*.scd *.sc)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1004"/>
+        <location filename="../widgets/main_window.cpp" line="1037"/>
         <source>SCDoc (*.schelp)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1148"/>
+        <location filename="../widgets/main_window.cpp" line="1181"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1274"/>
+        <location filename="../widgets/main_window.cpp" line="1311"/>
         <source>About SuperCollider IDE</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1356"/>
+        <location filename="../widgets/main_window.cpp" line="1393"/>
         <source>Look up Documentation For</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1405"/>
+        <location filename="../widgets/main_window.cpp" line="1448"/>
         <source>Open binary file?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/main_window.cpp" line="1406"/>
+        <location filename="../widgets/main_window.cpp" line="1449"/>
         <source>
 
 The file has an unrecognized extension. It may be a binary file. Would you still like to open it?</source>
@@ -1554,7 +1554,7 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostDocklet</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="294"/>
+        <location filename="../widgets/post_window.cpp" line="304"/>
         <source>Post window</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1562,68 +1562,68 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::PostWindow</name>
     <message>
-        <location filename="../widgets/post_window.cpp" line="64"/>
+        <location filename="../widgets/post_window.cpp" line="65"/>
         <source>Post Window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="66"/>
+        <location filename="../widgets/post_window.cpp" line="67"/>
         <source>Copy</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="74"/>
+        <location filename="../widgets/post_window.cpp" line="75"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="75"/>
+        <location filename="../widgets/post_window.cpp" line="76"/>
         <source>Clear post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="77"/>
+        <location filename="../widgets/post_window.cpp" line="78"/>
         <source>Ctrl+Shift+P</source>
         <comment>Clear post window</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="86"/>
+        <location filename="../widgets/post_window.cpp" line="87"/>
         <source>Enlarge Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="88"/>
+        <location filename="../widgets/post_window.cpp" line="89"/>
         <source>Enlarge post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="92"/>
+        <location filename="../widgets/post_window.cpp" line="93"/>
         <source>Shrink Font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="94"/>
+        <location filename="../widgets/post_window.cpp" line="95"/>
         <source>Shrink post window font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="102"/>
+        <location filename="../widgets/post_window.cpp" line="103"/>
         <source>Wrap Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="103"/>
+        <location filename="../widgets/post_window.cpp" line="104"/>
         <source>Wrap lines wider than the post window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="109"/>
+        <location filename="../widgets/post_window.cpp" line="110"/>
         <source>Auto Scroll</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/post_window.cpp" line="110"/>
+        <location filename="../widgets/post_window.cpp" line="111"/>
         <source>Scroll to bottom on new posts</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1631,17 +1631,17 @@ The file has an unrecognized extension. It may be a binary file. Would you still
 <context>
     <name>ScIDE::ReferencesDialog</name>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="431"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="425"/>
         <source>Look Up References</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="433"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="427"/>
         <source>Enter class or method name...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../widgets/lookup_dialog.cpp" line="469"/>
+        <location filename="../widgets/lookup_dialog.cpp" line="463"/>
         <source>Introspection data not yet available</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1656,13 +1656,13 @@ The file has an unrecognized extension. It may be a binary file. Would you still
     <message>
         <location filename="../core/sc_process.cpp" line="67"/>
         <location filename="../core/sc_process.cpp" line="71"/>
-        <location filename="../core/sc_process.cpp" line="265"/>
+        <location filename="../core/sc_process.cpp" line="266"/>
         <source>Boot Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../core/sc_process.cpp" line="75"/>
-        <location filename="../core/sc_process.cpp" line="248"/>
+        <location filename="../core/sc_process.cpp" line="249"/>
         <source>Quit Interpreter</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1694,29 +1694,29 @@ The file has an unrecognized extension. It may be a binary file. Would you still
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="113"/>
+        <location filename="../core/sc_process.cpp" line="114"/>
         <source>Interpreter is already running.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="146"/>
+        <location filename="../core/sc_process.cpp" line="147"/>
         <source>Failed to start interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="152"/>
-        <location filename="../core/sc_process.cpp" line="163"/>
-        <location filename="../core/sc_process.cpp" line="210"/>
+        <location filename="../core/sc_process.cpp" line="153"/>
+        <location filename="../core/sc_process.cpp" line="164"/>
+        <location filename="../core/sc_process.cpp" line="211"/>
         <source>Interpreter is not running!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="181"/>
+        <location filename="../core/sc_process.cpp" line="182"/>
         <source>Failed to stop interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../core/sc_process.cpp" line="217"/>
+        <location filename="../core/sc_process.cpp" line="218"/>
         <source>Error when passing data to interpreter!</source>
         <translation type="unfinished"></translation>
     </message>
diff --git a/editors/sc-ide/widgets/code_editor/editor.cpp b/editors/sc-ide/widgets/code_editor/editor.cpp
index 738419f..082a306 100644
--- a/editors/sc-ide/widgets/code_editor/editor.cpp
+++ b/editors/sc-ide/widgets/code_editor/editor.cpp
@@ -34,6 +34,7 @@
 #include <QTextBlock>
 #include <QTextDocumentFragment>
 #include <QUrl>
+#include <QMimeData>
 #include <QScrollBar>
 
 namespace ScIDE {
@@ -46,6 +47,8 @@ GenericCodeEditor::GenericCodeEditor( Document *doc, QWidget *parent ):
 
     setFrameShape( QFrame::NoFrame );
 
+    viewport()->setAttribute( Qt::WA_MacNoClickThrough, true );
+
     mLineIndicator = new LineIndicator(this);
     mLineIndicator->move( contentsRect().topLeft() );
 
@@ -539,6 +542,20 @@ void GenericCodeEditor::keyPressEvent(QKeyEvent * e)
 
 void GenericCodeEditor::wheelEvent( QWheelEvent * e )
 {
+    // FIXME: Disable zooming for now, to avoid nasty effect when Ctrl
+    // is unintentionally pressed while inertial scrolling is going on.
+
+    // Moreover, Ctrl|Shift + Wheel scrolls by pages, which is also
+    // rather annoying.
+
+    // So rather just forward the event without modifiers.
+
+    QWheelEvent modifiedEvent( e->pos(), e->globalPos(), e->delta(),
+                               e->buttons(), 0, e->orientation() );
+    QPlainTextEdit::wheelEvent( &modifiedEvent );
+    return;
+
+#if 0
     if (e->modifiers() == Qt::ControlModifier) {
         if (e->delta() > 0)
             zoomIn();
@@ -548,6 +565,7 @@ void GenericCodeEditor::wheelEvent( QWheelEvent * e )
     }
 
     QPlainTextEdit::wheelEvent(e);
+#endif
 }
 
 void GenericCodeEditor::dragEnterEvent( QDragEnterEvent * event )
diff --git a/editors/sc-ide/widgets/code_editor/highlighter.cpp b/editors/sc-ide/widgets/code_editor/highlighter.cpp
index 1550ca8..2f889c7 100644
--- a/editors/sc-ide/widgets/code_editor/highlighter.cpp
+++ b/editors/sc-ide/widgets/code_editor/highlighter.cpp
@@ -156,7 +156,7 @@ void SyntaxHighlighter::highlightBlockInCode(ScLexer & lexer)
         {
             Token token(tokenType, tokenPosition, tokenLength);
             if (token.length == 1)
-                token.character = lexer.text()[tokenPosition].toAscii();
+                token.character = lexer.text()[tokenPosition].toLatin1();
             blockData->tokens.push_back( token );
         }
 
diff --git a/editors/sc-ide/widgets/help_browser.cpp b/editors/sc-ide/widgets/help_browser.cpp
index 0a77619..d69cd44 100644
--- a/editors/sc-ide/widgets/help_browser.cpp
+++ b/editors/sc-ide/widgets/help_browser.cpp
@@ -333,6 +333,27 @@ void HelpBrowser::onContextMenuRequest( const QPoint & pos )
     menu.exec( mWebView->mapToGlobal(pos) );
 }
 
+QString HelpBrowser::symbolUnderCursor()
+{
+    return mWebView->selectedText();
+    // FIXME: should parse out word under cursor if no selection
+}
+
+bool HelpBrowser::openDocumentation()
+{
+    return Main::openDocumentation(symbolUnderCursor());
+}
+
+void HelpBrowser::openDefinition()
+{
+    return Main::openDefinition(symbolUnderCursor(), window());
+}
+
+void HelpBrowser::findReferences()
+{
+    return Main::findReferences(symbolUnderCursor(), window());
+}
+
 HelpBrowserFindBox::HelpBrowserFindBox( QWidget * parent ):
     QLineEdit(parent)
 {
diff --git a/editors/sc-ide/widgets/help_browser.hpp b/editors/sc-ide/widgets/help_browser.hpp
index 0e0f883..19d2976 100644
--- a/editors/sc-ide/widgets/help_browser.hpp
+++ b/editors/sc-ide/widgets/help_browser.hpp
@@ -107,6 +107,9 @@ public slots:
     void zoomOut();
     void evaluateSelection();
     void findText( const QString & text, bool backwards = false );
+    bool openDocumentation();
+    void openDefinition();
+    void findReferences();
 
 signals:
     void urlChanged();
@@ -124,6 +127,7 @@ private:
     void createActions();
     bool eventFilter( QObject * object, QEvent * event);
     void sendRequest( const QString &code );
+    QString symbolUnderCursor();
 
     QWebView *mWebView;
     LoadProgressIndicator *mLoadProgressIndicator;
diff --git a/editors/sc-ide/widgets/lookup_dialog.cpp b/editors/sc-ide/widgets/lookup_dialog.cpp
index 22fad14..fac7145 100644
--- a/editors/sc-ide/widgets/lookup_dialog.cpp
+++ b/editors/sc-ide/widgets/lookup_dialog.cpp
@@ -35,14 +35,6 @@
 
 namespace ScIDE {
 
-bool LookupDialogTreeView::openDocumentation()
-{
-    GenericLookupDialog * parent = qobject_cast<GenericLookupDialog*>(parentWidget());
-    parent->openDocumentation();
-
-    return true;
-}
-
 GenericLookupDialog::GenericLookupDialog( QWidget * parent ):
     QDialog(parent)
 {
@@ -50,7 +42,7 @@ GenericLookupDialog::GenericLookupDialog( QWidget * parent ):
 
     mQueryEdit = new QLineEdit(this);
 
-    mResult = new LookupDialogTreeView(this);
+    mResult = new QTreeView(this);
     mResult->setRootIsDecorated(false);
     mResult->setAllColumnsShowFocus(true);
     mResult->setHeaderHidden(true);
@@ -83,28 +75,30 @@ GenericLookupDialog::GenericLookupDialog( QWidget * parent ):
     mQueryEdit->setFocus( Qt::OtherFocusReason );
 }
 
-void GenericLookupDialog::openDocumentation()
+bool GenericLookupDialog::openDocumentation()
 {
     QModelIndex currentIndex = mResult->currentIndex();
     QStandardItemModel * model = qobject_cast<QStandardItemModel*>(mResult->model());
     if (!model)
-        return;
+        return true;
 
     currentIndex = currentIndex.sibling(currentIndex.row(), 0);
     QStandardItem *currentItem = model->itemFromIndex(currentIndex);
     if (!currentItem)
-        return;
+        return true;
 
     bool isClass = currentItem->data(IsClassRole).toBool();
     if (isClass) {
         Main::openDocumentation(currentItem->text());
-        return;
+        return true;
     } else {
         QString className  = currentItem->data(ClassNameRole).toString();
         QString methodName = currentItem->data(MethodNameRole).toString();
         Main::openDocumentationForMethod(className, methodName);
     }
     accept();
+
+    return true;
 }
 
 void GenericLookupDialog::onAccepted(QModelIndex currentIndex)
diff --git a/editors/sc-ide/widgets/lookup_dialog.hpp b/editors/sc-ide/widgets/lookup_dialog.hpp
index 9b45bbf..58e90d0 100644
--- a/editors/sc-ide/widgets/lookup_dialog.hpp
+++ b/editors/sc-ide/widgets/lookup_dialog.hpp
@@ -30,17 +30,6 @@
 
 namespace ScIDE {
 
-class LookupDialogTreeView : public QTreeView
-{
-    Q_OBJECT
-
-public:
-    LookupDialogTreeView(QWidget * parent): QTreeView(parent) {}
-
-public Q_SLOTS:
-    bool openDocumentation();
-};
-
 class GenericLookupDialog: public QDialog
 {
     Q_OBJECT
@@ -57,7 +46,7 @@ public:
     void clearQuery() { mQueryEdit->clear(); }
 
 public Q_SLOTS:
-    void openDocumentation();
+    bool openDocumentation();
 
 protected Q_SLOTS:
     virtual void onAccepted(QModelIndex);
@@ -76,7 +65,7 @@ protected:
                                                  QString const & className, QString const & methodName,
                                                  bool isClassItem);
 
-    LookupDialogTreeView *mResult;
+    QTreeView *mResult;
     QLineEdit *mQueryEdit;
 };
 
diff --git a/editors/sc-ide/widgets/main_window.cpp b/editors/sc-ide/widgets/main_window.cpp
index 6e3a8d9..d5081e5 100644
--- a/editors/sc-ide/widgets/main_window.cpp
+++ b/editors/sc-ide/widgets/main_window.cpp
@@ -42,9 +42,12 @@
 #include "settings/dialog.hpp"
 
 #include "SC_DirUtils.h"
+#include "SC_Version.hpp"
 
 #include <QAction>
 #include <QApplication>
+#include <QDesktopServices>
+#include <QDesktopWidget>
 #include <QFileDialog>
 #include <QFileInfo>
 #include <QGridLayout>
@@ -57,9 +60,26 @@
 #include <QStatusBar>
 #include <QVBoxLayout>
 #include <QUrl>
+#include <QMimeData>
+#include <QMetaMethod>
 
 namespace ScIDE {
 
+static QWidget * findFirstResponder
+( QWidget *widget, const char * methodSignature, int & methodIndex )
+{
+    methodIndex = -1;
+    while ( widget ) {
+        methodIndex = widget->metaObject()->indexOfMethod( methodSignature );
+        if (methodIndex != -1)
+            break;
+        if (widget->isWindow())
+            break;
+        widget = widget->parentWidget();
+    }
+    return widget;
+}
+
 MainWindow * MainWindow::mInstance = 0;
 
 MainWindow::MainWindow(Main * main) :
@@ -247,6 +267,12 @@ void MainWindow::createActions()
     connect(action, SIGNAL(triggered()), this, SLOT(openStartupFile()));
     settings->addAction( action, "ide-document-open-startup", ideCategory);
 
+    mActions[DocOpenSupportDir] = action = new QAction(
+        QIcon::fromTheme("document-open"), tr("Open user support directory"), this);
+    action->setStatusTip(tr("Open user support directory"));
+    connect(action, SIGNAL(triggered()), this, SLOT(openUserSupportDirectory()));
+    settings->addAction( action, "ide-document-open-support-directory", ideCategory);
+
     mActions[DocSave] = action = new QAction(
         QIcon::fromTheme("document-save"), tr("&Save"), this);
     action->setShortcut(tr("Ctrl+S", "Save document"));
@@ -403,28 +429,32 @@ void MainWindow::createActions()
     settings->addAction( action, "ide-settings-dialog", ideCategory);
 
     // Help
-    mActions[Help] = action = new QAction(
-        QIcon::fromTheme("system-help"), tr("Open &Help Browser"), this);
-    action->setStatusTip(tr("Open help"));
+    mActions[Help] = action = new QAction(tr("Show &Help Browser"), this);
+    action->setStatusTip(tr("Show and focus the Help Browser"));
     connect(action, SIGNAL(triggered()), this, SLOT(openHelp()));
-    settings->addAction( action, "help-show", helpCategory);
+    settings->addAction( action, "help-browser", helpCategory);
 
-    mActions[LookupDocumentationForCursor] = action = new QAction(
-        QIcon::fromTheme("system-help"), tr("Look Up Documentation for Cursor"), this);
+    mActions[HelpAboutIDE]  = action =
+            new QAction(QIcon::fromTheme("system-help"), tr("How to Use SuperCollider IDE"), this);
+    action->setStatusTip(tr("Open the SuperCollider IDE guide"));
+    connect(action, SIGNAL(triggered()), this, SLOT(openHelpAboutIDE()));
+
+    mActions[LookupDocumentationForCursor] = action =
+            new QAction(tr("Look Up Documentation for Cursor"), this);
     action->setShortcut(tr("Ctrl+D", "Look Up Documentation for Cursor"));
     action->setStatusTip(tr("Look up documentation for text under cursor"));
     connect(action, SIGNAL(triggered()), this, SLOT(lookupDocumentationForCursor()));
     settings->addAction( action, "help-lookup-for-cursor", helpCategory);
 
-    mActions[LookupDocumentation] = action = new QAction(
-        QIcon::fromTheme("system-help"), tr("Look Up Documentation..."), this);
+    mActions[LookupDocumentation] = action =
+            new QAction(tr("Look Up Documentation..."), this);
     action->setShortcut(tr("Ctrl+Shift+D", "Look Up Documentation"));
     action->setStatusTip(tr("Enter text to look up in documentation"));
     connect(action, SIGNAL(triggered()), this, SLOT(lookupDocumentation()));
     settings->addAction( action, "help-lookup", helpCategory);
 
     mActions[ShowAbout] = action = new QAction(
-        QIcon::fromTheme("show-about"), tr("&About SuperCollider"), this);
+        QIcon::fromTheme("help-about"), tr("&About SuperCollider"), this);
     connect(action, SIGNAL(triggered()), this, SLOT(showAbout()));
     settings->addAction( action, "ide-about", ideCategory);
 
@@ -451,6 +481,23 @@ void MainWindow::createActions()
     action->setStatusTip(tr("Show/hide Help browser docklet"));
     settings->addAction( mHelpBrowserDocklet->toggleViewAction(),
                          "ide-docklet-help", ideCategory );
+
+    // Add actions to docklets, so shortcuts work when docklets detached:
+
+    mPostDocklet->widget()->addAction(mActions[LookupDocumentation]);
+    mPostDocklet->widget()->addAction(mActions[LookupDocumentationForCursor]);
+    mPostDocklet->widget()->addAction(mActions[LookupImplementation]);
+    mPostDocklet->widget()->addAction(mActions[LookupImplementationForCursor]);
+    mPostDocklet->widget()->addAction(mActions[LookupReferences]);
+    mPostDocklet->widget()->addAction(mActions[LookupReferencesForCursor]);
+
+    mHelpBrowserDocklet->widget()->addAction(mActions[LookupDocumentation]);
+    mHelpBrowserDocklet->widget()->addAction(mActions[LookupDocumentationForCursor]);
+    mHelpBrowserDocklet->widget()->addAction(mActions[LookupImplementation]);
+    mHelpBrowserDocklet->widget()->addAction(mActions[LookupImplementationForCursor]);
+    mHelpBrowserDocklet->widget()->addAction(mActions[LookupReferences]);
+    mHelpBrowserDocklet->widget()->addAction(mActions[LookupReferencesForCursor]);
+
 }
 
 void MainWindow::createMenus()
@@ -465,6 +512,7 @@ void MainWindow::createMenus()
     connect(mRecentDocsMenu, SIGNAL(triggered(QAction*)),
             this, SLOT(onRecentDocAction(QAction*)));
     menu->addAction( mActions[DocOpenStartup] );
+    menu->addAction( mActions[DocOpenSupportDir] );
     menu->addAction( mActions[DocSave] );
     menu->addAction( mActions[DocSaveAs] );
     menu->addAction( mActions[DocSaveAll] );
@@ -575,6 +623,8 @@ void MainWindow::createMenus()
     menuBar()->addMenu(menu);
 
     menu = new QMenu(tr("&Help"), this);
+    menu->addAction( mActions[HelpAboutIDE] );
+    menu->addSeparator();
     menu->addAction( mActions[Help] );
     menu->addAction( mActions[LookupDocumentationForCursor] );
     menu->addAction( mActions[LookupDocumentation] );
@@ -584,6 +634,10 @@ void MainWindow::createMenus()
 
     menuBar()->addMenu(menu);
 
+    mLangStatus->addAction( mMain->scProcess()->action(ScProcess::ToggleRunning) );
+    mLangStatus->addAction( mMain->scProcess()->action(ScProcess::Restart) );
+    mLangStatus->addAction( mMain->scProcess()->action(ScProcess::RecompileClassLibrary) );
+
     mServerStatus->addAction( mMain->scServer()->action(ScServer::ToggleRunning) );
     mServerStatus->addAction( mMain->scServer()->action(ScServer::Reboot) );
     mServerStatus->addAction( mMain->scServer()->action(ScServer::ShowMeters) );
@@ -959,14 +1013,15 @@ bool MainWindow::save( Document *doc, bool forceChoose )
         }else{
             QString fp = doc->filePath();
             if(fp.endsWith(".scd"))
-                dialog.setFilter(filters[0]);
+                dialog.setNameFilter(filters[0]);
             else if(fp.endsWith(".sc"))
-                dialog.setFilter(filters[1]);
+                dialog.setNameFilter(filters[1]);
             else if(fp.endsWith(".schelp"))
-                dialog.setFilter(filters[2]);
+                dialog.setNameFilter(filters[2]);
             else
-                dialog.setFilter(filters[3]);
+                dialog.setNameFilter(filters[3]);
             dialog.selectFile(fp);
+
         }
 
         if (dialog.exec() == QDialog::Accepted)
@@ -1040,6 +1095,15 @@ void MainWindow::openStartupFile()
     mMain->documentManager()->open( filePath );
 }
 
+void MainWindow::openUserSupportDirectory()
+{
+    char appSupportDir[PATH_MAX];
+    sc_GetUserAppSupportDirectory(appSupportDir, PATH_MAX);
+
+    QUrl dirUrl = QUrl::fromLocalFile(QString(appSupportDir));
+    QDesktopServices::openUrl(dirUrl);
+}
+
 void MainWindow::saveDocument()
 {
     GenericCodeEditor *editor = mEditors->currentEditor();
@@ -1195,31 +1259,35 @@ void MainWindow::openSession(const QString &sessionName)
 
 void MainWindow::lookupImplementationForCursor()
 {
-    QWidget * focussedWidget = QApplication::focusWidget();
+    static const QByteArray signature = QMetaObject::normalizedSignature("openDefinition()");
 
-    int indexOfMethod = focussedWidget->metaObject()->indexOfMethod("openDefinition()");
-    if (indexOfMethod != -1)
-        QMetaObject::invokeMethod( focussedWidget, "openDefinition", Qt::DirectConnection );
+    int methodIdx = -1;
+    QWidget * widget = findFirstResponder(
+                QApplication::focusWidget(), signature.constData(), methodIdx );
+    if (widget && methodIdx != -1)
+        widget->metaObject()->method(methodIdx).invoke( widget, Qt::DirectConnection );
 }
 
 void MainWindow::lookupImplementation()
 {
-    LookupDialog dialog(mEditors);
+    LookupDialog dialog( QApplication::activeWindow() );
     dialog.exec();
 }
 
 void MainWindow::lookupReferencesForCursor()
 {
-    QWidget * focussedWidget = QApplication::focusWidget();
+    static const QByteArray signature = QMetaObject::normalizedSignature("findReferences()");
 
-    int indexOfMethod = focussedWidget->metaObject()->indexOfMethod("findReferences()");
-    if (indexOfMethod != -1)
-        QMetaObject::invokeMethod( focussedWidget, "findReferences", Qt::DirectConnection );
+    int methodIdx = -1;
+    QWidget * widget = findFirstResponder(
+                QApplication::focusWidget(), signature.constData(), methodIdx );
+    if (widget && methodIdx != -1)
+        widget->metaObject()->method(methodIdx).invoke( widget, Qt::DirectConnection );
 }
 
 void MainWindow::lookupReferences()
 {
-    ReferencesDialog dialog(parentWidget());
+    ReferencesDialog dialog( QApplication::activeWindow() );
     dialog.exec();
 }
 
@@ -1269,7 +1337,7 @@ void MainWindow::showAbout()
             "© Jakob Leben, Tim Blechmann and others.<br>"
             "Development partially funded by Kiberpipa."
             ;
-    aboutString = aboutString.arg("3.6");
+    aboutString = aboutString.arg(SC_VersionString().c_str());
 
     QMessageBox::about(this, tr("About SuperCollider IDE"), aboutString);
 }
@@ -1353,7 +1421,8 @@ void MainWindow::showSettings()
 
 void MainWindow::lookupDocumentation()
 {
-    PopupTextInput * dialog = new PopupTextInput(tr("Look up Documentation For"), this);
+    PopupTextInput * dialog = new PopupTextInput(tr("Look up Documentation For"),
+                                                 QApplication::activeWindow());
 
     bool success = dialog->exec();
     if (success)
@@ -1364,14 +1433,19 @@ void MainWindow::lookupDocumentation()
 
 void MainWindow::lookupDocumentationForCursor()
 {
-    QWidget * focussedWidget = QApplication::focusWidget();
+    static const QByteArray signature = QMetaObject::normalizedSignature("openDocumentation()");
 
     bool documentationOpened = false;
+    QWidget * widget = QApplication::focusWidget();
+    int methodIdx = -1;
+
+    widget = findFirstResponder( widget, signature.constData(), methodIdx );
 
-    int indexOfMethod = focussedWidget->metaObject()->indexOfMethod("openDocumentation()");
-    if (indexOfMethod != -1)
-        QMetaObject::invokeMethod( focussedWidget, "openDocumentation", Qt::DirectConnection,
-                                   Q_RETURN_ARG(bool, documentationOpened) );
+    if (widget && methodIdx != -1) {
+        widget->metaObject()->method(methodIdx).invoke(
+                    widget, Qt::DirectConnection,
+                    Q_RETURN_ARG(bool, documentationOpened) );
+    };
 
     if (!documentationOpened)
         openHelp();
@@ -1384,6 +1458,22 @@ void MainWindow::openHelp()
     mHelpBrowserDocklet->raiseAndFocus();
 }
 
+void MainWindow::openHelpAboutIDE()
+{
+    mHelpBrowserDocklet->browser()->gotoHelpFor("Guides/SCIde");
+
+    mHelpBrowserDocklet->setDetached(true);
+
+    QRect availableGeometry = QApplication::desktop()->availableGeometry(mHelpBrowserDocklet->window());
+    QRect geometry;
+    geometry.setWidth( qMin(700, availableGeometry.width()) );
+    geometry.setHeight( availableGeometry.height() - 150 );
+    geometry.moveCenter( availableGeometry.center() );
+
+    mHelpBrowserDocklet->window()->setGeometry( geometry );
+    mHelpBrowserDocklet->raiseAndFocus();
+}
+
 void MainWindow::dragEnterEvent( QDragEnterEvent * event )
 {
     if (event->mimeData()->hasUrls()) {
@@ -1455,6 +1545,22 @@ void StatusLabel::setTextColor(const QColor & color)
     setPalette(plt);
 }
 
+void StatusLabel::showContextMenu()
+{
+    QList<QAction*> actions = this->actions();
+    if (actions.count()) {
+        QMenu menu;
+        foreach( QAction *action, actions )
+            menu.addAction(action);
+        menu.exec( mapToGlobal(QPoint(0, -menu.sizeHint().height() - 2)) );
+    }
+}
+
+void StatusLabel::mousePressEvent( QMouseEvent * )
+{
+    showContextMenu();
+}
+
 //////////////////////////// StatusClockLabel ////////////////////////////
 
 StatusClockLabel::StatusClockLabel(QWidget * parent):
diff --git a/editors/sc-ide/widgets/main_window.hpp b/editors/sc-ide/widgets/main_window.hpp
index f95d108..db074fa 100644
--- a/editors/sc-ide/widgets/main_window.hpp
+++ b/editors/sc-ide/widgets/main_window.hpp
@@ -58,6 +58,7 @@ public:
         DocNew,
         DocOpen,
         DocOpenStartup,
+        DocOpenSupportDir,
         DocSave,
         DocSaveAs,
         DocSaveAll,
@@ -94,6 +95,7 @@ public:
 
         // Help
         Help,
+        HelpAboutIDE,
         LookupDocumentationForCursor,
         LookupDocumentation,
         ShowAbout,
@@ -128,7 +130,6 @@ public Q_SLOTS:
 
     void newDocument();
     void openDocument();
-    void openStartupFile();
     void saveDocument();
     void saveDocumentAs();
     void saveAllDocuments();
@@ -151,6 +152,9 @@ public Q_SLOTS:
     void showStatusMessage( QString const & string );
 
 private Q_SLOTS:
+    void openStartupFile();
+    void openUserSupportDirectory();
+
     void switchSession( Session *session );
     void saveSession( Session *session );
     void onInterpreterStateChanged( QProcess::ProcessState );
@@ -170,6 +174,7 @@ private Q_SLOTS:
     void lookupReferences();
     void lookupReferencesForCursor();
     void openHelp();
+    void openHelpAboutIDE();
     void lookupDocumentationForCursor();
     void lookupDocumentation();
     void applySettings( Settings::Manager * );
@@ -231,6 +236,9 @@ public:
     StatusLabel(QWidget *parent = 0);
     void setBackground(const QBrush &);
     void setTextColor(const QColor &);
+protected:
+    void showContextMenu();
+    virtual void mousePressEvent( QMouseEvent * );
 };
 
 class StatusClockLabel : public StatusLabel
diff --git a/editors/sc-ide/widgets/multi_editor.cpp b/editors/sc-ide/widgets/multi_editor.cpp
index 0e9d6fb..30031d5 100644
--- a/editors/sc-ide/widgets/multi_editor.cpp
+++ b/editors/sc-ide/widgets/multi_editor.cpp
@@ -393,7 +393,7 @@ void MultiEditor::createActions()
 
     mActions[GotoPreviousRegion] = action = new QAction(
         QIcon::fromTheme("edit-gotopreviousregion"), tr("Go to Previous Region"), this);
-    action->setShortcut(tr("Alt+[", "Go to Previous Region"));
+    action->setShortcut(tr("Ctrl+Alt+[", "Go to Previous Region"));
     action->setShortcutContext(Qt::WidgetWithChildrenShortcut);
     mEditorSigMux->connect(action, SIGNAL(triggered()), SLOT(gotoPreviousRegion()),
                            SignalMultiplexer::ConnectionOptional);
@@ -401,7 +401,7 @@ void MultiEditor::createActions()
 
     mActions[GotoNextRegion] = action = new QAction(
         QIcon::fromTheme("edit-gotonextregion"), tr("Go to Next Region"), this);
-    action->setShortcut(tr("Alt+]", "Go to Next Region"));
+    action->setShortcut(tr("Ctrl+Alt+]", "Go to Next Region"));
     action->setShortcutContext(Qt::WidgetWithChildrenShortcut);
     mEditorSigMux->connect(action, SIGNAL(triggered()), SLOT(gotoNextRegion()),
                            SignalMultiplexer::ConnectionOptional);
diff --git a/editors/sc-ide/widgets/post_window.cpp b/editors/sc-ide/widgets/post_window.cpp
index f0e720b..0e464f2 100644
--- a/editors/sc-ide/widgets/post_window.cpp
+++ b/editors/sc-ide/widgets/post_window.cpp
@@ -34,6 +34,7 @@
 #include <QShortcut>
 #include <QKeyEvent>
 #include <QTextDocumentFragment>
+#include <QMimeData>
 
 namespace ScIDE {
 
@@ -44,6 +45,8 @@ PostWindow::PostWindow(QWidget* parent):
     setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
     setFrameShape( QFrame::NoFrame );
 
+    viewport()->setAttribute( Qt::WA_MacNoClickThrough, true );
+
     QRect availableScreenRect = qApp->desktop()->availableGeometry(this);
     mSizeHint = QSize( availableScreenRect.width() * 0.4, availableScreenRect.height() * 0.3 );
 
@@ -239,6 +242,20 @@ bool PostWindow::event( QEvent * event )
 
 void PostWindow::wheelEvent( QWheelEvent * e )
 {
+    // FIXME: Disable zooming for now, to avoid nasty effect when Ctrl
+    // is unintentionally pressed while inertial scrolling is going on.
+
+    // Moreover, Ctrl|Shift + Wheel scrolls by pages, which is also
+    // rather annoying.
+
+    // So rather just forward the event without modifiers.
+
+    QWheelEvent modifiedEvent( e->pos(), e->globalPos(), e->delta(),
+                               e->buttons(), 0, e->orientation() );
+    QPlainTextEdit::wheelEvent( &modifiedEvent );
+    return;
+
+#if 0
     if (e->modifiers() == Qt::ControlModifier) {
         if (e->delta() > 0)
             zoomIn();
@@ -248,6 +265,7 @@ void PostWindow::wheelEvent( QWheelEvent * e )
     }
 
     QPlainTextEdit::wheelEvent(e);
+#endif
 }
 
 void PostWindow::focusOutEvent( QFocusEvent * event )
@@ -285,12 +303,12 @@ bool PostWindow::openDocumentation()
 
 void PostWindow::openDefinition()
 {
-    Main::openDefinition(symbolUnderCursor(), MainWindow::instance());
+    Main::openDefinition(symbolUnderCursor(), window());
 }
 
 void PostWindow::findReferences()
 {
-    Main::findReferences(symbolUnderCursor(), MainWindow::instance());
+    Main::findReferences(symbolUnderCursor(), window());
 }
 
 void PostWindow::setLineWrap(bool lineWrapOn)
diff --git a/editors/sc-ide/widgets/util/docklet.cpp b/editors/sc-ide/widgets/util/docklet.cpp
index fa2233d..81aaa3a 100644
--- a/editors/sc-ide/widgets/util/docklet.cpp
+++ b/editors/sc-ide/widgets/util/docklet.cpp
@@ -169,7 +169,14 @@ void Docklet::toggleFloating()
 
     if (undock) {
         qDebug() << "dock: set geom (toggleFloating):" << undockedGeom << this;
-        mDockWidget->setGeometry( undockedGeom );
+        if (undockedGeom.isNull()) {
+            // Looks like resize or move event does not always occur,
+            // so store the undocked geometry here.
+            mUndockedGeom = mDockWidget->geometry();
+        }
+        else {
+            mDockWidget->setGeometry( undockedGeom );
+        }
     }
 
     updateDockAction();
diff --git a/include/common/SC_Win32Utils.h b/include/common/SC_Win32Utils.h
index c4c30f3..b50c848 100644
--- a/include/common/SC_Win32Utils.h
+++ b/include/common/SC_Win32Utils.h
@@ -25,6 +25,7 @@
 #include <stdio.h>
 #include <winsock2.h>
 #include <pthread.h>
+#include <shlobj.h>
 
 // wrappers for unix replacements
 #define gettimeofday win32_gettimeofday
@@ -42,6 +43,7 @@ void win32_ReplaceCharInString(char* string, int len, char src, char dst);
 void win32_ExtractContainingFolder(char* folder,const char* pattern,int maxChars);
 void win32_synctimes();
 void win32_gettimeofday(timeval* tv, void*);
+void win32_GetKnownFolderPath(int folderId, char *dest, int size);
 void win32_GetHomeFolder(char* homeFolder, int bufLen);
 char* win32_basename(char* path);
 char* win32_dirname(char* path);
diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
index 140f10d..d4e5576 100644
--- a/lang/CMakeLists.txt
+++ b/lang/CMakeLists.txt
@@ -178,7 +178,6 @@ include(../SCDoc/CMakeLists.txt)
 list(APPEND sclang_sources ${SCDOC_SRCS})
 
 if(SC_IDE)
-	add_definitions(-DSC_IDE)
 	list(APPEND sclang_sources ../editors/sc-ide/primitives/sc_ipc_client.cpp)
 endif()
 
@@ -284,6 +283,13 @@ if(SC_QT)
 	target_link_libraries(libsclang ${QT_COLLIDER_LIBS})
 endif()
 
+if(SC_IDE)
+	add_definitions(-DSC_IDE -DQT_NO_KEYWORDS)
+	find_package( Qt4 4.7 REQUIRED QtCore QtNetwork )
+	include( ${QT_USE_FILE} )
+	target_link_libraries( libsclang ${QT_LIBRARIES} )
+endif()
+
 add_executable(sclang LangSource/cmdLineFuncs.cpp)
 
 if (Boost_FOUND)
diff --git a/lang/LangPrimSource/PyrPlatformPrim.cpp b/lang/LangPrimSource/PyrPlatformPrim.cpp
index d0c1069..b7ebccf 100644
--- a/lang/LangPrimSource/PyrPlatformPrim.cpp
+++ b/lang/LangPrimSource/PyrPlatformPrim.cpp
@@ -26,6 +26,9 @@ Primitives for platform dependent directories, constants etc.
 #include "SC_DirUtils.h"
 #include "PyrPrimitive.h"
 #include "PyrKernel.h"
+#ifdef _WIN32
+# include "SC_Win32Utils.h"
+#endif
 
 #define PATH_CONSTANT_PRIM_BODY(func) \
 	PyrSlot *a = g->sp; \
@@ -70,6 +73,18 @@ static int prPlatform_resourceDir(struct VMGlobals *g, int numArgsPushed)
     PATH_CONSTANT_PRIM_BODY(sc_GetResourceDirectory);
 }
 
+#ifdef _WIN32
+static int prWinPlatform_myDocumentsDir(struct VMGlobals *g, int numArgsPushed)
+{
+	PyrSlot *a = g->sp;
+	char path[PATH_MAX];
+	win32_GetKnownFolderPath(CSIDL_PERSONAL, path, PATH_MAX); \
+	PyrString* string = newPyrString(g->gc, path, 0, true); \
+	SetObject(a, string);
+	return errNone;
+}
+#endif
+
 static int prPlatform_ideName(struct VMGlobals *g, int numArgsPushed)
 {
 	PyrSlot *a = g->sp;
@@ -93,6 +108,9 @@ void initPlatformPrimitives()
 	definePrimitive(base, index++, "_Platform_userConfigDir", prPlatform_userConfigDir, 1, 0);
 	definePrimitive(base, index++, "_Platform_resourceDir", prPlatform_resourceDir, 1, 0);
 	definePrimitive(base, index++, "_Platform_ideName", prPlatform_ideName, 1, 0);
+#ifdef _WIN32
+	definePrimitive(base, index++, "_WinPlatform_myDocumentsDir", prWinPlatform_myDocumentsDir, 1, 0);
+#endif
 }
 
 // EOF
diff --git a/lang/LangPrimSource/PyrPrimitive.cpp b/lang/LangPrimSource/PyrPrimitive.cpp
index 40ee654..7a673c5 100644
--- a/lang/LangPrimSource/PyrPrimitive.cpp
+++ b/lang/LangPrimSource/PyrPrimitive.cpp
@@ -47,7 +47,7 @@
 #include "InitAlloc.h"
 #include "../LangSource/SC_LanguageConfig.hpp"
 #include "SC_DirUtils.h"
-
+#include "SC_Version.hpp"
 
 #ifdef SC_WIN32
 # include <direct.h>
@@ -3554,6 +3554,28 @@ static int prLanguageConfig_setPostInlineWarnings(struct VMGlobals * g, int numA
 }
 
 
+static int prVersionMajor(struct VMGlobals * g, int numArgsPushed)
+{
+	PyrSlot *result = g->sp;
+	SetInt(result, SC_VersionMajor);
+	return errNone;
+}
+
+static int prVersionMinor(struct VMGlobals * g, int numArgsPushed)
+{
+	PyrSlot *result = g->sp;
+	SetInt(result, SC_VersionMinor);
+	return errNone;
+}
+
+static int prVersionPatch(struct VMGlobals * g, int numArgsPushed)
+{
+	PyrSlot *result = g->sp;
+	SetObject(result, newPyrString(g->gc, SC_VersionPatch, 0, 1));
+	return errNone;
+}
+
+
 #define PRIMGROWSIZE 480
 PrimitiveTable gPrimitiveTable;
 
@@ -4118,6 +4140,10 @@ void initPrimitives()
 	definePrimitive(base, index++, "_LanguageConfig_getPostInlineWarnings", prLanguageConfig_getPostInlineWarnings, 1, 0);
 	definePrimitive(base, index++, "_LanguageConfig_setPostInlineWarnings", prLanguageConfig_setPostInlineWarnings, 2, 0);
 
+	definePrimitive(base, index++, "_SC_VersionMajor", prVersionMajor, 1, 0);
+	definePrimitive(base, index++, "_SC_VersionMinor", prVersionMinor, 1, 0);
+	definePrimitive(base, index++, "_SC_VersionPatch", prVersionPatch, 1, 0);
+
 	//void initOscilPrimitives();
 	//void initControllerPrimitives();
 
diff --git a/lang/LangSource/PyrLexer.cpp b/lang/LangSource/PyrLexer.cpp
index 23fb74e..e923dc0 100644
--- a/lang/LangSource/PyrLexer.cpp
+++ b/lang/LangSource/PyrLexer.cpp
@@ -2106,6 +2106,8 @@ void shutdownLibrary()
 	compiledOK = false;
 
 	pthread_mutex_unlock (&gLangMutex);
+
+	SC_LanguageConfig::freeLibraryConfig();
 }
 
 SC_DLLEXPORT_C bool compileLibrary()
@@ -2117,7 +2119,7 @@ SC_DLLEXPORT_C bool compileLibrary()
 	gNumCompiledFiles = 0;
 	compiledOK = false;
 
-    SC_LanguageConfig::readDefaultLibraryConfig();
+	SC_LanguageConfig::readLibraryConfig();
 
 	compileStartTime = elapsedTime();
 
diff --git a/lang/LangSource/SC_LanguageConfig.cpp b/lang/LangSource/SC_LanguageConfig.cpp
index a956687..b778743 100644
--- a/lang/LangSource/SC_LanguageConfig.cpp
+++ b/lang/LangSource/SC_LanguageConfig.cpp
@@ -47,6 +47,7 @@
 using namespace std;
 
 SC_LanguageConfig *gLanguageConfig = 0;
+string SC_LanguageConfig::gConfigFile;
 
 static bool findPath( SC_LanguageConfig::DirVector & vec, const char * path, bool addIfMissing)
 {
@@ -259,10 +260,17 @@ static bool file_exists(std::string const & fileName)
 	return file_exists(fileName.c_str());
 }
 
-bool SC_LanguageConfig::readDefaultLibraryConfig()
+bool SC_LanguageConfig::readLibraryConfig()
 {
-	char config_dir[PATH_MAX];
 	bool configured = false;
+
+	if (!gConfigFile.empty() && file_exists(gConfigFile)) {
+		configured = readLibraryConfigYAML(gConfigFile.c_str());
+		if (configured)
+			return true;
+	}
+
+	char config_dir[PATH_MAX];
 	sc_GetUserConfigDirectory(config_dir, PATH_MAX);
 
 	std::string user_yaml_config_file = std::string(config_dir) + SC_PATH_DELIMITER + "sclang_conf.yaml";
diff --git a/lang/LangSource/SC_LanguageConfig.hpp b/lang/LangSource/SC_LanguageConfig.hpp
index 9165f31..c1f9394 100644
--- a/lang/LangSource/SC_LanguageConfig.hpp
+++ b/lang/LangSource/SC_LanguageConfig.hpp
@@ -47,16 +47,22 @@ public:
 	void removeExcludedDirectory(const char *name);
 
 	// convenience functions to access the global library config
+	static void setConfigFile(std::string const & fileName)
+	{
+		gConfigFile = fileName;
+	}
+
 	static bool readLibraryConfigYAML(const char* fileName);
 	static bool writeLibraryConfigYAML(const char* fileName);
 	static void freeLibraryConfig();
 	static bool defaultLibraryConfig(void);
-	static bool readDefaultLibraryConfig();
+	static bool readLibraryConfig();
 
 private:
 	DirVector mIncludedDirectories;
 	DirVector mExcludedDirectories;
 	DirVector mDefaultClassLibraryDirectories;
+	static std::string gConfigFile;
 };
 
 extern SC_LanguageConfig* gLanguageConfig;
diff --git a/lang/LangSource/SC_TerminalClient.cpp b/lang/LangSource/SC_TerminalClient.cpp
index 3fb7131..0f4b877 100644
--- a/lang/LangSource/SC_TerminalClient.cpp
+++ b/lang/LangSource/SC_TerminalClient.cpp
@@ -247,11 +247,10 @@ int SC_TerminalClient::run(int argc, char** argv)
 	opt.mArgv = argv;
 
 	// read library configuration file
-	if (opt.mLibraryConfigFile) {
-		int argLength = strlen(opt.mLibraryConfigFile);
-		SC_LanguageConfig::readLibraryConfigYAML(opt.mLibraryConfigFile);
-	} else
-		SC_LanguageConfig::readDefaultLibraryConfig();
+	if (opt.mLibraryConfigFile)
+		SC_LanguageConfig::setConfigFile(opt.mLibraryConfigFile);
+
+	SC_LanguageConfig::readLibraryConfig();
 
 	// initialize runtime
 	initRuntime(opt);
@@ -390,6 +389,7 @@ void SC_TerminalClient::commandLoop()
 
 		while ( mSignals ) {
 			int sig = mSignals;
+			mSignals = 0;
 
 			unlockSignal();
 
@@ -397,10 +397,6 @@ void SC_TerminalClient::commandLoop()
 				//postfl("input\n");
 				lockInput();
 				interpretInput();
-				// clear input signal, as we've processed anything signalled so far.
-				lockSignal();
-				mSignals &= ~sig_input;
-				unlockSignal();
 				unlockInput();
 			}
 
@@ -409,11 +405,6 @@ void SC_TerminalClient::commandLoop()
 				double secs;
 				lock();
 				haveNext = tickLocked( &secs );
-				// clear scheduler signal, as we've processed all items scheduled up to this time.
-				// and will enter the wait according to schedule.
-				lockSignal();
-				mSignals &= ~sig_sched;
-				unlockSignal();
 				unlock();
 
 				flush();
@@ -424,16 +415,10 @@ void SC_TerminalClient::commandLoop()
 
 			if (sig & sig_stop) {
 				stopMain();
-				lockSignal();
-				mSignals &= ~sig_stop;
-				unlockSignal();
 			}
 
 			if (sig & sig_recompile) {
 				recompileLibrary();
-				lockSignal();
-				mSignals &= ~sig_recompile;
-				unlockSignal();
 			}
 
 			lockSignal();
diff --git a/platform/SCVersion.sc.in b/platform/SCVersion.sc.in
deleted file mode 100644
index bd18968..0000000
--- a/platform/SCVersion.sc.in
+++ /dev/null
@@ -1,7 +0,0 @@
-// Do not edit this file manually, it's configured by CMake. The version numbers are set in SCVersion.txt
-+ Main {
-    *scVersionMajor { ^@PROJECT_VERSION_MAJOR@ }
-    *scVersionMinor { ^@PROJECT_VERSION_MINOR@ }
-    *scVersionPostfix { ^"@PROJECT_VERSION_PATCH@" }
-}
-
diff --git a/server/plugins/BinaryOpUGens.cpp b/server/plugins/BinaryOpUGens.cpp
index 1c29ce2..5da5480 100644
--- a/server/plugins/BinaryOpUGens.cpp
+++ b/server/plugins/BinaryOpUGens.cpp
@@ -2164,7 +2164,7 @@ FLATTEN void div_ka_nova(BinaryOpUGen *unit, int inNumSamples)
 	} else {
 		float slope = CALCSLOPE(next_a, xa);
 		nova::over_vec_simd(OUT(0), slope_argument(xa, slope), IN(1), inNumSamples);
-		unit->mPrevA = xa;
+		unit->mPrevA = next_a;
 	}
 }
 
diff --git a/server/plugins/DelayUGens.cpp b/server/plugins/DelayUGens.cpp
index 30bb5d2..2e9c4c7 100644
--- a/server/plugins/DelayUGens.cpp
+++ b/server/plugins/DelayUGens.cpp
@@ -1239,6 +1239,7 @@ void RecordBuf_Ctor(RecordBuf *unit)
 	unit->m_writepos = (int32)ZIN0(1) * numInputs;
 	unit->m_recLevel = ZIN0(2);
 	unit->m_preLevel = ZIN0(3);
+	unit->m_prevtrig = 0.f;
 
 	if (INRATE(2) == calc_ScalarRate && INRATE(3) == calc_ScalarRate
 		&& unit->m_recLevel == 1.0 && unit->m_preLevel == 0.0)
@@ -1366,7 +1367,7 @@ void RecordBuf_next(RecordBuf *unit, int inNumSamples)
 		}
 		if (run > 0.f) {
 			int nsmps = bufSamples - writepos;
-			nsmps = sc_clip(nsmps, 0, inNumSamples);
+			nsmps = sc_clip(nsmps, 0, inNumSamples * bufChannels);
 			if (bufChannels == 1) {
 				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
@@ -1377,6 +1378,7 @@ void RecordBuf_next(RecordBuf *unit, int inNumSamples)
 					preLevel += preLevel_slope;
 				}
 			} else if (bufChannels == 2 && numInputs == 2) {
+				nsmps = nsmps/2;
 				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					table0[0] = *++(in[0]) * recLevel + table0[0] * preLevel;
@@ -1387,6 +1389,7 @@ void RecordBuf_next(RecordBuf *unit, int inNumSamples)
 					preLevel += preLevel_slope;
 				}
 			} else {
+				nsmps = nsmps/bufChannels;
 				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					for (uint32 i=0; i<numInputs; ++i) {
@@ -1401,9 +1404,9 @@ void RecordBuf_next(RecordBuf *unit, int inNumSamples)
 			}
 		} else if (run < 0.f) {
 			int nsmps = writepos;
-			nsmps = sc_clip(nsmps, 0, inNumSamples);
+			nsmps = sc_clip(nsmps, 0, inNumSamples * bufChannels);
 			if (bufChannels == 1) {
-				for (int32 k=0; k<inNumSamples; ++k) {
+				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					table0[0] = *++(in[0]) * recLevel + table0[0] * preLevel;
 					writepos -= bufChannels;
@@ -1412,7 +1415,8 @@ void RecordBuf_next(RecordBuf *unit, int inNumSamples)
 					preLevel += preLevel_slope;
 				}
 			} else if (bufChannels == 2 && numInputs == 2) {
-				for (int32 k=0; k<inNumSamples; ++k) {
+				nsmps = nsmps/2;
+				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					table0[0] = *++(in[0]) * recLevel + table0[0] * preLevel;
 					table0[1] = *++(in[1]) * recLevel + table0[1] * preLevel;
@@ -1422,7 +1426,8 @@ void RecordBuf_next(RecordBuf *unit, int inNumSamples)
 					preLevel += preLevel_slope;
 				}
 			} else {
-				for (int32 k=0; k<inNumSamples; ++k) {
+				nsmps = nsmps/bufChannels;
+				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					for (uint32 i=0; i<numInputs; ++i) {
 						float *samp = table0 + i;
@@ -1529,7 +1534,7 @@ void RecordBuf_next_10(RecordBuf *unit, int inNumSamples)
 		}
 		if (run > 0.f) {
 			int nsmps = bufSamples - writepos;
-			nsmps = sc_clip(nsmps, 0, inNumSamples);
+			nsmps = sc_clip(nsmps, 0, inNumSamples * bufChannels);
 			if (bufChannels == 1) {
 				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
@@ -1537,14 +1542,15 @@ void RecordBuf_next_10(RecordBuf *unit, int inNumSamples)
 					writepos += 1;
 				}
 			} else if (bufChannels == 2) {
+				nsmps = nsmps/2;
 				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					table0[0] = *++(in[0]);
 					table0[1] = *++(in[1]);
 					writepos += 2;
-					if (writepos >= (int32)bufSamples) writepos = (int32)bufSamples - 2; // added by jrhb
 				}
 			} else {
+				nsmps = nsmps/bufChannels;
 				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					for (uint32 i=0; i<bufChannels; ++i) {
@@ -1552,27 +1558,28 @@ void RecordBuf_next_10(RecordBuf *unit, int inNumSamples)
 						*samp = *++(in[i]);
 					}
 					writepos += bufChannels;
-					if (writepos >= (int32)bufSamples) writepos = (int32)bufSamples - bufChannels; // added by jrhb
 				}
 			}
 		} else if (run < 0.f) {
 			int nsmps = writepos;
-			nsmps = sc_clip(nsmps, 0, inNumSamples);
+			nsmps = sc_clip(nsmps, 0, inNumSamples * bufChannels);
 			if (bufChannels == 1) {
-				for (int32 k=0; k<inNumSamples; ++k) {
+				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					table0[0] = *++(in[0]);
 					writepos -= 1;
 				}
 			} else if (bufChannels == 2) {
-				for (int32 k=0; k<inNumSamples; ++k) {
+				nsmps = nsmps/2;
+				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					table0[0] = *++(in[0]);
 					table0[1] = *++(in[1]);
 					writepos -= 2;
 				}
 			} else {
-				for (int32 k=0; k<inNumSamples; ++k) {
+				nsmps = nsmps/bufChannels;
+				for (int32 k=0; k<nsmps; ++k) {
 					float* table0 = bufData + writepos;
 					for (uint32 i=0; i<bufChannels; ++i) {
 						float *samp = table0 + i;
@@ -1582,6 +1589,7 @@ void RecordBuf_next_10(RecordBuf *unit, int inNumSamples)
 				}
 			}
 		}
+
 		if (writepos >= (int32)bufSamples){
 			unit->mDone = true;
 			DoneAction(IN0(7), unit);
diff --git a/server/plugins/GrainUGens.cpp b/server/plugins/GrainUGens.cpp
index 12f5a6b..e2ebbe6 100644
--- a/server/plugins/GrainUGens.cpp
+++ b/server/plugins/GrainUGens.cpp
@@ -1081,12 +1081,10 @@ void GrainFM_Dtor(GrainFM *unit)
 
 static inline bool GrainBuf_grain_cleanup(GrainBuf * unit, GrainBufG * grain)
 {
-	if (grain->counter <= 0)
-	{
+	if (grain->counter <= 0) {
 		*grain = unit->mGrains[--unit->mNumActive]; // remove grain
 		return true;
-	}
-	else
+	} else
 		return false;
 }
 
@@ -1172,10 +1170,6 @@ static inline void GrainBuf_next_start_new(GrainBuf *unit, int inNumSamples, int
 	float bufRateScale = bufSampleRate * SAMPLEDUR;
 	double loopMax = (double)bufFrames;
 
-	double counter = grain_in_at<full_rate>(unit, 1, position) * SAMPLERATE;
-	counter = sc_max(4., counter);
-	grain->counter = (int)counter;
-
 	double rate = grain->rate = grain_in_at<full_rate>(unit, 3, position) * bufRateScale;
 	double phase = grain_in_at<full_rate>(unit, 4, position) * bufFrames;
 	if (sc_isnan(phase)) {
@@ -1183,6 +1177,10 @@ static inline void GrainBuf_next_start_new(GrainBuf *unit, int inNumSamples, int
 		return;
 	}
 
+	double counter = grain_in_at<full_rate>(unit, 1, position) * SAMPLERATE;
+	counter = sc_max(4., counter);
+	grain->counter = (int)counter;
+
 	grain->interp = (int)grain_in_at<full_rate>(unit, 5, position);
 	grain->winType = winType;
 
diff --git a/server/plugins/IOUGens.cpp b/server/plugins/IOUGens.cpp
index 0c29a13..2ce878f 100644
--- a/server/plugins/IOUGens.cpp
+++ b/server/plugins/IOUGens.cpp
@@ -393,14 +393,10 @@ void LagControl_Dtor(LagControl* unit)
 
 //////////////////////////////////////////////////////////////////////////////////////////////////
 
-#ifdef NOVA_SIMD
-FLATTEN void In_next_a_nova(IOUnit *unit, int inNumSamples)
-{
-	World *world = unit->mWorld;
-	int bufLength = world->mBufLength;
-	int numChannels = unit->mNumOutputs;
 
-	float fbusChannel = ZIN0(0);
+static inline void IO_a_update_channels(IOUnit * unit, World * world, float fbusChannel,
+										int numChannels, int bufLength)
+{
 	if (fbusChannel != unit->m_fbusChannel) {
 		unit->m_fbusChannel = fbusChannel;
 		int busChannel = (uint32)fbusChannel;
@@ -411,19 +407,71 @@ FLATTEN void In_next_a_nova(IOUnit *unit, int inNumSamples)
 			unit->m_busTouched = world->mAudioBusTouched + busChannel;
 		}
 	}
+}
+
+template <bool LockShared>
+struct AudioBusGuard
+{
+	AudioBusGuard(const Unit * unit, int32 currentChannel, int32 maxChannel):
+		unit(unit),
+		mCurrentChannel(currentChannel),
+		isValid(currentChannel < maxChannel)
+	{
+		if (isValid)
+			lock();
+	}
+
+	~AudioBusGuard()
+	{
+		if (isValid)
+			unlock();
+	}
+
+	void lock()
+	{
+		if (LockShared)
+			ACQUIRE_BUS_AUDIO_SHARED(mCurrentChannel);
+		else
+			ACQUIRE_BUS_AUDIO(mCurrentChannel);
+	}
+
+	void unlock()
+	{
+		if (LockShared)
+			RELEASE_BUS_AUDIO_SHARED(mCurrentChannel);
+		else
+			RELEASE_BUS_AUDIO(mCurrentChannel);
+	}
+
+	const Unit * unit;
+	const int32 mCurrentChannel;
+	const bool isValid;
+};
+
+#ifdef NOVA_SIMD
+FLATTEN void In_next_a_nova(IOUnit *unit, int inNumSamples)
+{
+	World *world = unit->mWorld;
+	int bufLength = world->mBufLength;
+	int numChannels = unit->mNumOutputs;
+
+	float fbusChannel = ZIN0(0);
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *in = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
 
 	for (int i=0; i<numChannels; ++i, in += bufLength) {
-		ACQUIRE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
+		AudioBusGuard<true> guard (unit, fbusChannel + i, maxChannel);
+
 		float *out = OUT(i);
-		if (touched[i] == bufCounter)
+
+		if (guard.isValid && (touched[i] == bufCounter))
 			nova::copyvec_simd(out, in, inNumSamples);
 		else
 			nova::zerovec_simd(out, inNumSamples);
-		RELEASE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
 	}
 }
 
@@ -434,29 +482,21 @@ FLATTEN void In_next_a_nova_64(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumOutputs;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		int busChannel = (uint32)fbusChannel;
-		int lastChannel = busChannel + numChannels;
-
-		if (!(busChannel < 0 || lastChannel > (int)world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *in = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
 
 	for (int i=0; i<numChannels; ++i, in += bufLength) {
-		ACQUIRE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
+		AudioBusGuard<true> guard (unit, fbusChannel + i, maxChannel);
+
 		float *out = OUT(i);
-		if (touched[i] == bufCounter)
+		if (guard.isValid && (touched[i] == bufCounter))
 			nova::copyvec_simd<64>(out, in);
 		else
 			nova::zerovec_simd<64>(out);
-		RELEASE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
 	}
 }
 
@@ -469,27 +509,19 @@ void In_next_a(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumOutputs;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *in = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
 
 	for (int i=0; i<numChannels; ++i, in += bufLength) {
-		ACQUIRE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
+		AudioBusGuard<true> guard (unit, fbusChannel + i, maxChannel);
+
 		float *out = OUT(i);
-		if (touched[i] == bufCounter) Copy(inNumSamples, out, in);
+		if (guard.isValid && (touched[i] == bufCounter)) Copy(inNumSamples, out, in);
 		else Fill(inNumSamples, out, 0.f);
-		RELEASE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
 	}
 }
 
@@ -501,37 +533,27 @@ void vIn_next_a(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumOutputs;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		int busChannel = (uint32)fbusChannel;
-		int lastChannel = busChannel + numChannels;
-
-		if (!(busChannel < 0 || lastChannel > (int)world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *in = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
 
 	for (int i=0; i<numChannels; ++i, in += bufLength) {
-		ACQUIRE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
+		AudioBusGuard<true> guard (unit, fbusChannel + i, maxChannel);
+
 		float *out = OUT(i);
-		if (touched[i] == bufCounter)
-		{
+		if (guard.isValid && (touched[i] == bufCounter))
 			vcopy(out, in, inNumSamples);
-		}
 		else
-		{
 			vfill(out, 0.f, inNumSamples);
-		}
-		RELEASE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
 	}
 }
 #endif
 
+// FIXME: add safety checks for control bus access
+
 void In_next_k(IOUnit *unit, int inNumSamples)
 {
 //Print("->In_next_k\n");
@@ -561,7 +583,7 @@ void In_Ctor(IOUnit* unit)
 {
 //Print("->In_Ctor\n");
 	World *world = unit->mWorld;
-	unit->m_fbusChannel = -1.;
+	unit->m_fbusChannel = std::numeric_limits<float>::quiet_NaN();
 
 	if (unit->mCalcRate == calc_FullRate) {
 #ifdef NOVA_SIMD
@@ -672,28 +694,22 @@ void InFeedback_next_a(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumOutputs;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *in = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
 
 	for (int i=0; i<numChannels; ++i, in += bufLength) {
-		ACQUIRE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
+		AudioBusGuard<true> guard (unit, fbusChannel + i, maxChannel);
+
 		float *out = OUT(i);
 		int diff = bufCounter - touched[i];
-		if (diff == 1 || diff == 0) Copy(inNumSamples, out, in);
-		else Fill(inNumSamples, out, 0.f);
-		RELEASE_BUS_AUDIO_SHARED((int32)fbusChannel + i);
+		if (guard.isValid && (diff == 1 || diff == 0))
+			Copy(inNumSamples, out, in);
+		else
+			Fill(inNumSamples, out, 0.f);
 	}
 }
 
@@ -766,29 +782,25 @@ void ReplaceOut_next_a(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		float *in = IN(i+1);
-		Copy(inNumSamples, out, in);
-		touched[i] = bufCounter;
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			Copy(inNumSamples, out, in);
+			touched[i] = bufCounter;
+		}
 	}
 }
 
+// FIXME: guard control bus & prevent buffer overflow
 void ReplaceOut_next_k(IOUnit *unit, int inNumSamples)
 {
 	World *world = unit->mWorld;
@@ -826,26 +838,21 @@ FLATTEN void ReplaceOut_next_a_nova(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		float *in = IN(i+1);
-		nova::copyvec_simd(out, in, inNumSamples);
-		touched[i] = bufCounter;
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			nova::copyvec_simd(out, in, inNumSamples);
+			touched[i] = bufCounter;
+		}
 	}
 }
 
@@ -856,26 +863,21 @@ FLATTEN void ReplaceOut_next_a_nova_64(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		float *in = IN(i+1);
-		nova::copyvec_simd<64>(out, in);
-		touched[i] = bufCounter;
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			nova::copyvec_simd<64>(out, in);
+			touched[i] = bufCounter;
+		}
 	}
 }
 
@@ -914,30 +916,24 @@ void Out_next_a(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		float *in = IN(i+1);
-		if (touched[i] == bufCounter) Accum(inNumSamples, out, in);
-		else {
-			Copy(inNumSamples, out, in);
-			touched[i] = bufCounter;
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			if (touched[i] == bufCounter) Accum(inNumSamples, out, in);
+			else {
+				Copy(inNumSamples, out, in);
+				touched[i] = bufCounter;
+			}
 		}
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
-		//Print("out %d %g %g\n", i, in[0], out[0]);
 	}
 }
 
@@ -952,34 +948,23 @@ void vOut_next_a(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		int busChannel = (int)fbusChannel;
-		int lastChannel = busChannel + numChannels;
-
-		if (!(busChannel < 0 || lastChannel > (int)world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
 	int32 bufCounter = unit->mWorld->mBufCounter;
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		float *in = IN(i+1);
-		if (touched[i] == bufCounter)
-		{
-			vadd(out, out, in, inNumSamples);
-		}
-		else
-		{
-			vcopy(out, in, inNumSamples);
-			touched[i] = bufCounter;
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			if (touched[i] == bufCounter) {
+				vadd(out, out, in, inNumSamples);
+			} else {
+				vcopy(out, in, inNumSamples);
+				touched[i] = bufCounter;
+			}
 		}
-		//Print("out %d %g %g\n", i, in[0], out[0]);
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
 	}
 }
 #endif
@@ -988,37 +973,30 @@ void vOut_next_a(IOUnit *unit, int inNumSamples)
 #ifdef NOVA_SIMD
 FLATTEN void Out_next_a_nova(IOUnit *unit, int inNumSamples)
 {
-	//Print("Out_next_a %d\n", unit->mNumInputs);
 	World *world = unit->mWorld;
 	int bufLength = world->mBufLength;
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		int busChannel = (int)fbusChannel;
-		int lastChannel = busChannel + numChannels;
-
-		if (!(busChannel < 0 || lastChannel > (int)world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		float *in = IN(i+1);
-		if (touched[i] == bufCounter)
-			nova::addvec_simd(out, in, inNumSamples);
-		else {
-			nova::copyvec_simd(out, in, inNumSamples);
-			touched[i] = bufCounter;
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			if (touched[i] == bufCounter)
+				nova::addvec_simd(out, in, inNumSamples);
+			else {
+				nova::copyvec_simd(out, in, inNumSamples);
+				touched[i] = bufCounter;
+			}
 		}
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
-		//Print("out %d %g %g\n", i, in[0], out[0]);
 	}
 }
 
@@ -1030,31 +1008,25 @@ FLATTEN void Out_next_a_nova_64(IOUnit *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		int busChannel = (int)fbusChannel;
-		int lastChannel = busChannel + numChannels;
-
-		if (!(busChannel < 0 || lastChannel > (int)world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength) {
-		float *in = IN(i+1);
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-		if (touched[i] == bufCounter)
-			nova::addvec_simd<64>(out, in);
-		else {
-			nova::copyvec_simd<64>(out, in);
-			touched[i] = bufCounter;
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+		if (guard.isValid) {
+			float *in = IN(i+1);
+			if (touched[i] == bufCounter)
+				nova::addvec_simd<64>(out, in);
+			else {
+				nova::copyvec_simd<64>(out, in);
+				touched[i] = bufCounter;
+			}
 		}
-		//Print("out %d %g %g\n", i, in[0], out[0]);
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
 	}
 }
 #endif
@@ -1135,78 +1107,76 @@ void XOut_next_a(XOut *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 2;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float next_xfade = ZIN0(1);
 	float xfade0 = unit->m_xfade;
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	if (xfade0 != next_xfade) {
 		float slope = CALCSLOPE(next_xfade, xfade0);
 		for (int i=0; i<numChannels; ++i) {
-			ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-			float xfade = xfade0;
-			float *in = IN(i+2);
-			if (touched[i] == bufCounter) {
-				LOOP1(inNumSamples,
-					float zin = *in;
-					float zout = *out;
+			AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+			if (guard.isValid) {
+				float xfade = xfade0;
+				float *in = IN(i+2);
+				if (touched[i] == bufCounter) {
+					LOOP1(inNumSamples,
+						  float zin = *in;
+							float zout = *out;
 					*out = zout + xfade * (zin - zout);
 					//if (xxi==0) Print("x %d %d %g %g %g %g\n", bufCounter, i, zin, zout, xfade, *out);
 					xfade += slope;
 					++out; ++in;
-				);
-			} else {
-				LOOP1(inNumSamples,
-					float zin = *in;
-					*out = xfade * zin;
+					);
+				} else {
+					LOOP1(inNumSamples,
+						  float zin = *in;
+							*out = xfade * zin;
 					xfade += slope;
 					++out; ++in;
-				);
-				touched[i] = bufCounter;
+					);
+					touched[i] = bufCounter;
+				}
 			}
-			RELEASE_BUS_AUDIO((int32)fbusChannel + i);
 		}
 	} else if (xfade0 == 1.f) {
 		for (int i=0; i<numChannels; ++i, out+=bufLength) {
-			ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-			float *in = IN(i+2);
-			Copy(inNumSamples, out, in);
-			touched[i] = bufCounter;
-			RELEASE_BUS_AUDIO((int32)fbusChannel + i);
+			AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+			if (guard.isValid) {
+				float *in = IN(i+2);
+				Copy(inNumSamples, out, in);
+				touched[i] = bufCounter;
+			}
 		}
 	} else if (xfade0 == 0.f) {
 		// do nothing.
 	} else {
 		for (int i=0; i<numChannels; ++i) {
-			ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-			float *in = IN(i+2);
-			if (touched[i] == bufCounter) {
-				LOOP1(inNumSamples,
-					float zin = *in;
-					float zout = *out;
+			AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+			if (guard.isValid) {
+				float *in = IN(i+2);
+				if (touched[i] == bufCounter) {
+					LOOP1(inNumSamples,
+						  float zin = *in;
+							float zout = *out;
 					*out = zout + xfade0 * (zin - zout);
 					++out; ++in;
-				);
-			} else {
-				LOOP1(inNumSamples,
-					float zin = *in;
-					*out = xfade0 * zin;
+					);
+				} else {
+					LOOP1(inNumSamples,
+						  float zin = *in;
+							*out = xfade0 * zin;
 					++out; ++in;
-				);
-				touched[i] = bufCounter;
+					);
+					touched[i] = bufCounter;
+				}
 			}
-			RELEASE_BUS_AUDIO((int32)fbusChannel + i);
 		}
 	}
 	unit->m_xfade = next_xfade;
@@ -1220,58 +1190,56 @@ FLATTEN void XOut_next_a_nova(XOut *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 2;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	float next_xfade = ZIN0(1);
 	float xfade0 = unit->m_xfade;
 	float *out = unit->m_bus;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	if (xfade0 != next_xfade) {
 		float slope = CALCSLOPE(next_xfade, xfade0);
 		for (int i=0; i<numChannels; ++i) {
-			float xfade = xfade0;
-			float *in = IN(i+2);
-			ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-			if (touched[i] == bufCounter)
-				nova::mix_vec_simd(out, out, slope_argument(1-xfade0, -slope), in, slope_argument(xfade0, slope), inNumSamples);
-			else {
-				nova::times_vec_simd(out, in, slope_argument(xfade, slope), inNumSamples);
-				touched[i] = bufCounter;
+			AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+			if (guard.isValid) {
+				float xfade = xfade0;
+				float *in = IN(i+2);
+				if (touched[i] == bufCounter)
+					nova::mix_vec_simd(out, out, slope_argument(1-xfade0, -slope), in, slope_argument(xfade0, slope), inNumSamples);
+				else {
+					nova::times_vec_simd(out, in, slope_argument(xfade, slope), inNumSamples);
+					touched[i] = bufCounter;
+				}
 			}
-			RELEASE_BUS_AUDIO((int32)fbusChannel + i);
 		}
 		unit->m_xfade = next_xfade;
 	} else if (xfade0 == 1.f) {
 		for (int i=0; i<numChannels; ++i, out+=bufLength) {
-			float *in = IN(i+2);
-			ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-			nova::copyvec_simd(out, in, inNumSamples);
-			touched[i] = bufCounter;
-			RELEASE_BUS_AUDIO((int32)fbusChannel + i);
+			AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
+			if (guard.isValid) {
+				float *in = IN(i+2);
+				nova::copyvec_simd(out, in, inNumSamples);
+				touched[i] = bufCounter;
+			}
 		}
 	} else if (xfade0 == 0.f) {
 		// do nothing.
 	} else {
 		for (int i=0; i<numChannels; ++i) {
-			float *in = IN(i+2);
-			ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
-			if (touched[i] == bufCounter)
-				nova::mix_vec_simd(out, out, 1-xfade0, in, xfade0, inNumSamples);
-			else {
-				nova::times_vec_simd(out, in, xfade0, inNumSamples);
-				touched[i] = bufCounter;
+			AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+			if (guard.isValid) {
+				float *in = IN(i+2);
+				if (touched[i] == bufCounter)
+					nova::mix_vec_simd(out, out, 1-xfade0, in, xfade0, inNumSamples);
+				else {
+					nova::times_vec_simd(out, in, xfade0, inNumSamples);
+					touched[i] = bufCounter;
+				}
 			}
-			RELEASE_BUS_AUDIO((int32)fbusChannel + i);
 		}
 	}
 }
@@ -1347,16 +1315,7 @@ void OffsetOut_next_a(OffsetOut *unit, int inNumSamples)
 	int numChannels = unit->mNumInputs - 1;
 
 	float fbusChannel = ZIN0(0);
-	if (fbusChannel != unit->m_fbusChannel) {
-		unit->m_fbusChannel = fbusChannel;
-		uint32 busChannel = (uint32)fbusChannel;
-		uint32 lastChannel = busChannel + numChannels;
-
-		if (!(lastChannel > world->mNumAudioBusChannels)) {
-			unit->m_bus = world->mAudioBus + (busChannel * bufLength);
-			unit->m_busTouched = world->mAudioBusTouched + busChannel;
-		}
-	}
+	IO_a_update_channels(unit, world, fbusChannel, numChannels, bufLength);
 
 	int32 offset = unit->mParent->mSampleOffset;
 	int32 remain = BUFLENGTH - offset;
@@ -1364,33 +1323,39 @@ void OffsetOut_next_a(OffsetOut *unit, int inNumSamples)
 	float *out = unit->m_bus;
 	float *saved = unit->m_saved;
 	int32 *touched = unit->m_busTouched;
-	int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 bufCounter = unit->mWorld->mBufCounter;
+	const int32 maxChannel = world->mNumAudioBusChannels;
+
 	for (int i=0; i<numChannels; ++i, out+=bufLength, saved += offset) {
-		ACQUIRE_BUS_AUDIO((int32)fbusChannel + i);
+		AudioBusGuard<false> guard (unit, fbusChannel + i, maxChannel);
+
 		float *in = IN(i+1);
 		//Print("out %d  %d %d  %d %d\n",
 		//	i, touched[i] == bufCounter, unit->m_empty,
 		//	offset, remain);
 
-		if (touched[i] == bufCounter) {
-			if (unit->m_empty) {
-				//Print("touched offset %d\n", offset);
-			} else {
-				Accum(offset, out, saved);
-			}
-			Accum(remain, out + offset, in);
-		} else {
-			if (unit->m_empty) {
-				Clear(offset, out);
-				//Print("untouched offset %d\n", offset);
+		if (guard.isValid) {
+			if (touched[i] == bufCounter) {
+				if (unit->m_empty) {
+					//Print("touched offset %d\n", offset);
+				} else {
+					Accum(offset, out, saved);
+				}
+				Accum(remain, out + offset, in);
 			} else {
-				Copy(offset, out, saved);
+				if (unit->m_empty) {
+					Clear(offset, out);
+					//Print("untouched offset %d\n", offset);
+				} else {
+					Copy(offset, out, saved);
+				}
+				Copy(remain, out + offset, in);
+				touched[i] = bufCounter;
 			}
-			Copy(remain, out + offset, in);
-			touched[i] = bufCounter;
 		}
+
 		Copy(offset, saved, in + remain);
-		RELEASE_BUS_AUDIO((int32)fbusChannel + i);
+
 		//Print("out %d %d %d  %g %g\n", i, in[0], out[0]);
 	}
 	unit->m_empty = false;
diff --git a/server/plugins/OscUGens.cpp b/server/plugins/OscUGens.cpp
index bc533ba..9d30fcf 100644
--- a/server/plugins/OscUGens.cpp
+++ b/server/plugins/OscUGens.cpp
@@ -343,21 +343,21 @@ void Klank_next(Klank *unit, int inNumSamples);
 			uint32 bufnum = (uint32)fbufnum; \
 			World *world = unit->mWorld; \
 			if (bufnum >= world->mNumSndBufs) { \
-			int localBufNum = bufnum - world->mNumSndBufs; \
-			Graph *parent = unit->mParent; \
-			if(localBufNum <= parent->localBufNum) { \
-				unit->m_buf = parent->mLocalSndBufs + localBufNum; \
+				uint32 localBufNum = bufnum - world->mNumSndBufs; \
+				Graph *parent = unit->mParent; \
+				if(localBufNum <= parent->localBufNum) { \
+					unit->m_buf = parent->mLocalSndBufs + localBufNum; \
+				} else { \
+					bufnum = 0; \
+					unit->m_buf = world->mSndBufs + bufnum; \
+				} \
 			} else { \
-				bufnum = 0; \
 				unit->m_buf = world->mSndBufs + bufnum; \
 			} \
-		} else { \
-			unit->m_buf = world->mSndBufs + bufnum; \
-		} \
-		unit->m_fbufnum = fbufnum; \
+			unit->m_fbufnum = fbufnum; \
 		} \
 		const SndBuf *buf = unit->m_buf; \
-        if(!buf) { \
+		if(!buf) { \
 			ClearUnitOutputs(unit, inNumSamples); \
 			return; \
 		} \
@@ -390,7 +390,7 @@ void TableLookup_SetTable(TableLookup* unit, int32 inSize, float* inTable)
 
 void DegreeToKey_Ctor(DegreeToKey *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(DegreeToKey_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -653,7 +653,7 @@ void TWindex_next_ak(TWindex *unit, int inNumSamples)
 
 void Index_Ctor(Index *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(Index_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -717,7 +717,7 @@ void Index_next_a(Index *unit, int inNumSamples)
 
 void IndexL_Ctor(IndexL *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(IndexL_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -800,7 +800,7 @@ void IndexL_next_a(IndexL *unit, int inNumSamples)
 
 void FoldIndex_Ctor(FoldIndex *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(FoldIndex_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -863,7 +863,7 @@ void FoldIndex_next_a(FoldIndex *unit, int inNumSamples)
 
 void WrapIndex_Ctor(WrapIndex *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(WrapIndex_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -939,7 +939,7 @@ static float IndexInBetween_FindIndex(const float* table, float in, int32 maxind
 
 void IndexInBetween_Ctor(IndexInBetween *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(IndexInBetween_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -1009,7 +1009,7 @@ static int32 DetectIndex_FindIndex(const float* table, float in, int32 maxindex)
 
 void DetectIndex_Ctor(DetectIndex *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(DetectIndex_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -1096,7 +1096,7 @@ void DetectIndex_next_a(DetectIndex *unit, int inNumSamples)
 
 void Shaper_Ctor(Shaper *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(Shaper_next_1);
 	} else if (INRATE(1) == calc_FullRate) {
@@ -1195,7 +1195,7 @@ void Shaper_next_a(Shaper *unit, int inNumSamples)
 
 void SigOsc_Ctor(SigOsc *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	if (BUFLENGTH == 1) {
 		SETCALC(SigOsc_next_1);
 	} else if (INRATE(0) == calc_FullRate) {
@@ -2154,7 +2154,7 @@ void OscN_next_nak(OscN *unit, int inNumSamples)
 
 void COsc_Ctor(COsc *unit)
 {
-	unit->m_fbufnum = -1e9f;
+	unit->m_fbufnum = std::numeric_limits<float>::quiet_NaN();
 	SETCALC(COsc_next);
 	unit->m_phase1 = 0;
 	unit->m_phase2 = 0;
diff --git a/server/plugins/UIUGens.cpp b/server/plugins/UIUGens.cpp
index 42deacb..b26a518 100644
--- a/server/plugins/UIUGens.cpp
+++ b/server/plugins/UIUGens.cpp
@@ -148,6 +148,10 @@ void* gstate_update_func(void* arg)
 	requested_time.tv_sec = 0;
 	requested_time.tv_nsec = 17000 * 1000;
 
+	// NOTE: should not be required as this is the only thread accessing the x11 API
+	//       but omitting seems to cause troubles.
+	XInitThreads();
+
 	d = XOpenDisplay ( NULL );
 	if (!d) return 0;
 
diff --git a/server/supernova/audio_backend/jack_backend.hpp b/server/supernova/audio_backend/jack_backend.hpp
index 62ed97e..16ddf64 100644
--- a/server/supernova/audio_backend/jack_backend.hpp
+++ b/server/supernova/audio_backend/jack_backend.hpp
@@ -53,7 +53,7 @@ class jack_backend:
 
 public:
     jack_backend(void):
-        client(NULL), time_is_synced(false)
+        client(NULL), is_active(false), time_is_synced(false)
     {}
 
     ~jack_backend(void)
@@ -151,8 +151,10 @@ public:
 
     void deactivate_audio(void)
     {
-        jack_deactivate(client);
-        is_active = false;
+        if (is_active) {
+            jack_deactivate(client);
+            is_active = false;
+        }
     }
 
     void get_cpuload(float & peak, float & average) const
diff --git a/server/supernova/audio_backend/sndfile_backend.hpp b/server/supernova/audio_backend/sndfile_backend.hpp
index 1ecfeea..466c42e 100644
--- a/server/supernova/audio_backend/sndfile_backend.hpp
+++ b/server/supernova/audio_backend/sndfile_backend.hpp
@@ -93,7 +93,7 @@ public:
 
         super::output_samples.resize(output_channel_count);
 
-        temp_buffer.reset(calloc_aligned<float>(std::max(input_channels, output_channels) * 64));
+        temp_buffer.reset(calloc_aligned<float>(std::max(input_channels, output_channels) * block_size));
 
     }
 
diff --git a/server/supernova/sc/sc_osc_handler.cpp b/server/supernova/sc/sc_osc_handler.cpp
index e0341e7..2db0d41 100644
--- a/server/supernova/sc/sc_osc_handler.cpp
+++ b/server/supernova/sc/sc_osc_handler.cpp
@@ -238,6 +238,29 @@ void send_done_message(nova_endpoint const & endpoint, const char * cmd, osc::in
     instance->send(p.Data(), p.Size(), endpoint);
 }
 
+void send_fail_message(nova_endpoint const & endpoint, const char * cmd, const char * content)
+{
+    char buffer[8192];
+    osc::OutboundPacketStream p(buffer, 8192);
+    p << osc::BeginMessage("/fail")
+      << cmd << content
+      << osc::EndMessage;
+
+    instance->send(p.Data(), p.Size(), endpoint);
+}
+
+void send_fail_message(nova_endpoint const & endpoint, const char * cmd, const char * content, int id)
+{
+    char buffer[8192];
+    osc::OutboundPacketStream p(buffer, 8192);
+    p << osc::BeginMessage("/fail")
+      << cmd << content << (osc::int32)id
+      << osc::EndMessage;
+
+    instance->send(p.Data(), p.Size(), endpoint);
+}
+
+
 template <typename Functor>
 struct fn_system_callback:
     public system_callback
@@ -330,6 +353,18 @@ struct cmd_dispatcher<false>
     }
 };
 
+void report_failure(nova_endpoint const & endpoint, std::exception const & error, const char * command)
+{
+    std::cout << error.what() << std::endl;
+    send_fail_message(endpoint, command, error.what());
+}
+
+void report_failure(nova_endpoint const & endpoint, std::exception const & error, const char * command, int bufnum)
+{
+    std::cout << error.what() << std::endl;
+    send_fail_message(endpoint, command, error.what(), bufnum);
+}
+
 } /* namespace */
 
 namespace detail {
@@ -340,7 +375,24 @@ void fire_notification(movable_array<char> & msg)
     instance->send_notification(msg.data(), msg.size());
 }
 
-void sc_notify_observers::notify(const char * address_pattern, const server_node * node)
+const char * sc_notify_observers::error_string(error_code error)
+{
+    switch (error) {
+    case no_error:
+        return "";
+
+    case already_registered:
+        return "notify: already registered";
+
+    case not_registered:
+        return "notify: not registered";
+
+    default:
+        assert(false);
+    }
+}
+
+void sc_notify_observers::notify(const char * address_pattern, const server_node * node) const
 {
     char buffer[128]; // 128 byte should be enough
     osc::OutboundPacketStream p(buffer, 128);
@@ -767,10 +819,16 @@ void handle_notify(received_message const & message, nova_endpoint const & endpo
     int enable = first_arg_as_int(message);
 
     cmd_dispatcher<realtime>::fire_system_callback( [=]() {
-        if (enable)
-            instance->add_observer(endpoint);
-        else
-            instance->remove_observer(endpoint);
+        if (enable) {
+            auto error_code = instance->add_observer(endpoint);
+            if (error_code)
+                send_fail_message(endpoint, "/notify", sc_notify_observers::error_string(error_code));
+        } else {
+            auto error_code = instance->remove_observer(endpoint);
+            if (error_code)
+                send_fail_message(endpoint, "/notify", sc_notify_observers::error_string(error_code));
+        }
+
         send_done_message(endpoint, "/notify");
     });
 }
@@ -1455,14 +1513,17 @@ void handle_n_before_or_after(received_message const & msg)
         osc::int32 node_a, node_b;
         args >> node_a >> node_b;
 
-        server_node * a = find_node(node_a);
-        if (!a) continue;
+        server_node * node = find_node(node_a);
+        if (!node) continue;
 
-        server_node * b = find_node(node_b);
-        if (!b) continue;
+        server_node * target_node = find_node(node_b);
+        if (!target_node) continue;
 
-        abstract_group::move_before_or_after<Relation>(a, b);
+        abstract_group::move_before_or_after<Relation>(node, target_node);
+        instance->notification_node_moved(node);
     }
+
+    instance->update_dsp_queue();
 }
 
 
@@ -1483,7 +1544,9 @@ void handle_g_head_or_tail(received_message const & msg)
         if (!target_group) continue;
 
         abstract_group::move_to_head_or_tail<Position>(node, target_group);
+        instance->notification_node_moved(node);
     }
+    instance->update_dsp_queue();
 }
 
 
@@ -1524,8 +1587,7 @@ void handle_n_order(received_message const & msg)
         return;
 
     abstract_group * target_parent;
-    if (action == before ||
-        action == after)
+    if (action == before || action == after)
         target_parent = target->get_parent();
     else {
         if (target->is_synth())
@@ -1533,8 +1595,7 @@ void handle_n_order(received_message const & msg)
         target_parent = static_cast<abstract_group*>(target);
     }
 
-    while (!args.Eos())
-    {
+    while (!args.Eos()) {
         osc::int32 node_id;
         args >> node_id;
 
@@ -1551,6 +1612,8 @@ void handle_n_order(received_message const & msg)
             target_parent->add_child(node, make_pair(target, node_position(action)));
         else
             target_parent->add_child(node, node_position(action));
+
+        instance->notification_node_moved(node);
     }
     instance->update_dsp_queue();
 }
@@ -1827,12 +1890,16 @@ void b_alloc_2_rt(uint32_t index, completion_message & msg, sample * free_buf, n
 void b_alloc_3_nrt(uint32_t index, sample * free_buf, nova_endpoint const & endpoint);
 
 template <bool realtime>
-void b_alloc_1_nrt(uint32_t index, uint32_t frames, uint32_t channels, completion_message & msg, nova_endpoint const & endpoint)
+void b_alloc_1_nrt(uint32_t bufnum, uint32_t frames, uint32_t channels, completion_message & msg, nova_endpoint const & endpoint)
 {
-    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(index));
-    sample * free_buf = sc_factory->get_nrt_mirror_buffer(index);
-    sc_factory->allocate_buffer(index, frames, channels);
-    cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_alloc_2_rt<realtime>, index, msg, free_buf, endpoint));
+    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(bufnum));
+    try {
+        sample * free_buf = sc_factory->get_nrt_mirror_buffer(bufnum);
+        sc_factory->allocate_buffer(bufnum, frames, channels);
+        cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_alloc_2_rt<realtime>, bufnum, msg, free_buf, endpoint));
+    } catch (std::exception const & error) {
+        report_failure(endpoint, error, "/b_alloc", bufnum);
+    }
 }
 
 template <bool realtime>
@@ -1918,16 +1985,17 @@ void b_allocRead_2_rt(uint32_t index, completion_message & msg, sample * free_bu
 void b_allocRead_3_nrt(uint32_t index, sample * free_buf, nova_endpoint const & endpoint);
 
 template <bool realtime>
-void b_allocRead_1_nrt(uint32_t index, movable_string & filename, uint32_t start, uint32_t frames, completion_message & msg,
+void b_allocRead_1_nrt(uint32_t bufnum, movable_string & filename, uint32_t start, uint32_t frames, completion_message & msg,
                        nova_endpoint const & endpoint)
 {
-    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(index));
-    sample * free_buf = sc_factory->get_nrt_mirror_buffer(index);
-    int error = sc_factory->buffer_read_alloc(index, filename.c_str(), start, frames);
-    if (!error)
-        cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_allocRead_2_rt<realtime>, index, msg, free_buf, endpoint));
-    else
-        /* post nice error message */;
+    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(bufnum));
+    sample * free_buf = sc_factory->get_nrt_mirror_buffer(bufnum);
+    try {
+        sc_factory->buffer_read_alloc(bufnum, filename.c_str(), start, frames);
+        cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_allocRead_2_rt<realtime>, bufnum, msg, free_buf, endpoint));
+    } catch (std::exception const & error) {
+        report_failure(endpoint, error, "/b_allocRead", bufnum);
+    }
 }
 
 template <bool realtime>
@@ -1972,38 +2040,42 @@ void handle_b_allocRead(received_message const & msg, nova_endpoint const & endp
 }
 
 template <bool realtime>
-void b_allocReadChannel_2_rt(uint32_t index, completion_message & msg, sample * free_buf,
+void b_allocReadChannel_2_rt(uint32_t bufnum, completion_message & msg, sample * free_buf,
                              nova_endpoint const & endpoint);
-void b_allocReadChannel_3_nrt(uint32_t index, sample * free_buf, nova_endpoint const & endpoint);
+void b_allocReadChannel_3_nrt(uint32_t bufnum, sample * free_buf, nova_endpoint const & endpoint);
 
 template <bool realtime>
-void b_allocReadChannel_1_nrt(uint32_t index, movable_string const & filename, uint32_t start, uint32_t frames,
+void b_allocReadChannel_1_nrt(uint32_t bufnum, movable_string const & filename, uint32_t start, uint32_t frames,
                               movable_array<uint32_t> const & channels, completion_message & msg,
                               nova_endpoint const & endpoint)
 {
-    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(index));
-    sample * free_buf = sc_factory->get_nrt_mirror_buffer(index);
-    int error = sc_factory->buffer_alloc_read_channels(index, filename.c_str(), start, frames,
-                                                        channels.size(), channels.data());
-    if (!error)
+    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(bufnum));
+    sample * free_buf = sc_factory->get_nrt_mirror_buffer(bufnum);
+
+    try {
+        sc_factory->buffer_alloc_read_channels(bufnum, filename.c_str(), start, frames, channels.size(), channels.data());
+
         cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_allocReadChannel_2_rt<realtime>,
-                                                               index, msg, free_buf, endpoint));
+                                                             bufnum, msg, free_buf, endpoint));
+    } catch (std::exception const & error) {
+        report_failure(endpoint, error, "/b_allocReadChannel", bufnum);
+    }
 }
 
 template <bool realtime>
-void b_allocReadChannel_2_rt(uint32_t index, completion_message & msg, sample * free_buf,
+void b_allocReadChannel_2_rt(uint32_t bufnum, completion_message & msg, sample * free_buf,
                              nova_endpoint const & endpoint)
 {
-    sc_factory->buffer_sync(index);
+    sc_factory->buffer_sync(bufnum);
     msg.handle(endpoint);
     cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_allocReadChannel_3_nrt,
-                                                               index, free_buf, endpoint));
+                                                             bufnum, free_buf, endpoint));
 }
 
-void b_allocReadChannel_3_nrt(uint32_t index, sample * free_buf, nova_endpoint const & endpoint)
+void b_allocReadChannel_3_nrt(uint32_t bufnum, sample * free_buf, nova_endpoint const & endpoint)
 {
     free_aligned(free_buf);
-    send_done_message(endpoint, "/b_allocReadChannel", index);
+    send_done_message(endpoint, "/b_allocReadChannel", bufnum);
 }
 
 
@@ -2012,7 +2084,7 @@ void handle_b_allocReadChannel(received_message const & msg, nova_endpoint const
 {
     osc::ReceivedMessageArgumentIterator arg = msg.ArgumentsBegin();
 
-    osc::int32 index = arg->AsInt32(); arg++;
+    osc::int32 bufnum = arg->AsInt32(); arg++;
     const char * filename = arg->AsString(); arg++;
 
     osc::int32 start = arg->AsInt32(); arg++;
@@ -2023,8 +2095,8 @@ void handle_b_allocReadChannel(received_message const & msg, nova_endpoint const
     size_t channel_count = 0;
     sized_array<uint, rt_pool_allocator<uint> > channels(channel_args);
 
-    for (uint i = 0; i != channel_args - 1; ++i) // sclang formats the last completion message as int, so we skip the last element
-    {
+    // sclang formats the last completion message as int, so we skip the last element
+    for (uint i = 0; i != channel_args - 1; ++i)  {
         if (arg->IsInt32()) {
             channels[i] = arg->AsInt32Unchecked(); arg++;
             ++channel_count;
@@ -2038,21 +2110,25 @@ void handle_b_allocReadChannel(received_message const & msg, nova_endpoint const
     movable_string fname(filename);
 
     cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_allocReadChannel_1_nrt<realtime>,
-                                                           index, fname, start, frames, channel_mapping,
+                                                           bufnum, fname, start, frames, channel_mapping,
                                                            message, endpoint));
 }
 
 const char * b_write = "/b_write";
 
 template <bool realtime>
-void b_write_nrt_1(uint32_t index, movable_string const & filename, movable_string const & header_format,
+void b_write_nrt_1(uint32_t bufnum, movable_string const & filename, movable_string const & header_format,
                    movable_string const & sample_format, uint32_t start, uint32_t frames, bool leave_open,
                    completion_message & msg, nova_endpoint const & endpoint)
 {
-    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(index));
-    sc_factory->buffer_write(index, filename.c_str(), header_format.c_str(), sample_format.c_str(), start, frames, leave_open);
-    msg.trigger_async(endpoint);
-    cmd_dispatcher<realtime>::fire_done_message(endpoint, b_write, index);
+    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(bufnum));
+    try {
+        sc_factory->buffer_write(bufnum, filename.c_str(), header_format.c_str(), sample_format.c_str(), start, frames, leave_open);
+        msg.trigger_async(endpoint);
+        cmd_dispatcher<realtime>::fire_done_message(endpoint, b_write, bufnum);
+    } catch (std::exception const & error) {
+        report_failure(endpoint, error, b_write, bufnum);
+    }
 }
 
 void fire_b_write_exception(void)
@@ -2067,7 +2143,7 @@ void handle_b_write(received_message const & msg, nova_endpoint const & endpoint
     osc::ReceivedMessageArgumentIterator end = msg.ArgumentsEnd();
 
     /* required args */
-    osc::int32 index = arg->AsInt32(); arg++;
+    osc::int32 bufnum = arg->AsInt32(); arg++;
     const char * filename = arg->AsString(); arg++;
     const char * header_format = arg->AsString(); arg++;
     const char * sample_format = arg->AsString(); arg++;
@@ -2083,24 +2159,21 @@ void handle_b_write(received_message const & msg, nova_endpoint const & endpoint
         if (!arg->IsInt32())
             fire_b_write_exception();
         frames = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end) {
         if (!arg->IsInt32())
             fire_b_write_exception();
         start = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end) {
         if (!arg->IsInt32())
             fire_b_write_exception();
         leave_open = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end)
@@ -2111,23 +2184,30 @@ fire_callback:
     movable_string header_f(header_format);
     movable_string sample_f(sample_format);
 
-    cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_write_nrt_1<realtime>, index, fname, header_f, sample_f,
-                                               start, frames, bool(leave_open), message, endpoint));
+    cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_write_nrt_1<realtime>, bufnum, fname, header_f, sample_f,
+                                                             start, frames, bool(leave_open), message, endpoint));
 }
 
+
+const char * b_read = "/b_read";
+
 template <bool realtime>
-void b_read_rt_2(uint32_t index, completion_message & msg, nova_endpoint const & endpoint);
+void b_read_rt_2(uint32_t bufnum, completion_message & msg, nova_endpoint const & endpoint);
 
 template <bool realtime>
-void b_read_nrt_1(uint32_t index, movable_string & filename, uint32_t start_file, uint32_t frames,
+void b_read_nrt_1(uint32_t bufnum, movable_string & filename, uint32_t start_file, uint32_t frames,
                   uint32_t start_buffer, bool leave_open, completion_message & msg, nova_endpoint const & endpoint)
 {
-    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(index));
-    sc_factory->buffer_read(index, filename.c_str(), start_file, frames, start_buffer, leave_open);
-    cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_read_rt_2<realtime>, index, msg, endpoint));
+    sc_ugen_factory::buffer_lock_t buffer_lock(sc_factory->buffer_guard(bufnum));
+
+    try {
+        sc_factory->buffer_read(bufnum, filename.c_str(), start_file, frames, start_buffer, leave_open);
+        cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_read_rt_2<realtime>, bufnum, msg, endpoint));
+    } catch (std::exception const & error) {
+        report_failure(endpoint, error, b_read, bufnum);
+    }
 }
 
-const char * b_read = "/b_read";
 template <bool realtime>
 void b_read_rt_2(uint32_t index, completion_message & msg, nova_endpoint const & endpoint)
 {
@@ -2148,7 +2228,7 @@ void handle_b_read(received_message const & msg, nova_endpoint const & endpoint)
     osc::ReceivedMessageArgumentIterator end = msg.ArgumentsEnd();
 
     /* required args */
-    osc::int32 index = arg->AsInt32(); arg++;
+    osc::int32 bufnum = arg->AsInt32(); arg++;
     const char * filename = arg->AsString(); arg++;
 
     /* optional args */
@@ -2163,32 +2243,28 @@ void handle_b_read(received_message const & msg, nova_endpoint const & endpoint)
         if (!arg->IsInt32())
             fire_b_read_exception();
         start_file = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end) {
         if (!arg->IsInt32())
             fire_b_read_exception();
         frames = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end) {
         if (!arg->IsInt32())
             fire_b_read_exception();
         start_buffer = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end) {
         if (!arg->IsInt32())
             fire_b_read_exception();
         leave_open = arg->AsInt32Unchecked(); arg++;
-    }
-    else
+    } else
         goto fire_callback;
 
     if (arg != end)
@@ -2197,26 +2273,30 @@ void handle_b_read(received_message const & msg, nova_endpoint const & endpoint)
 fire_callback:
     movable_string fname(filename);
 
-    cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_read_nrt_1<realtime>, index, fname,
-                                                               start_file, frames, start_buffer,
-                                                               bool(leave_open), message, endpoint));
+    cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_read_nrt_1<realtime>, bufnum, fname,
+                                                             start_file, frames, start_buffer,
+                                                             bool(leave_open), message, endpoint));
 }
 
+const char * b_readChannel = "/b_readChannel";
 
 template <bool realtime>
 void b_readChannel_rt_2(uint32_t index, completion_message & msg, nova_endpoint const & endpoint);
 
 template <bool realtime>
-void b_readChannel_nrt_1(uint32_t index, movable_string & filename, uint32_t start_file, uint32_t frames,
+void b_readChannel_nrt_1(uint32_t bufnum, movable_string & filename, uint32_t start_file, uint32_t frames,
                          uint32_t start_buffer, bool leave_open, movable_array<uint32_t> & channel_map,
                          completion_message & msg, nova_endpoint const & endpoint)
 {
-    sc_factory->buffer_read_channel(index, filename.c_str(), start_file, frames, start_buffer, leave_open,
-                                     channel_map.size(), channel_map.data());
-    cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_readChannel_rt_2<realtime>, index, msg, endpoint));
+    try {
+        sc_factory->buffer_read_channel(bufnum, filename.c_str(), start_file, frames, start_buffer, leave_open,
+                                        channel_map.size(), channel_map.data());
+        cmd_dispatcher<realtime>::fire_system_callback(std::bind(b_readChannel_rt_2<realtime>, bufnum, msg, endpoint));
+    } catch (std::exception const & error) {
+        report_failure(endpoint, error, b_readChannel, bufnum);
+    }
 }
 
-const char * b_readChannel = "/b_readChannel";
 template <bool realtime>
 void b_readChannel_rt_2(uint32_t index, completion_message & msg, nova_endpoint const & endpoint)
 {
@@ -2432,18 +2512,20 @@ void handle_b_query(received_message const & msg, nova_endpoint const & endpoint
 }
 
 template <bool realtime>
-void b_close_rt_2(completion_message & msg, nova_endpoint const & endpoint);
+void b_close_rt_2(uint32_t index, completion_message & msg, nova_endpoint const & endpoint);
 
 template <bool realtime>
 void b_close_nrt_1(uint32_t index, completion_message & msg, nova_endpoint const & endpoint)
 {
     sc_factory->buffer_close(index);
-    cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_close_rt_2<realtime>, msg, endpoint));
+    cmd_dispatcher<realtime>::fire_rt_callback(std::bind(b_close_rt_2<realtime>, index, msg, endpoint));
 }
 
 template <bool realtime>
-void b_close_rt_2(completion_message & msg, nova_endpoint const & endpoint)
+void b_close_rt_2(uint32_t index, completion_message & msg, nova_endpoint const & endpoint)
 {
+    msg.handle(endpoint);
+    cmd_dispatcher<realtime>::fire_done_message(endpoint, "/b_close", index);
 }
 
 template <bool realtime>
diff --git a/server/supernova/sc/sc_osc_handler.hpp b/server/supernova/sc/sc_osc_handler.hpp
index 6f6d57d..47dd869 100644
--- a/server/supernova/sc/sc_osc_handler.hpp
+++ b/server/supernova/sc/sc_osc_handler.hpp
@@ -59,25 +59,37 @@ class sc_notify_observers
     typedef std::vector<nova_endpoint> observer_vector;
 
 public:
+    typedef enum {
+        no_error = 0,
+        already_registered,
+        not_registered
+    } error_code;
+
     sc_notify_observers(boost::asio::io_service & io_service):
         udp_socket(io_service), tcp_socket(io_service)
     {}
 
-    void add_observer(nova_endpoint const & ep)
+    error_code add_observer(nova_endpoint const & ep)
     {
+        observer_vector::iterator it = std::find(observers.begin(), observers.end(), ep);
+        if (it != observers.end())
+            return already_registered;
+
         observers.push_back(ep);
+        return no_error;
     }
 
-    void remove_observer(nova_endpoint const & ep)
+    error_code remove_observer(nova_endpoint const & ep)
     {
-        observer_vector::iterator it = std::find(observers.begin(),
-                                                 observers.end(), ep);
-        assert (it != observers.end());
+        observer_vector::iterator it = std::find(observers.begin(), observers.end(), ep);
+
+        if (it == observers.end())
+            return not_registered;
 
         observers.erase(it);
+        return no_error;
     }
 
-
     /* @{ */
     /** notifications, should be called from the real-time thread */
     void notification_node_started(const server_node * node)
@@ -146,8 +158,10 @@ public:
     }
     /* @} */
 
+    static const char * error_string(error_code );
+
 private:
-    void notify(const char * address_pattern, const server_node * node);
+    void notify(const char * address_pattern, const server_node * node) const;
     void send_notification(const char * data, size_t length, nova_endpoint const & endpoint);
 
     observer_vector observers;
diff --git a/server/supernova/sc/sc_plugin_interface.cpp b/server/supernova/sc/sc_plugin_interface.cpp
index 1e8c4a2..ba1a45b 100644
--- a/server/supernova/sc/sc_plugin_interface.cpp
+++ b/server/supernova/sc/sc_plugin_interface.cpp
@@ -54,6 +54,8 @@ spin_lock log_guard; // needs to be acquired for logging from the helper threads
 
 namespace {
 
+spin_lock rt_pool_guard;
+
 inline Node * as_Node(server_node * node)
 {
     if (node == NULL)
@@ -321,8 +323,7 @@ void release_scope_buffer(World *inWorld, ScopeBufferHnd &hnd)
 } /* namespace */
 } /* namespace nova */
 
-extern "C"
-{
+extern "C" {
 
 bool define_unit(const char *inUnitClassName, size_t inAllocSize,
                  UnitCtorFunc inCtor, UnitDtorFunc inDtor, uint32 inFlags)
@@ -354,7 +355,6 @@ bool define_unitcmd(const char * unitClassName, const char * cmdName, UnitCmdFun
     return nova::sc_factory->register_ugen_command_function(unitClassName, cmdName, inFunc);
 }
 
-
 bool define_plugincmd(const char * name, PlugInCmdFunc func, void * user_data)
 {
     return nova::sc_factory->register_cmd_plugin(name, func, user_data);
@@ -362,6 +362,7 @@ bool define_plugincmd(const char * name, PlugInCmdFunc func, void * user_data)
 
 void * rt_alloc(World * dummy, size_t size)
 {
+    nova::spin_lock::scoped_lock lock(nova::rt_pool_guard);
     if (size)
         return nova::rt_pool.malloc(size);
     else
@@ -370,11 +371,13 @@ void * rt_alloc(World * dummy, size_t size)
 
 void * rt_realloc(World * dummy, void * ptr, size_t size)
 {
+    nova::spin_lock::scoped_lock lock(nova::rt_pool_guard);
     return nova::rt_pool.realloc(ptr, size);
 }
 
 void rt_free(World * dummy, void * ptr)
 {
+    nova::spin_lock::scoped_lock lock(nova::rt_pool_guard);
     if (ptr)
         nova::rt_pool.free(ptr);
 }
@@ -897,11 +900,11 @@ SndBuf * sc_plugin_interface::allocate_buffer(uint32_t index, uint32_t frames, u
     return buf;
 }
 
-int sc_plugin_interface::buffer_read_alloc(uint32_t index, const char * filename, uint32_t start, uint32_t frames)
+void sc_plugin_interface::buffer_read_alloc(uint32_t index, const char * filename, uint32_t start, uint32_t frames)
 {
     SndfileHandle f(filename);
-    if (!f)
-        return -1; /* file cannot be opened */
+    if (f.rawHandle() == nullptr)
+        throw std::runtime_error(f.strError());
 
     const size_t sf_frames = f.frames();
 
@@ -916,22 +919,21 @@ int sc_plugin_interface::buffer_read_alloc(uint32_t index, const char * filename
 
     f.seek(start, SEEK_SET);
     f.readf(buf->data, frames);
-    return 0;
 }
 
 
-int sc_plugin_interface::buffer_alloc_read_channels(uint32_t index, const char * filename, uint32_t start,
-                                                    uint32_t frames, uint32_t channel_count,
-                                                    const uint32_t * channel_data)
+void sc_plugin_interface::buffer_alloc_read_channels(uint32_t index, const char * filename, uint32_t start,
+                                                     uint32_t frames, uint32_t channel_count,
+                                                     const uint32_t * channel_data)
 {
     SndfileHandle f(filename);
-    if (!f)
-        return -1; /* file cannot be opened */
+    if (f.rawHandle() == nullptr)
+        throw std::runtime_error(f.strError());
 
     uint32_t sf_channels = uint32_t(f.channels());
     const uint32_t * max_chan = std::max_element(channel_data, channel_data + channel_count);
     if (*max_chan >= sf_channels)
-        return -2;
+        throw std::runtime_error("Channel out of range");
 
     const size_t sf_frames = f.frames();
 
@@ -946,8 +948,6 @@ int sc_plugin_interface::buffer_alloc_read_channels(uint32_t index, const char *
 
     f.seek(start, SEEK_SET);
     read_channel(f, channel_count, channel_data, frames, buf->data);
-
-    return 0;
 }
 
 
@@ -977,32 +977,30 @@ int sc_plugin_interface::buffer_write(uint32_t index, const char * filename, con
     return 0;
 }
 
-static int buffer_read_verify(SndfileHandle const & sf, size_t min_length, size_t samplerate)
+static void buffer_read_verify(SndfileHandle & sf, size_t min_length, size_t samplerate, bool check_samplerate)
 {
-    if (!sf)
-        return -1;
+    if (sf.rawHandle() == nullptr)
+        throw std::runtime_error(sf.strError());
     if (sf.frames() < min_length)
-        return -2; /* no more frames to read */
-    if (sf.samplerate() != samplerate)
-        return -3; /* sample rate mismatch */
-    return 0;
+        throw std::runtime_error("no more frames to read");
+
+    if (check_samplerate && (sf.samplerate() != samplerate))
+        throw std::runtime_error("sample rate mismatch");
 }
 
-int sc_plugin_interface::buffer_read(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames,
-                                     uint32_t start_buffer, bool leave_open)
+void sc_plugin_interface::buffer_read(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames,
+                                      uint32_t start_buffer, bool leave_open)
 {
     SndBuf * buf = World_GetNRTBuf(&world, index);
 
     if (uint32_t(buf->frames) < start_buffer)
-        return -2; /* buffer already full */
+        throw std::runtime_error("buffer already full");
 
     SndfileHandle sf(filename, SFM_READ);
-    int error = buffer_read_verify(sf, start_file, buf->samplerate);
-    if (error)
-        return error;
+    buffer_read_verify(sf, start_file, buf->samplerate, !leave_open);
 
     if (sf.channels() != buf->channels)
-        return -3; /* sample rate or channel count mismatch */
+        throw std::runtime_error("channel count mismatch");
 
     const uint32_t buffer_remain = buf->frames - start_buffer;
     const uint32_t file_remain = sf.frames() - start_file;
@@ -1013,41 +1011,38 @@ int sc_plugin_interface::buffer_read(uint32_t index, const char * filename, uint
 
     if (leave_open)
         buf->sndfile = sf.takeOwnership();
-    return 0;
 }
 
-int sc_plugin_interface::buffer_read_channel(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames,
+void sc_plugin_interface::buffer_read_channel(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames,
                                              uint32_t start_buffer, bool leave_open, uint32_t channel_count,
                                              const uint32_t * channel_data)
 {
     SndBuf * buf = World_GetNRTBuf(&world, index);
 
     if (channel_count != uint32_t(buf->channels))
-        return -2; /* channel count mismatch */
+        throw std::runtime_error("channel count mismatch");
 
     if (uint32_t(buf->frames) >= start_buffer)
-        return -2; /* buffer already full */
+        throw std::runtime_error("buffer already full");
 
     SndfileHandle sf(filename, SFM_READ);
-    int error = buffer_read_verify(sf, start_file, buf->samplerate);
-    if (error)
-        return error;
+    buffer_read_verify(sf, start_file, buf->samplerate, !leave_open);
 
     uint32_t sf_channels = uint32_t(sf.channels());
     const uint32_t * max_chan = std::max_element(channel_data, channel_data + channel_count);
     if (*max_chan >= sf_channels)
-        return -2;
+        throw std::runtime_error("channel count mismatch");
+
     const uint32_t buffer_remain = buf->frames - start_buffer;
     const uint32_t file_remain = sf.frames() - start_file;
 
     const uint32_t frames_to_read = std::min(frames, std::min(buffer_remain, file_remain));
 
     sf.seek(start_file, SEEK_SET);
-    read_channel(sf, channel_count, channel_data, frames, buf->data);
+    read_channel(sf, channel_count, channel_data, frames_to_read, buf->data);
 
     if (leave_open)
         buf->sndfile = sf.takeOwnership();
-    return 0;
 }
 
 void sc_plugin_interface::buffer_close(uint32_t index)
@@ -1079,7 +1074,7 @@ sample * sc_plugin_interface::buffer_generate(uint32_t buffer_index, const char*
     return sc_factory->run_bufgen(&world, cmd_name, buffer_index, &msg);
 }
 
-void sc_plugin_interface::buffer_sync(uint32_t index)
+void sc_plugin_interface::buffer_sync(uint32_t index) noexcept
 {
     sndbuf_copy(world.mSndBufs + index, world.mSndBufsNonRealTimeMirror + index);
     increment_write_updates(index);
diff --git a/server/supernova/sc/sc_plugin_interface.hpp b/server/supernova/sc/sc_plugin_interface.hpp
index 7f6e975..79e420a 100644
--- a/server/supernova/sc/sc_plugin_interface.hpp
+++ b/server/supernova/sc/sc_plugin_interface.hpp
@@ -54,18 +54,25 @@ public:
     void add_done_node(server_node * node)
     {
         spin_lock::scoped_lock lock(cmd_lock);
+        if (std::find(done_nodes.begin(), done_nodes.end(), node) != done_nodes.end())
+            return;
+
         done_nodes.push_back(node);
     }
 
     void add_freeDeep_node(abstract_group * node)
     {
         spin_lock::scoped_lock lock(cmd_lock);
+        if (std::find(freeDeep_nodes.begin(), freeDeep_nodes.end(), node) != freeDeep_nodes.end())
+            return;
         freeDeep_nodes.push_back(node);
     }
 
     void add_freeAll_node(abstract_group * node)
     {
         spin_lock::scoped_lock lock(cmd_lock);
+        if (std::find(freeAll_nodes.begin(), freeAll_nodes.end(), node) != freeAll_nodes.end())
+            return;
         freeAll_nodes.push_back(node);
     }
 
@@ -109,13 +116,13 @@ public:
     /* audio buffer handling */
     SndBuf* allocate_buffer(uint32_t index, uint32_t frames, uint32_t channels);
     int allocate_buffer(SndBuf * buf, uint32_t frames, uint32_t channels, double samplerate);
-    int buffer_read_alloc(uint32_t index, const char * filename, uint32_t start, uint32_t frames);
-    int buffer_alloc_read_channels(uint32_t index, const char * filename, uint32_t start, uint32_t frames, uint32_t channel_count,
-                                   const uint32_t * channel_data);
-    int buffer_read(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames, uint32_t start_buffer,
-                    bool leave_open);
-    int buffer_read_channel(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames, uint32_t start_buffer,
-                    bool leave_open, uint32_t channel_count, const uint32_t * channel_data);
+    void buffer_read_alloc(uint32_t index, const char * filename, uint32_t start, uint32_t frames);
+    void buffer_alloc_read_channels(uint32_t index, const char * filename, uint32_t start, uint32_t frames, uint32_t channel_count,
+                                    const uint32_t * channel_data);
+    void buffer_read(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames, uint32_t start_buffer,
+                     bool leave_open);
+    void buffer_read_channel(uint32_t index, const char * filename, uint32_t start_file, uint32_t frames, uint32_t start_buffer,
+                             bool leave_open, uint32_t channel_count, const uint32_t * channel_data);
 
     sample * get_nrt_mirror_buffer(uint32_t index)
     {
@@ -160,7 +167,7 @@ private:
 
 public:
     /* copies nrt mirror to rt buffers */
-    void buffer_sync(uint32_t index);
+    void buffer_sync(uint32_t index) noexcept;
 
     /* @{ */
     /* control bus handling */
diff --git a/server/supernova/server/main.cpp b/server/supernova/server/main.cpp
index 18e809a..b63ba83 100644
--- a/server/supernova/server/main.cpp
+++ b/server/supernova/server/main.cpp
@@ -136,7 +136,6 @@ void start_audio_backend(server_arguments const & args)
     }
 
     connect_jack_ports();
-    instance->start_dsp_threads();
 }
 
 #elif defined(PORTAUDIO_BACKEND)
@@ -153,7 +152,6 @@ void start_audio_backend(server_arguments const & args)
     cout << "opened portaudio device name:" << args.hw_name << endl;
     instance->prepare_backend();
     instance->activate_audio();
-    instance->start_dsp_threads();
 }
 
 #else
@@ -222,7 +220,7 @@ void set_plugin_paths(void)
 void load_synthdef_folder(nova_server & server, path const & folder, bool verbose)
 {
     if (verbose)
-        std::printf("Loading synthdefs from path: %s\n", folder.c_str());
+        std::cout << "Loading synthdefs from path: " << folder.string() << std::endl;
 
     register_synthdefs(server, std::move(sc_read_synthdefs_dir(folder)));
 }
diff --git a/server/supernova/server/nrt_synthesis.hpp b/server/supernova/server/nrt_synthesis.hpp
index 27c5f42..a7bc437 100644
--- a/server/supernova/server/nrt_synthesis.hpp
+++ b/server/supernova/server/nrt_synthesis.hpp
@@ -18,7 +18,7 @@
 #ifndef SERVER_NRT_SYNTHESIS_HPP
 #define SERVER_NRT_SYNTHESIS_HPP
 
-#include <iostream>
+#include <cstdio>
 #include <fstream>
 #include <string>
 
@@ -86,7 +86,7 @@ struct non_realtime_synthesis_engine
         using namespace std;
         array<char, 16384> packet_buffer;
 
-        cout << "Starting non-rt synthesis" << endl;
+        printf("Starting non-rt synthesis");
         backend.activate_audio();
 
         while (!command_stream.eof()) {
@@ -98,7 +98,9 @@ struct non_realtime_synthesis_engine
 
             time_tag bundle_time = instance->handle_bundle_nrt(packet_buffer.data(), packet_size);
 
-            cout << "Next OSC bundle " << bundle_time.get_secs() << "." << bundle_time.get_nanoseconds() << endl;
+            size_t seconds = bundle_time.get_secs();
+            size_t nano_seconds = bundle_time.get_nanoseconds();
+            printf("Next OSC bundle: %zu.%09zu\n", seconds, nano_seconds);
 
             while (instance->current_time() < bundle_time) {
                 if (has_inputs)
@@ -108,7 +110,7 @@ struct non_realtime_synthesis_engine
             }
         }
         backend.deactivate_audio();
-        cout << "Non-rt synthesis finished" << endl;
+        printf("Non-rt synthesis finished");
     }
 
     sndfile_backend<non_rt_functor, float, true> backend;
diff --git a/server/supernova/server/server.cpp b/server/supernova/server/server.cpp
index cf7b6bc..df12a4e 100644
--- a/server/supernova/server/server.cpp
+++ b/server/supernova/server/server.cpp
@@ -1,5 +1,5 @@
 //  nova server
-//  Copyright (C) 2008, 2009, 2010 Tim Blechmann
+//  Copyright (C) 2008 - 2012 Tim Blechmann
 //
 //  This program is free software; you can redistribute it and/or modify
 //  it under the terms of the GNU General Public License as published by
@@ -92,12 +92,10 @@ void nova_server::prepare_backend(void)
 
 nova_server::~nova_server(void)
 {
-#if defined(JACK_BACKEND)
-    if (audio_is_active())
-        deactivate_audio();
-
-    close_client();
+#if defined(JACK_BACKEND) || defined(PORTAUDIO_BACKEND)
+    deactivate_audio();
 #endif
+
     scheduler<scheduler_hook, thread_init_functor>::terminate();
     io_interpreter.join_thread();
     instance = 0;
@@ -168,6 +166,7 @@ void nova_server::free_node(server_node * node)
 
 void nova_server::run_nonrt_synthesis(server_arguments const & args)
 {
+    start_dsp_threads();
     non_realtime_synthesis_engine engine(args);
     engine.run();
 }
diff --git a/server/supernova/server/server.hpp b/server/supernova/server/server.hpp
index b2e2f9a..d04420e 100644
--- a/server/supernova/server/server.hpp
+++ b/server/supernova/server/server.hpp
@@ -174,6 +174,7 @@ public:
 
     void run(void)
     {
+        start_dsp_threads();
         system_interpreter.run();
     }
 
@@ -293,6 +294,7 @@ public:
 
         sc_factory->initialize_synths();
         scheduler<scheduler_hook, thread_init_functor>::operator()();
+        sc_factory->update_nodegraph();
     }
 
     void rebuild_dsp_queue(void);
@@ -322,8 +324,6 @@ inline void run_scheduler_tick(void)
 
     (*instance)();
 
-    sc_factory->update_nodegraph();
-
     /* wipe all untouched output buffers */
     for (int channel = 0; channel != output_channels; ++channel) {
         if (sc_factory->world.mAudioBusTouched[channel] != buf_counter)
diff --git a/server/supernova/utilities/asynchronous_log.hpp b/server/supernova/utilities/asynchronous_log.hpp
index 70baf7e..c0c3994 100644
--- a/server/supernova/utilities/asynchronous_log.hpp
+++ b/server/supernova/utilities/asynchronous_log.hpp
@@ -87,8 +87,8 @@ struct asynchronous_log:
             if (enqueued == length)
                 break;
 
-            string += total_enqueued;
-            length -= total_enqueued;
+            string += enqueued;
+            length -= enqueued;
         }
 
         return true;
diff --git a/server/supernova/utilities/sized_array.hpp b/server/supernova/utilities/sized_array.hpp
index 13145de..799974e 100644
--- a/server/supernova/utilities/sized_array.hpp
+++ b/server/supernova/utilities/sized_array.hpp
@@ -205,21 +205,25 @@ public:
     // element access
     reference operator[](size_type i)
     {
+        assert(i < size());
         return data_[i];
     }
 
     const_reference operator[](size_type i) const
     {
+        assert(i < size());
         return data_[i];
     }
 
     reference at(size_type i)
     {
+        assert(i < size());
         return data_[i];
     }
 
     const_reference at(size_type i) const
     {
+        assert(i < size());
         return data_[i];
     }
 

-- 
supercollider packaging



More information about the pkg-multimedia-commits mailing list